본문으로 건너뛰기

Ghidra로 리버스 엔지니어링하기: 실전 가이드

Ghidra는 NSA가 공개한 오픈소스 리버스 엔지니어링 프레임워크로, 보안 연구자, CTF 참가자, 악성코드 분석가 모두에게 필수 도구가 되었다. 이 가이드는 Ghidra로 바이너리를 분석하는 실전 기법을 다룬다.

왜 Ghidra인가?

Ghidra는 엔터프라이즈급 분석 기능을 무료로 제공한다. x86, ARM, MIPS, PowerPC 등 다양한 아키텍처와 파일 포맷을 지원해서 CTF 문제부터 실제 리버싱 작업까지 폭넓게 쓸 수 있다.

주요 장점:

  • 읽기 좋은 C 유사 코드를 생성하는 강력한 디컴파일러
  • 협업 분석 기능
  • Python/Java 스크립팅으로 확장 가능
  • 크로스 플랫폼 (Windows, Linux, macOS)

시작하기

NSA 공식 GitHub 저장소에서 Ghidra를 다운로드한다. ghidraRun으로 실행하고 새 프로젝트를 만들어 분석을 시작한다.

기본 워크플로우

  1. 바이너리 임포트: 대상 파일을 프로젝트에 드래그
  2. 분석 실행: 자동 분석 실행 (기본 분석기 yes 선택)
  3. 탐색: 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 활용

패킹된 실행 파일 분석

  1. 엔트리 포인트의 패킹 시그니처 확인
  2. 의심스러운 호출에 브레이크포인트 설정
  3. 언패킹 루틴 이후 메모리 덤프
  4. 새 프로젝트에서 덤프된 바이너리 재분석

Crackme 풀기

다음 항목들을 확인한다:

  • 사용자 입력 이후 비교 연산
  • 하드코딩된 키 또는 검증 로직
  • 안티 디버깅 트릭 (디버거 존재 감지)
  • 입력을 변환하는 수학 연산

커스텀 프로토콜 분석

Ghidra의 데이터 타입 매니저로 프로토콜 구조체를 정의한다. 메모리 버퍼에 구조체를 적용하면 디컴파일러에서 자동으로 파싱해 준다.

고급 팁

스크립트 자동화: Script Manager에서 Python 스크립트를 작성해 반복 분석 작업을 자동화한다. 비슷한 바이너리를 여러 개 처리할 때 특히 유용하다.

버전 트래킹: 다른 버전의 바이너리를 비교해 패치나 취약점 수정 내용을 파악한다. 1-day 익스플로잇 개발에 필수적이다.

프로세서 모듈: 커스텀 또는 임베디드 아키텍처 지원을 추가할 수 있다. 게임 콘솔과 IoT 기기용 모듈도 커뮤니티에서 관리된다.

자주 하는 실수

  • 디컴파일러 맹신: 항상 어셈블리와 교차 검증하라
  • 호출 규약 무시: 잘못 파악한 인자는 혼란을 초래한다
  • 분석 건너뛰기: 자동 분석이 대부분의 패턴을 잡아낸다
  • 작업 미저장: 프로젝트에는 주석과 어노테이션이 보존된다

연동 도구

Ghidra는 다른 도구들과 연동하여 사용할 수 있다:

  • GDB/LLDB: 정적 분석을 보완하는 동적 분석
  • IDA Pro: 디컴파일러 출력 교차 검증
  • Binary Ninja: 대안적인 분석 워크플로우

마치며

Ghidra는 리버스 엔지니어링을 엔터프라이즈급 도구로 민주화했다. 디컴파일러, Xref 탐색, 스크립팅을 마스터하면 CTF 문제와 보안 연구를 효율적으로 처리할 수 있다.

간단한 crackme부터 시작해서 CTF 바이너리, 그리고 실제 악성코드 순서로 발전시켜 나가자. 분석할수록 패턴 인식이 쌓여서 다음 타깃이 점점 쉬워진다.