1.1 목적과 범위
이 문서는 Windows(PE)와 Linux(ELF) 실행 파일을 디스어셈블하여 분석할 때 쓰이는 대표 역공학 도구와 라이브러리를 조사하고, 각 도구의 특징·장단점·적합한 용도를 비교합니다. 요청에 따라 Ghidra와 Capstone은 가장 상세하게 다루며, 모든 도구에 대해 바로 복사해 쓸 수 있는 기본 템플릿(skeleton) 코드를 수록했습니다.
버전 번호와 가격은 작성일(2026-10-21) 기준이며, 상용 도구의 가격은 자주 바뀌므로 구매 전 공식 페이지에서 다시 확인해야 합니다.
1.2 도구 분류
역공학 도구는 역할에 따라 크게 다섯 범주로 나눌 수 있습니다. 실제 분석에서는 한 도구만 쓰기보다 범주가 다른 도구를 조합하는 경우가 대부분입니다.
| 범주 | 역할 | 대표 도구 |
| 통합 분석 플랫폼 (SRE 프레임워크) |
파일 로딩, 자동 분석(함수·참조·타입 복구), 디스어셈블, 디컴파일, GUI, 스크립팅을 한 번에 제공 | Ghidra, IDA Pro, Binary Ninja, radare2 / Rizin(Cutter) |
| 디스어셈블러 엔진 (라이브러리) |
기계어 바이트열 → 명령어로 해석. 파일 포맷·함수 인식은 하지 않음. 다른 도구에 내장되는 부품 | Capstone, Zydis, iced-x86 |
| 바이너리 분석 프레임워크 | CFG 복구, 중간 표현(IR), 심볼릭 실행, 자동화 분석 | angr (+ 동일 계열: Unicorn 에뮬레이터, Keystone 어셈블러) |
| 디버거 (동적 분석) | 실행 중 프로세스의 명령어·레지스터·메모리 관찰 및 제어 | x64dbg(Windows), GDB(+pwndbg/GEF, Linux), WinDbg |
| CLI 유틸리티 / 포맷 파서 | 빠른 디스어셈블 덤프, 헤더·섹션·임포트 파싱 | objdump, llvm-objdump, dumpbin, readelf / LIEF, pefile, pyelftools |
1.3 핵심 용어
• 디스어셈블(Disassemble): 기계어를 어셈블리 명령어로 변환. 방식에 따라 선형 스윕(linear sweep, objdump·Capstone 기본 사용법)과 재귀 하강(recursive descent, Ghidra·IDA 등 통합 도구)이 있습니다. 재귀 하강 방식은 코드 사이에 섞인 데이터를 잘못 해석하는 문제가 적습니다.
• 디컴파일(Decompile): 어셈블리를 C와 비슷한 의사 코드(pseudo-code)로 복원. Ghidra·IDA(Hex-Rays)·Binary Ninja·angr가 자체 디컴파일러를 제공합니다.
• 중간 표현(IR): 아키텍처에 독립적인 명령 표현. Ghidra의 P-code, Binary Ninja의 BNIL(LLIL/MLIL/HLIL), angr의 VEX, radare2의 ESIL 등이 있으며, 여러 CPU를 같은 방식으로 분석하게 해 줍니다.
• Headless 분석: GUI 없이 스크립트로 분석을 실행하는 방식. 대량 샘플 처리, CI 파이프라인 연동에 필요합니다.
2.1 기본 정보 비교
| 도구 | 유형 | 실행 환경 / 분석 대상 | 라이선스·비용 | 디컴파일러 | 자동화 API | 확인 버전 |
| Ghidra | 통합 플랫폼 | Win/Linux/macOS (JDK 21+) PE, ELF, Mach-O 등 다수 |
Apache 2.0 무료 |
있음(모든 지원 CPU) | Java, Python(PyGhidra), Headless | 12.1.4 (2026-09-21) |
| Capstone | 디스어셈블 엔진 | C 라이브러리, 대부분 OS 원시 바이트열 |
BSD-3 무료 |
없음 | C, Python, Rust, Go, .NET, Java 등 | 5.0.9 안정판 6.0.0-Alpha11 |
| IDA Pro / Free | 통합 플랫폼 | Win/Linux/macOS 포맷·CPU 매우 다양 |
상용(연 구독) Free·Home 별도 |
Hex-Rays(에디션별 범위 상이) | IDAPython, C++ SDK, idalib | 9.3 (2026-02) 9.4 베타 |
| Binary Ninja | 통합 플랫폼 | Win/Linux/macOS | 상용 Free 에디션 있음 |
있음 (HLIL) | Python, C++, Rust | 6.0 Krypton (2026-09-03) |
| radare2 | 통합 프레임워크(CLI) | 거의 모든 OS | LGPL-3.0 무료 |
pdc(간이), r2ghidra 플러그인 | r2pipe(다수 언어) | 6.2.4 |
| Rizin / Cutter | 통합 프레임워크 + Qt GUI | Win/Linux/macOS | LGPL-3.0 / GPL-3.0 무료 |
rz-ghidra (Cutter 기본 포함) | rzpipe, C API | Rizin 0.8.x Cutter 2.4.x |
| x64dbg | 디버거 | Windows 사용자 모드 PE(x86/x64) |
GPL-3.0 무료 |
없음 | 스크립트, C/C++ 플러그인 | 2026.05.27 |
| GDB | 디버거 | Linux 중심 (Windows MinGW) | GPL-3.0 무료 |
없음 | Python API | 배포판 패키지 |
| objdump 등 | CLI 디스어셈블러 | Linux/Windows | GPL / Apache 2.0 무료 |
없음 | 셸 스크립트 | binutils / LLVM |
| angr | 분석 프레임워크 | Python (Linux 권장) | BSD-2 무료 |
있음 (실험적 성격) | Python | 10.0.4.post1 |
| Zydis / iced-x86 | x86 전용 디코더 | C / Rust(+Python, .NET, JS) | MIT 무료 |
없음 | C / Rust·Python 등 | Zydis 4.x iced 1.21.0 |
| LIEF / pefile / pyelftools | 포맷 파서 | Python, C++ | Apache 2.0 / MIT / Public Domain | 없음 | Python, C++ | LIEF 1.0.0 pefile 2024.8.26 |
버전은 2026-10-21에 GitHub 릴리스 페이지, 공식 블로그, PyPI에서 확인한 값입니다. GDB·objdump는 OS 배포판에 포함된 버전을 쓰는 경우가 일반적이라 고정 버전을 적지 않았습니다.
2.2 기능 평가 매트릭스
아래 평가는 조사 내용과 일반적인 사용 경험을 종합한 상대적·주관적 평가입니다(●5단계, 많을수록 우수). 비용 항목은 저렴할수록 점수가 높습니다.
| 도구 | 디스어셈블 품질 | 디컴파일 | 자동화·API | 학습 용이성 | 동적 분석 | 비용 |
| Ghidra | ●●●●○ | ●●●●○ | ●●●●○ | ●●●○○ | ●●●○○ | ●●●●● |
| IDA Pro | ●●●●● | ●●●●● | ●●●●● | ●●●○○ | ●●●●○ | ●○○○○ |
| Binary Ninja | ●●●●○ | ●●●●○ | ●●●●● | ●●●●○ | ●●●○○ | ●●●○○ |
| radare2 / Rizin | ●●●○○ | ●●○○○ (플러그인 시 ●●●●○) | ●●●●○ | ●●○○○ | ●●●○○ | ●●●●● |
| Capstone | ●●●●○ (명령어 단위) | 해당 없음 | ●●●●● | ●●●●● | 해당 없음 | ●●●●● |
| Zydis / iced-x86 | ●●●●● (x86 한정) | 해당 없음 | ●●●●○ | ●●●●○ | 해당 없음 | ●●●●● |
| angr | ●●●○○ | ●●○○○ | ●●●●● | ●●○○○ | ●●●○○ (심볼릭) | ●●●●● |
| x64dbg | ●●●●○ | 해당 없음 | ●●●○○ | ●●●●○ | ●●●●● (Windows) | ●●●●● |
| GDB(+pwndbg) | ●●●○○ | 해당 없음 | ●●●●○ | ●●●○○ | ●●●●● (Linux) | ●●●●● |
| objdump | ●●○○○ | 해당 없음 | ●●○○○ | ●●●●● | 해당 없음 | ●●●●● |
==== (중략) ====
| 상황 / 목적 | 1순위 | 보조 도구 | 이유 |
| 예산 없이 본격 정적 분석 | Ghidra | Cutter(rz-ghidra), x64dbg/GDB | 무료로 디컴파일러·자동 분석·협업까지 제공 |
| 상용 악성코드 분석·대형 바이너리 | IDA Pro | x64dbg, Ghidra(교차 검증) | 최고 수준 품질·FLIRT/Lumina·생태계 |
| 분석 자동화·연구(IR 기반) | Binary Ninja | angr | BNIL과 깔끔한 API, headless(Commercial 이상) |
| 자체 도구·스캐너 개발 | Capstone | LIEF/pefile/pyelftools, Unicorn | 가볍고 멀티 아키텍처, BSD 라이선스 |
| x86 전용 고정밀 디코딩 | Zydis / iced-x86 | LIEF | 최신 x86 확장·정확도·성능 |
| 대량 샘플 배치 처리 | Ghidra Headless / PyGhidra | idalib, Binary Ninja headless | 무료로 수천 개 샘플 자동 분석 가능 |
| Windows 동적 분석·언패킹 | x64dbg | Ghidra/IDA | Windows 사용자 모드 디버깅 표준 |
| Linux 동적 분석·익스플로잇 | GDB + pwndbg/GEF | Ghidra, angr | 어디서나 사용 가능, Python 자동화 |
| CTF·빠른 트리아지 | radare2 / Cutter | objdump, angr | 가볍고 터미널 친화적, 심볼릭 실행 결합 |
| 펌웨어·임베디드 CPU | Ghidra | Capstone, radare2 | Sleigh로 다양한 CPU를 디컴파일 |
4.1 권장 조합 워크플로우
• 트리아지: pefile/LIEF로 헤더·섹션 엔트로피·임포트 확인 → 패킹 여부 판단.
• 정적 분석: Ghidra(또는 IDA/Binary Ninja)로 자동 분석 후 핵심 함수 디컴파일·이름 정리.
• 동적 확인: x64dbg(Windows) 또는 GDB+pwndbg(Linux)로 의심 지점에 브레이크포인트, 언패킹·복호화 결과 덤프.
• 자동화: 반복 작업은 PyGhidra/idalib/Binary Ninja API로 스크립트화. 경량 처리는 Capstone + LIEF.
• 심화: 특정 조건 입력 탐색은 angr 심볼릭 실행, 에뮬레이션은 Unicorn.
Ghidra는 무료이면서도 상용 도구에 근접한 디컴파일러, 폭넓은 프로세서 지원, 강력한 headless 자동화를 갖춰 대부분의 조직에서 기본 분석 플랫폼으로 삼기에 충분합니다. 단, Java 기반의 무게와 UI 학습 비용, Jython→PyGhidra 전환기에 따른 스크립트 호환성 문제를 고려해야 합니다.
Capstone은 완성된 분석 도구가 아니라 '부품'입니다. 직접 도구를 만들거나 다른 시스템에 디스어셈블 기능을 넣을 때 가장 무난한 선택이며, 포맷 파서(LIEF 등)와 결합해 사용합니다. x86 정확도가 특히 중요하면 Zydis·iced-x86을, 다중 아키텍처가 중요하면 Capstone을 고르는 것이 일반적입니다. 6.0 정식판 출시 전까지는 5.0.x 안정판 사용을 권장합니다.
예산이 있고 분석 품질·속도가 최우선이면 IDA Pro, 자동화·연구 중심이면 Binary Ninja가 강점이 있으며, 동적 분석은 플랫폼에 따라 x64dbg 또는 GDB를 함께 쓰는 구성이 실무에서 가장 많이 쓰입니다.
문서에 수록한 템플릿 중 다음 항목은 Linux(x86-64, Python 3.13) 환경에서 직접 실행해 동작을 확인했습니다. 테스트 대상은 gcc로 빌드한 ELF 바이너리와 Windows x64 PE 실행 파일입니다.
| 템플릿 | 검증 결과 | 비고 |
| Capstone Python ①②, C API ③ | 실행 확인 | capstone 5.0.x, LIEF 1.0.0 — ELF·PE 모두 |
| pefile | 실행 확인 | 섹션·엔트로피·임포트 출력 |
| iced-x86 | 실행 확인 | iced-x86 1.21.0 |
| angr | 실행 확인 | angr 10.0.4.post1 (CFG에서 main/add 함수 인식) |
| GDB Python, objdump | 실행 확인 | 브레이크포인트 콜백·디스어셈블 출력 |
| PyGhidra | API 시그니처 확인 | pyghidra 3.1.0 패키지 소스·문서로 확인(Ghidra 본체 미설치 환경) |
| Ghidra Java, IDA, Binary Ninja, r2/rizin, x64dbg, Zydis | 미실행 | 공식 API·문서 기준으로 작성. 해당 도구 설치 환경에서 경로·버전에 맞게 조정 필요 |
• Ghidra GitHub 릴리스 — https://github.com/NationalSecurityAgency/ghidra/releases
• Ghidra 12.1 What's New — https://github.com/NationalSecurityAgency/ghidra/blob/master/Ghidra/Configurations/Public_Release/src/global/docs/WhatsNew.md
• PyGhidra (PyPI) — https://pypi.org/project/pyghidra/
• Capstone 릴리스 이력 — https://releasealert.dev/github/capstone-engine/capstone
• Capstone v6 Release Guide — https://github.com/capstone-engine/capstone/blob/next/docs/cs_v6_release_guide.md
• Hex-Rays 가격 정책 — https://hex-rays.com/pricing
• IDA 9.3 출시 공지 — https://community.hex-rays.com/t/release-ida-9-3-is-live/671
• IDA 9.4 베타 공지 — https://hex-rays.com/blog/ida-9.4-beta-is-now-available
• Binary Ninja 구매/에디션 — https://binary.ninja/purchase/
• Binary Ninja 6.0 가격 변경 — https://binary.ninja/2026/07/28/pricing-changes.html
• Binary Ninja 공지(6.0 Krypton) — https://binary.ninja/tag/announcements/
• radare2 6.2.0 릴리스 — https://newreleases.io/project/github/radareorg/radare2/release/6.2.0
• Rizin 2025 Summary — https://rizin.re/posts/year-2025-summary/
• x64dbg 릴리스 — https://github.com/x64dbg/x64dbg/releases
• angr (PyPI) — https://pypi.org/project/angr/
• LIEF (PyPI) — https://pypi.org/project/lief/
• iced-x86 (PyPI) — https://pypi.org/project/iced-x86/
• Zydis — https://github.com/zyantific/zydis
'Reversing' 카테고리의 다른 글
| 압축 파일 암호 찾기 (0) | 2024.12.11 |
|---|---|
| 소스코드 라인수 측정 프로그램 (2) | 2023.01.05 |
| 실행파일 역공학(바이너리 분석) 도구 소개 (1) | 2021.06.14 |
| IDA pro Python 관련 (0) | 2021.03.23 |

