개념 사전 · 프로그램

Ghidra

기드라

는 실행 파일을 역어셈블하고 함수·참조·의사코드를 분석하는 소프트웨어 역공학 도구다. 디컴파일된 C 형태의 화면은 복원된 해석이며 원래 소스 코드 그대로가 아니다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 실행 파일의 코드와 데이터 영역을 구분한다.
  • 함수 호출·문자열·주소 참조를 따라 동작 후보를 좁힌다.
  • 기계어·타입·호출 규약과 의사코드를 대조한다.

02어떤 순서로 동작하나

  1. 파일 불러오기

    파일 형식과 CPU ·엔디언·로드 주소를 확인하고 분석 사본을 연다. 잘못된 형식 선택은 뒤의 명령 해석을 왜곡한다.

  2. 코드 분석

    함수·분기·호출·문자열 참조를 연결해 관심 경로를 찾는다. Import에 함수가 있다는 사실과 실행되었다는 사실을 구분한다.

  3. 의사코드 대조

    디컴파일 결과의 타입·인수·조건을 의 실제 명령과 비교한다. 포인터·부호·배열 경계가 잘못 복원된 가능성을 남긴다.

  4. 실행 증거 연결

    필요하면 격리된 동적 관찰의 주소·입력·반환값과 대조한다. ASLR·언패킹·런타임 생성 코드 때문에 디스크의 주소와 메모리 주소가 달라질 수 있다.

03먼저 알아둘 용어와 구성요소

주소·바이트·명령어를 연결해 보여 주는 코드 화면.
기계어 분석 결과를 고수준 의사코드로 표현하는 기능.
특정 주소·함수·데이터를 사용하는 위치의 관계.
로드 이미지 기준 주소에서 떨어진 상대 가상 주소.

04예제로 따라가기

  • 주어진 값: 실제 모듈 기준 주소=0x140000000, 조사 VA=0x140002120이라고 가정한다. 두 값은 교육용 가상 수치다.
  • 계산: 0x140002120−0x140000000=0x2120이다. 먼저 이 를 포함하는 섹션을 찾는다.
  • 섹션 대응: 그 섹션의 VirtualAddress=0x2000, PointerToRawData=0x600이면 섹션 내부 차이는 0x120이다.
  • 파일 오프셋: SizeOfRawData가 이 범위를 포함한다는 조건에서 파일 위치는 0x600+0x120=0x720이다.
  • 범위 밖 사례: 섹션 내부 차이가 파일의 원시 데이터 길이보다 크면 같은 공식을 무조건 적용하지 않는다. 가상 꼬리 영역인지 잘못된 헤더인지 따로 판단한다.

05혼동하기 쉬운 점과 확인 기준

  • 파일 오프셋과 가상 주소를 같은 수치로 취급하면 바이트를 잘못 읽는다. 섹션의 배치와 범위 조건을 먼저 맞춘다.
  • 디컴파일된 함수 이름·변수 이름과 타입은 분석 과정에서 추정·수정된 정보일 수 있으므로 원래 개발자의 의도라고 단정하지 않는다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.