- Ghidra는 미국 국가안보국(National Security Agency, NSA)에서 개발한 오픈 소스 리버스 엔지니어링 도구이다.
- 오픈 소스이면서 무료이므로 사용하기 위해 비용을 지불하지 않아도 되며, 탄탄한 디스어셈블과 디컴파일 기능을 제공하는 것으로 알려져 있다.
- 이외 Ghidra 사용법은 https://learn.dreamhack.io/389 참조.
1. 설치 방법
- MAC OS : https://hacksms.tistory.com/269 ▶ Ghidra 설치 폴더에서 ghidraRun 프로그램을 실행하여 Ghidra를 실행한다.
2. 프로젝트(Project)
- Ghidra의 토대가 되는 단위로, 리버스 엔지니어는 프로그램을 프로젝트에 불러와 도구들을 이용해 분석을 수행할 수 있게 된다.
3. 코드 브라우저(Code Browser)
- Ghidra에 내장된 핵심 도구 중 하나로 다음과 같은 주요 기능을 제공한다.
- 디스어셈블: 분석 대상 프로그램의 기계어를 역으로 어셈블하여 어셈블리 언어 형태의 코드로 보여준다.
- 디컴파일: 디스어셈블 결과를 C언어 형태로 디컴파일하여 사람이 이해하기 쉬운 코드로 변환하여 보여준다.
- 코드 자동 분석: 프로그램 내에 존재하는 함수들을 자동으로 식별하고, 변수의 타입을 추론한다.
- 코드 시각화: 제어 흐름 그래프(Control Flow Graph)로 코드의 흐름을 시각적으로 표현하여 코드의 복잡한 구조를 비교적 쉽게 파악할 수 있다.
- 스크립팅: 사용자가 자신의 요구에 맞게 분석 프로세스를 스크립트로 작성하고 실행할 수 있다.
▶ 함수 시그니처/변수 리타입 & 리네임이 가능하다.
▶ Window - Function Call Graph로 함수 호출 그래프를 볼 수 있다.
▶ Window - Function Graph로 함수 그래프를 볼 수 있다.
▶ 주석 기능을 지원한다.
▶ 북마크 기능을 지원한다.
▶ Window - Bytes로 바이트 뷰어를 볼 수 있다.
- 세부 윈도우에 대한 내용은 다음과 같다.
번호 및 명칭 | 설명 |
1. 디컴파일 창(Decompile) | C언어 형태로 디컴파일된 코드를 볼 수 있다. 디스어셈블 리스팅(2번 윈도우)에서 어셈블리 명령어를 클릭하면 해당 부분을 디컴파일하여 디컴파일 윈도우에서 보여준다. |
2. 디스어셈블 리스팅(Listing) | 디스어셈블된 코드를 볼 수 있다. 디컴파일 창(1번 윈도우)에서 원하는 부분을 클릭하면 해당 부분을 디스어셈블 리스팅에서 보여준다. |
3. 심볼 트리(Symbol Tree) | 프로그램에 존재하는 심볼들(함수 이름)을 볼 수 있다. 원하는 심볼을 더블클릭하면 디스어셈블 리스팅이 해당 위치로 이동한다. |
4. 프로그램 트리(Program Trees) | 프로그램을 계층 구조로 쪼개어 보여준다. 예를 들어서 리눅스 실행 파일 포맷인 ELF 프로그램의 경우, 내부적으로 .text, .data, .rodata와 같은 섹션으로 나누어져 있다. 프로그램 트리에서 특정 섹션을 클릭하면, 디스어셈블 리스팅이 해당하는 섹션의 위치로 이동한다. |
5. 데이터 타입 매니저(Data Type Manager) | 데이터 타입을 관리할 수 있는 창이다. 라이브러리에 정의된 타입을 불러오거나 분석을 통해 알아낸 구조체를 관리할 수 있다. 일반적으로 복잡한 프로그램을 분석하는 과정에서 구조체를 수동으로 식별하여 관리하는 작업이 빈번하게 이루어지므로 알아두고 넘어가야 할 기능이다. ▶ 데이터 타입 매니저(Data Type Manager)를 사용하면 구조체를 정의할 수 있다. |
6. 콘솔(Console) | Ghidra 스크립트의 실행 결과가 출력되는 창이다. 스크립팅 기능을 이용하면 많은 시간이 걸리는 리버스 엔지니어링 작업을 자동화할 수 있다. |
4. 도구 모음(Tool Chest)
- 도구 모음(Tool Chest)는 Ghidra가 제공하는 기본 도구들을 모아 놓은 곳이다.
- 10.1.4 버전을 기준으로 Ghidra는 총 세 가지 기본 도구를 제공한다.
- 코드 브라우저(Code Browser): 용머리 모양 아이콘을 가지고 있다. 디스어셈블과 디컴파일을 제공한다.
- 디버거(Debugger): 벌레 모양 아이콘을 가지고 있다. 디버깅 기능을 제공한다.
- 버전 트래킹 도구(Version Tracking Tool): 발자국 모양 아이콘을 가지고 있다. 한 프로그램에 대해 서로 다른 버전의 바이너리를 비교할 수 있는 도구이다.
5. 바이너리 패치
1) 패치해야 할 명령어에 마우스 오른쪽 클릭 후, Patch Instruction 메뉴를 고른다.
2) 명령어를 수정할 수 있게 된다. 명령 코드와 피연산자(Operand) 모두 수정 가능하다.
3) 패치가 적용된 프로그램을 디스크에 저장하려면, 코드 브라우저 상단 File 메뉴에서 Export Program…을 선택하고 어떤 프로그램 형식으로 익스포트할 것인지 그리고 어떤 이름으로 저장할 것인지 정하는 창에서 설정 후 저장한다.
'프로그래밍 > 해킹' 카테고리의 다른 글
Format String Bug (0) | 2024.08.18 |
---|---|
PLT / GOT / libc database (0) | 2024.08.15 |
IDA 사용법 (0) | 2024.08.03 |
XSS Filtering Bypass 실습 문제 (0) | 2024.07.22 |
XSS Filtering Bypass (0) | 2024.07.20 |