데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
Ghidra는 미국 국가안보국(NSA)이 개발한 오픈소스 역공학 프레임워크입니다. 바이너리 분석, 디컴파일, 디스어셈블, 스크립팅을 하나의 통합 환경에서 제공하며, 대규모 멀웨어 분석, 취약점 연구, 포렌식에 널리 사용됩니다.
실시간 디컴파일러가 바이너리를 고수준 C 유사 코드로 변환. 수동 분석 시간을 대폭 단축.
Python, Java, C++ API 지원. Ghidra Script Manager로 자동화, 플러그인 개발 용이.
프로젝트 기반 멀티유저 협업, 서버 모드 제공. 대규모 팀 분석에 최적.
IDA Pro, Radare2, Binary Ninja 등 다양한 도구와의 비교를 통해 Ghidra의 실무 우위를 확인합니다.
| 기능 | Ghidra (NSA) | IDA Pro | Radare2 |
|---|---|---|---|
| 가격 | 무료 (오픈소스) | 💰 고가 (1,500$~) | 무료 |
| 디컴파일러 품질 | 매우 우수 (C-like) | 매우 우수 | 중간 (실험적) |
| 스크립팅 | Python, Java, C++ | Python (IDAPython) | Python, r2pipe |
| 협업 | 내장 서버 지원 | ❌ 미지원 | ❌ 미지원 |
| 플랫폼 | Windows, macOS, Linux | Windows, macOS, Linux | Cross-platform |
Ghidra 내부 아키텍처와 데이터 흐름을 이해하는 것이 실무 적응의 첫걸음입니다.
설치부터 첫 번째 Python 스크립트 실행까지 10분이면 충분합니다.
# 1. JDK 17+ 설치 (권장: Azul Zulu 또는 OpenJDK)
sudo apt install openjdk-17-jdk # Ubuntu/Debian
# macOS: brew install --cask zulu17
# 2. Ghidra 다운로드 (공식 GitHub)
wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_11.2_build/ghidra_11.2_PUBLIC_20250315.zip
# 3. 압축 해제
unzip ghidra_11.2_PUBLIC_20250315.zip -d ~/tools/
export GHIDRA_HOME=~/tools/ghidra_11.2_PUBLIC
# 4. 실행 (GUI)
./ghidraRun
# 분석 전용 스크립트 실행 (Python 예제)
$GHIDRA_HOME/support/analyzeHeadless /tmp/ghidra_proj MyProject \
-import sample.exe \
-postScript HelloGhidra.py \
-deleteProject
# HelloGhidra.py - Ghidra Python API 사용 예제
# @category: Tutorial
# @runtime: Python
from ghidra.app.script import GhidraScript
from ghidra.program.model.listing import CodeUnit
def get_function_names():
"""모든 함수 이름을 출력합니다."""
fm = currentProgram.getFunctionManager()
for func in fm.getFunctions(True):
print(f"[+] {func.getName()} @ {func.getEntryPoint()}")
if __name__ == "__main__":
print("=" * 50)
print(f"Analyzing: {currentProgram.getName()}")
print(f"Language: {currentProgram.getLanguageID()}")
print("=" * 50)
get_function_names()
스크립트 실행: Script Manager → Run 또는 CLI analyzeHeadless -postScript
analyzeHeadless 명령어에 -import, -process, -postScript 플래그를 조합해
대량의 바이너리를 자동 분석할 수 있습니다.
자주 사용되는 설정 항목과 권장값을 표로 정리했습니다.
| 설정 (Edit → Tool Options) | 권장값 | 설명 |
|---|---|---|
| Decompiler → Default Decompiler | Decompiler (default) |
고급 최적화 활성화 |
| Decompiler → Parallel Decompile | Enable (쓰레드 수: CPU 코어-1) | 멀티코어 활용 속도 향상 |
| Listing → Display → Show Hex | true | 16진수 미리보기 |
| Script Manager → Python Interpreter | jython-standalone (내장) |
외부 CPython 사용 시 ghidra_bridge |
| Memory → Max Allocation (JVM) | -Xmx8G (8GB 이상 권장) |
대형 바이너리 분석 시 필요 |
-Xmx 값은 호스트 메모리의 70~80%를 넘지 않도록 설정하세요.
ghidra.bat 또는 ghidraRun 스크립트에서 MAXMEM 변수를 수정합니다.
현업에서 자주 마주치는 문제와 그 해결책을 모았습니다.
| 문제 | 원인 | 해결책 |
|---|---|---|
| Java 버전 불일치 | JDK 11 이하 또는 잘못된 JRE | JDK 17+ 설치, JAVA_HOME 환경변수 설정 |
| 분석 중 OutOfMemory | 힙 메모리 부족 | ghidraRun에서 -Xmx8G 이상 할당 |
| Python 스크립트 import 오류 | Jython은 일부 라이브러리 미지원 | ghidra_bridge로 외부 CPython 연결 |
| 디컴파일 코드 품질 낮음 | 최적화 정보 부족 / 난독화 | 분석 옵션에서 "Aggressive Instruction Finder" 활성화 |
analyzeHeadless + Python os.listdir로 폴더 전체 분석 파이프라인 구축ExportProgram API로 XML/CSV 내보내기 → AI/ML 파이프라인에 공급ghidraSrv 서버 실행 후 팀원들이 동일 프로젝트에 접속.sla)로 신규 아키텍처 정의 가능FlatProgramAPI를 활용해
함수 CFG, 문자열, 상수 특징을 추출하면 머신러닝 기반 악성코드 분류 모델 학습에 바로 사용할 수 있습니다.
공식 문서와 커뮤니티 리소스입니다.