콘텐츠로 이동

Reko - 오픈 소스 바이너리 디컴파일러 치트시트

Reko - 오픈 소스 바이너리 디컴파일러 치트시트

Reko는 C#으로 작성된 오픈 소스 바이너리 디컴파일러로, 기계 코드를 읽을 수 있는 C 같은 소스로 변환합니다. 돋보이는 특징은 아키텍처 폭, 특히 레거시 및 이국적인 플랫폼: x86, x64, ARM과 함께 6502, Z80, 68000, VAX, PDP-11, SPARC, PowerPC, 그리고 많은 다른 것들을 처리합니다. 이는 주류 도구가 전혀 지원하지 않는 레트로컴퓨팅, 빈티지 펌웨어, 임베디드 대상에 대한 실용적인 선택입니다. GUI와 명령 줄 디컴파일러 모두를 제공합니다.

설치

방법방법
릴리스GitHub Releases에서 다운로드 (Windows/Linux/macOS)
GUIreko 실행 (WPF/Avalonia UI)
CLIdecompile / 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-646502 / 65C02
ARM / AArch64Z80 / 8080
MIPS68000 (m68k)
PowerPCVAX, PDP-11
SPARC8051, AVR
RISC-VCray, Alpha, 그리고 더 많음

이것이 Reko를 선택할 이유입니다: 바이너리가 1980년대 콘솔, 산업 제어 장치, 또는 메인프레임에서 나온 경우 다른 디컴파일러는 단순히 로드하지 않습니다.

디컴파일 파이프라인

단계수행
로드컨테이너 파싱 (PE/ELF/raw/등)
스캔코드 vs 데이터 발견, 절차 찾기
재작성명령을 중간 표현으로 들어올리기
분석데이터 흐름, 타입 추론, 구조 복구
구조화루프 및 조건 재구성
출력C 및 헤더 내보내기

출력이 좋지 않을 때 — 일반적으로 수정은 정확한 엔트리 포인트와 로드 주소로 스캔 단계를 안내하는 것입니다.

GUI에서 작업

작업방법
바이너리 열기파일 → 열기, 필요하면 로더/아키텍처 선택
절차 찾아보기절차 목록 창
디컴파일된 C 보기절차당 코드 창
이름 변경/재타입심볼을 편집하여 출력 개선
분석 다시 실행주석 후 재분석
프로젝트 저장.reko 파일은 주석을 보존

반복 — 주석, 재분석, 다시 읽기 — 이것이 제거된 바이너리에서 진정으로 읽을 수 있는 출력을 얻는 방법입니다.

출력 품질 개선

문제수정
코드가 데이터로 표시됨엔트리 포인트 / 절차 시작 표시
잘못된 로드 주소--base를 정확하게 설정
엉망진창 출력아키텍처 및 엔디안 확인
모두 명명되지 않음절차/변수 학습대로 이름 변경
누락된 서명타입/서명 메타데이터 파일 제공

Reko vs 다른 디컴파일러

측면RekoGhidraRetDec
레거시 아키텍처예외적좋음중간
대화형 GUI예 (더 풍부함)아니오
스크립트된 배치예 (CLI)
언어C#JavaC++
최적 대상레트로/이국적인 대상일반적인 대화형 RE배치, 임베디드 파이프라인

주류 대화형 RE는 Ghidra를 사용합니다; 배치 파이프라인은 RetDec를 사용합니다; 아키텍처가 이상할 때 Reko이 보상을 받습니다.

리소스