RetDec - 재타겟팅 가능한 기계 코드 디컴파일러 치트시트
RetDec (Avast의 재타겟팅 가능한 디컴파일러)는 오픈 소스 기계 코드 디컴파일러로, 컴파일된 바이너리를 읽을 수 있는 고수준 코드로 변환합니다. “재타겟팅 가능한”이 핵심 속성입니다: 하나의 아키텍처에 대해 구축되기보다는 많은 명령 집합을 들어올립니다 — x86, ARM, MIPS, PIC32, PowerPC — LLVM IR로, 그 후 그 공통 표현을 C 또는 Python 같은 의사 코드로 디컴파일합니다. 독립형으로 실행되며 IDA, Ghidra, radare2와 통합됩니다.
설치
| 방법 | 방법 |
|---|
| 릴리스 빌드 | GitHub Releases에서 사전 구축 패키지 다운로드 |
| 소스에서 | CMake 빌드 (리포지토리의 빌드 문서 참조) |
| Docker | docker run -v "$PWD:/dst" retdec/retdec |
| 확인 | retdec-decompiler --version |
기본 디컴파일
| 명령어 | 설명 |
|---|
retdec-decompiler binary.exe | binary.exe.c로 디컴파일 |
retdec-decompiler -o out.c binary | 출력 경로 선택 |
retdec-decompiler --backend-no-debug binary | 더 깔끔한 출력 |
retdec-decompiler --cleanup binary | 중간 파일 제거 |
retdec-decompiler --help | 전체 옵션 목록 |
# 디컴파일 및 결과 읽기
retdec-decompiler suspicious.exe
less suspicious.exe.c
출력 형식
| 플래그 | 생산 |
|---|
| (기본값) | C 소스 |
-f py | Python 같은 의사 코드 |
--backend-emit-cfg | 제어 흐름 그래프 |
--backend-emit-cg | 호출 그래프 |
--config out.json | 구조화된 분석 설정/결과 |
| LLVM IR | 디컴파일 중 중간 .ll 출력 |
지원되는 아키텍처
| 아키텍처 | 형식 |
|---|
| x86 / x86-64 | PE, ELF, Mach-O |
| ARM / Thumb | ELF, PE, raw |
| MIPS | ELF, raw |
| PIC32 | ELF, Intel HEX |
| PowerPC | ELF |
광범위한 아키텍처 지원은 RetDec를 임베디드 및 펌웨어 작업에 특히 유용합니다. 여기서 MIPS 및 PIC32 바이너리는 일반적이며 주류 디컴파일러는 더 적습니다.
유용한 옵션
| 옵션 | 효과 |
|---|
-a arch | 아키텍처 강제 |
-e endian | 엔디안 설정 (little/big) |
-m mode | 모드: bin, raw, ll |
--raw-entry-point ADDR | raw 바이너리의 엔트리 포인트 |
--raw-section-vma ADDR | raw 코드의 로드 주소 |
--select-ranges A-B | 주소 범위만 디컴파일 |
--select-functions f1,f2 | 특정 함수만 디컴파일 |
# Raw 펌웨어 블롭: RetDec에 로드 방법 알리기
retdec-decompiler -m raw -a mips -e big \
--raw-entry-point 0x80000000 --raw-section-vma 0x80000000 firmware.bin
분석 기능
| 기능 | 제공 |
|---|
| 파일 형식 감지 | PE/ELF/Mach-O 파싱 |
| 컴파일러/패커 감지 | 도구 체인 지문 |
| 서명 기반 함수 ID | 정적으로 링크된 라이브러리 코드 인식 |
| 타입 재구성 | 구조 및 타입 복구 |
| 디버그 정보 사용 | DWARF/PDB 사용 가능할 때 |
라이브러리 함수 식별은 실제로 매우 중요합니다: 정적으로 링크된 libc의 수천 줄을 건너뛰고 응용 프로그램 자체 논리에 집중할 수 있습니다.
통합
| 도구 | 플러그인 |
|---|
| IDA Pro | RetDec IDA 플러그인 |
| Ghidra | RetDec Ghidra 플러그인 |
| radare2 | r2retdec |
| API | CLI/config를 통해 프로그래밍 방식으로 디컴파일 |
RetDec vs 다른 디컴파일러
| 측면 | RetDec | Ghidra | Hex-Rays (IDA) | Binary Ninja |
|---|
| 비용 | 무료/오픈소스 | 무료/오픈소스 | 상용 | 상용 |
| 아키텍처 | 많음 (PIC32 포함) | 많음 | 많음 (디컴파일러 라이선스당) | 많음 |
| 대화형 | 아니오 (배치) | 예 (GUI) | 예 | 예 |
| 최적 대상 | 배치/스크립트된 디컴파일, 임베디드 | 대화형 RE | 최고 품질 출력 | 모던 API/UX |
대화형 작업을 위해 Ghidra를 보완합니다 — RetDec은 자동화된 파이프라인과 이상한 아키텍처에서 빛을 발합니다.
리소스