Reko - 오픈 소스 바이너리 디컴파일러 치트시트
Reko는 C#으로 작성된 오픈 소스 바이너리 디컴파일러로, 기계 코드를 읽을 수 있는 C 같은 소스로 변환합니다. 돋보이는 특징은 아키텍처 폭, 특히 레거시 및 이국적인 플랫폼: x86, x64, ARM과 함께 6502, Z80, 68000, VAX, PDP-11, SPARC, PowerPC, 그리고 많은 다른 것들을 처리합니다. 이는 주류 도구가 전혀 지원하지 않는 레트로컴퓨팅, 빈티지 펌웨어, 임베디드 대상에 대한 실용적인 선택입니다. GUI와 명령 줄 디컴파일러 모두를 제공합니다.
설치
| 방법 | 방법 |
|---|
| 릴리스 | GitHub Releases에서 다운로드 (Windows/Linux/macOS) |
| GUI | reko 실행 (WPF/Avalonia UI) |
| CLI | decompile / reko-cli 바이너리 |
| 소스에서 | .NET 솔루션 빌드 |
| 확인 | reko-cli --version |
명령 줄 디컴파일
| 명령어 | 설명 |
|---|
reko-cli binary.exe | 형식 자동 감지로 디컴파일 |
reko-cli --arch x86-protected-32 raw.bin | 아키텍처 강제 |
reko-cli --base 0x8000 raw.bin | 로드 주소 설정 |
reko-cli --loader raw ... | 입력을 raw 이미지로 처리 |
reko-cli -o outdir binary | 출력 디렉터리 |
# 0x0000에서 로드된 raw Z80 ROM 디컴파일
reko-cli --loader raw --arch z80 --base 0x0000 game.rom
출력 아티팩트
| 파일 | 포함 |
|---|
*.c | 디컴파일된 C 소스 |
*.h | 복구된 타입/구조체 선언 |
*.dis | 디스어셈블리 목록 |
*.reko | 프로젝트 파일 (GUI에 다시 로드) |
| 호출 그래프 | 프로그램 구조 |
지원되는 아키텍처 (선택)
| 모던 | 레거시 / 임베디드 |
|---|
| x86 / x86-64 | 6502 / 65C02 |
| ARM / AArch64 | Z80 / 8080 |
| MIPS | 68000 (m68k) |
| PowerPC | VAX, PDP-11 |
| SPARC | 8051, AVR |
| RISC-V | Cray, Alpha, 그리고 더 많음 |
이것이 Reko를 선택할 이유입니다: 바이너리가 1980년대 콘솔, 산업 제어 장치, 또는 메인프레임에서 나온 경우 다른 디컴파일러는 단순히 로드하지 않습니다.
디컴파일 파이프라인
| 단계 | 수행 |
|---|
| 로드 | 컨테이너 파싱 (PE/ELF/raw/등) |
| 스캔 | 코드 vs 데이터 발견, 절차 찾기 |
| 재작성 | 명령을 중간 표현으로 들어올리기 |
| 분석 | 데이터 흐름, 타입 추론, 구조 복구 |
| 구조화 | 루프 및 조건 재구성 |
| 출력 | C 및 헤더 내보내기 |
출력이 좋지 않을 때 — 일반적으로 수정은 정확한 엔트리 포인트와 로드 주소로 스캔 단계를 안내하는 것입니다.
GUI에서 작업
| 작업 | 방법 |
|---|
| 바이너리 열기 | 파일 → 열기, 필요하면 로더/아키텍처 선택 |
| 절차 찾아보기 | 절차 목록 창 |
| 디컴파일된 C 보기 | 절차당 코드 창 |
| 이름 변경/재타입 | 심볼을 편집하여 출력 개선 |
| 분석 다시 실행 | 주석 후 재분석 |
| 프로젝트 저장 | .reko 파일은 주석을 보존 |
반복 — 주석, 재분석, 다시 읽기 — 이것이 제거된 바이너리에서 진정으로 읽을 수 있는 출력을 얻는 방법입니다.
출력 품질 개선
| 문제 | 수정 |
|---|
| 코드가 데이터로 표시됨 | 엔트리 포인트 / 절차 시작 표시 |
| 잘못된 로드 주소 | --base를 정확하게 설정 |
| 엉망진창 출력 | 아키텍처 및 엔디안 확인 |
| 모두 명명되지 않음 | 절차/변수 학습대로 이름 변경 |
| 누락된 서명 | 타입/서명 메타데이터 파일 제공 |
Reko vs 다른 디컴파일러
| 측면 | Reko | Ghidra | RetDec |
|---|
| 레거시 아키텍처 | 예외적 | 좋음 | 중간 |
| 대화형 GUI | 예 | 예 (더 풍부함) | 아니오 |
| 스크립트된 배치 | 예 (CLI) | 예 | 예 |
| 언어 | C# | Java | C++ |
| 최적 대상 | 레트로/이국적인 대상 | 일반적인 대화형 RE | 배치, 임베디드 파이프라인 |
주류 대화형 RE는 Ghidra를 사용합니다; 배치 파이프라인은 RetDec를 사용합니다; 아키텍처가 이상할 때 Reko이 보상을 받습니다.
리소스