Ghidra로 리버스 엔지니어링하기: 실전 가이드
Ghidra는 NSA가 공개한 오픈소스 리버스 엔지니어링 프레임워크로, 보안 연구자, CTF 참가자, 악성코드 분석가 모두에게 필수 도구가 되었다. 이 가이드는 Ghidra로 바이너리를 분석하는 실전 기법을 다룬다.
왜 Ghidra인가?
Ghidra는 엔터프라이즈급 분석 기능을 무료로 제공한다. x86, ARM, MIPS, PowerPC 등 다양한 아키텍처와 파일 포맷을 지원해서 CTF 문제부터 실제 리버싱 작업까지 폭넓게 쓸 수 있다.
주요 장점:
- 읽기 좋은 C 유사 코드를 생성하는 강력한 디컴파일러
- 협업 분석 기능
- Python/Java 스크립팅으로 확장 가능
- 크로스 플랫폼 (Windows, Linux, macOS)
시작하기
NSA 공식 GitHub 저장소에서 Ghidra를 다운로드한다. ghidraRun으로 실행하고 새 프로젝트를 만들어 분석을 시작한다.
기본 워크플로우
- 바이너리 임포트: 대상 파일을 프로젝트에 드래그
- 분석 실행: 자동 분석 실행 (기본 분석기 yes 선택)
- 탐색: Symbol Tree, Decompiler, Listing 뷰 활용
핵심 기능
디컴파일러 창
디컴파일러는 어셈블리를 의사 C 코드로 변환해 준다. 함수를 우클릭하면 어셈블리와 디컴파일 뷰 사이를 오갈 수 있다. Ctrl+E로 함수 시그니처를 편집하면 더 깔끔한 출력을 얻을 수 있다.
크로스 레퍼런스 (Xrefs)
Ctrl+Shift+F로 함수나 변수에 대한 모든 참조를 찾을 수 있다. 난독화된 코드를 이해하는 데 핵심적인 프로그램 흐름과 데이터 의존성을 파악할 수 있다.
함수 그래프
Graph 아이콘을 누르면 제어 흐름이 시각화된다. CTF 문제에서 자주 등장하는 루프, 조건 분기, 데드 코드 경로를 찾는 데 유용하다.
실전 기법
main 함수 찾기
스트립된 바이너리에서 main을 찾으려면:
__libc_start_main호출을 찾는다- 첫 번째 인자를 확인한다
- 함수 이름을 변경해서 명확하게 표시한다
문자열 분석
Ctrl+Shift+E로 모든 문자열 목록을 볼 수 있다. 더블클릭하면 사용 위치로 이동한다. 문자열에는 암호화 키, 명령 핸들러, 백도어 트리거가 숨어있는 경우가 많다.
바이너리 패치
프로그램을 내보낸 뒤 헥스 에디터로 바이트를 수정하거나, Ghidra의 Patch Instruction 기능을 사용한다. 체크 우회나 디버그 기능 활성화에 유용하다.
CTF 활용
패킹된 실행 파일 분석
- 엔트리 포인트의 패킹 시그니처 확인
- 의심스러운 호출에 브레이크포인트 설정
- 언패킹 루틴 이후 메모리 덤프
- 새 프로젝트에서 덤프된 바이너리 재분석
Crackme 풀기
다음 항목들을 확인한다:
- 사용자 입력 이후 비교 연산
- 하드코딩된 키 또는 검증 로직
- 안티 디버깅 트릭 (디버거 존재 감지)
- 입력을 변환하는 수학 연산
커스텀 프로토콜 분석
Ghidra의 데이터 타입 매니저로 프로토콜 구조체를 정의한다. 메모리 버퍼에 구조체를 적용하면 디컴파일러에서 자동으로 파싱해 준다.
고급 팁
스크립트 자동화: Script Manager에서 Python 스크립트를 작성해 반복 분석 작업을 자동화한다. 비슷한 바이너리를 여러 개 처리할 때 특히 유용하다.
버전 트래킹: 다른 버전의 바이너리를 비교해 패치나 취약점 수정 내용을 파악한다. 1-day 익스플로잇 개발에 필수적이다.
프로세서 모듈: 커스텀 또는 임베디드 아키텍처 지원을 추가할 수 있다. 게임 콘솔과 IoT 기기용 모듈도 커뮤니티에서 관리된다.
자주 하는 실수
- 디컴파일러 맹신: 항상 어셈블리와 교차 검증하라
- 호출 규약 무시: 잘못 파악한 인자는 혼란을 초래한다
- 분석 건너뛰기: 자동 분석이 대부분의 패턴을 잡아낸다
- 작업 미저장: 프로젝트에는 주석과 어노테이션이 보존된다
연동 도구
Ghidra는 다른 도구들과 연동하여 사용할 수 있다:
- GDB/LLDB: 정적 분석을 보완하는 동적 분석
- IDA Pro: 디컴파일러 출력 교차 검증
- Binary Ninja: 대안적인 분석 워크플로우
마치며
Ghidra는 리버스 엔지니어링을 엔터프라이즈급 도구로 민주화했다. 디컴파일러, Xref 탐색, 스크립팅을 마스터하면 CTF 문제와 보안 연구를 효율적으로 처리할 수 있다.
간단한 crackme부터 시작해서 CTF 바이너리, 그리고 실제 악성코드 순서로 발전시켜 나가자. 분석할수록 패턴 인식이 쌓여서 다음 타깃이 점점 쉬워진다.