개념 사전 · 프로그램
Ghidra
기드라
는 실행 파일을 역어셈블하고 함수·참조·의사코드를 분석하는 소프트웨어 역공학 도구다. 디컴파일된 C 형태의 화면은 복원된 해석이며 원래 소스 코드 그대로가 아니다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 실행 파일의 코드와 데이터 영역을 구분한다.
- 함수 호출·문자열·주소 참조를 따라 동작 후보를 좁힌다.
- 기계어·타입·호출 규약과 의사코드를 대조한다.
02어떤 순서로 동작하나
- 파일 불러오기
파일 형식과 CPU ·엔디언·로드 주소를 확인하고 분석 사본을 연다. 잘못된 형식 선택은 뒤의 명령 해석을 왜곡한다.
- 코드 분석
함수·분기·호출·문자열 참조를 연결해 관심 경로를 찾는다. Import에 함수가 있다는 사실과 실행되었다는 사실을 구분한다.
- 의사코드 대조
디컴파일 결과의 타입·인수·조건을 의 실제 명령과 비교한다. 포인터·부호·배열 경계가 잘못 복원된 가능성을 남긴다.
- 실행 증거 연결
필요하면 격리된 동적 관찰의 주소·입력·반환값과 대조한다. ASLR·언패킹·런타임 생성 코드 때문에 디스크의 주소와 메모리 주소가 달라질 수 있다.
03먼저 알아둘 용어와 구성요소
- 주소·바이트·명령어를 연결해 보여 주는 코드 화면.
- 기계어 분석 결과를 고수준 의사코드로 표현하는 기능.
- 특정 주소·함수·데이터를 사용하는 위치의 관계.
- 로드 이미지 기준 주소에서 떨어진 상대 가상 주소.
04예제로 따라가기
- 주어진 값: 실제 모듈 기준 주소=0x140000000, 조사 VA=0x140002120이라고 가정한다. 두 값은 교육용 가상 수치다.
- 계산: 0x140002120−0x140000000=0x2120이다. 먼저 이 를 포함하는 섹션을 찾는다.
- 섹션 대응: 그 섹션의 VirtualAddress=0x2000, PointerToRawData=0x600이면 섹션 내부 차이는 0x120이다.
- 파일 오프셋: SizeOfRawData가 이 범위를 포함한다는 조건에서 파일 위치는 0x600+0x120=0x720이다.
- 범위 밖 사례: 섹션 내부 차이가 파일의 원시 데이터 길이보다 크면 같은 공식을 무조건 적용하지 않는다. 가상 꼬리 영역인지 잘못된 헤더인지 따로 판단한다.
05혼동하기 쉬운 점과 확인 기준
- 파일 오프셋과 가상 주소를 같은 수치로 취급하면 바이트를 잘못 읽는다. 섹션의 배치와 범위 조건을 먼저 맞춘다.
- 디컴파일된 함수 이름·변수 이름과 타입은 분석 과정에서 추정·수정된 정보일 수 있으므로 원래 개발자의 의도라고 단정하지 않는다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.