Reko - Open-Source-Binary-Decompiler Cheatsheet
Reko ist ein Open-Source Binary Decompiler, geschrieben in C#, der Maschinencode in lesbaren C-ähnlichen Code konvertiert. Seine herausragende Eigenschaft ist Architektur-Breite, besonders für Legacy- und exotische Plattformen: neben x86, x64 und ARM handhabt es 6502, Z80, 68000, VAX, PDP-11, SPARC, PowerPC und viele mehr. Das macht es zur praktischen Wahl für Retro-Computing, alte Firmware und eingebettete Ziele, wo Mainstream-Tools gar keine Unterstützung haben. Es bietet sowohl eine GUI als auch einen Command-Line-Decompiler.
Installation
| Methode | Wie |
|---|
| Release | Download von GitHub Releases (Windows/Linux/macOS) |
| GUI | Führe reko aus (WPF/Avalonia UI) |
| CLI | decompile / reko-cli binary |
| Aus Quelle | Baue die .NET-Lösung |
| Überprüfung | reko-cli --version |
Command-Line-Dekompilierung
| Befehl | Beschreibung |
|---|
reko-cli binary.exe | Dekompiliere mit Format Auto-Detect |
reko-cli --arch x86-protected-32 raw.bin | Erzwinge eine Architektur |
reko-cli --base 0x8000 raw.bin | Lege die Ladeadresse fest |
reko-cli --loader raw ... | Behandle Input als Raw-Image |
reko-cli -o outdir binary | Ausgabeverzeichnis |
# Dekompiliere einen Raw Z80 ROM, geladen bei 0x0000
reko-cli --loader raw --arch z80 --base 0x0000 game.rom
Ausgabe-Artefakte
| Datei | Enthält |
|---|
*.c | Dekompilierter C-Quellcode |
*.h | Wiederhergestellte Typ-/Struktur-Deklarationen |
*.dis | Disassembly-Listing |
*.reko | Projektdatei (in der GUI erneut laden) |
| Call-Graph | Programmstruktur |
Unterstützte Architekturen (Auswahl)
| Modern | Legacy / eingebettet |
|---|
| x86 / x86-64 | 6502 / 65C02 |
| ARM / AArch64 | Z80 / 8080 |
| MIPS | 68000 (m68k) |
| PowerPC | VAX, PDP-11 |
| SPARC | 8051, AVR |
| RISC-V | Cray, Alpha und mehr |
Das ist der Grund, Reko zu wählen: Wenn die Binärdatei aus einer Konsole der 1980er, einem Industrie-Controller oder einem Mainframe stammt, andere Decompiler laden es einfach nicht.
Die Dekompilierungs-Pipeline
| Phase | Tut |
|---|
| Laden | Parse den Container (PE/ELF/raw/etc.) |
| Scannen | Entdecke Code vs Daten, finde Prozeduren |
| Umschreiben | Hebe Anweisungen in eine Intermediate Representation an |
| Analyse | Datenfluss, Typfolgerung, Struktur-Wiederherstellung |
| Strukturierung | Rekonstruiere Schleifen und Bedingungen |
| Ausgabe | Geben Sie C und Header aus |
Das Verständnis der Phasen hilft, wenn die Ausgabe schlecht ist — normalerweise ist die Lösung, die Scan-Phase mit korrekten Einstiegspunkten und Ladeadressen zu führen.
Arbeit in der GUI
| Aufgabe | Wie |
|---|
| Öffne eine Binärdatei | Datei → Öffnen, wähle Loader/Arch falls aufgefordert |
| Durchsuche Prozeduren | Prozedur-Listenpane |
| Sehe dekompilierten C | Code-Pane pro Prozedur |
| Benenne/tippe um | Bearbeite Symbole, um Ausgabe zu verbessern |
| Führe Analyse erneut aus | Reanalyse nach Anmerkungen |
| Speichere Projekt | .reko-Datei bewahrt deine Anmerkungen |
Iteration — Annotiere, analysiere erneut, lese erneut — ist wie Sie genuinely lesbaren Output aus einer gestrippten Binärdatei bekommen.
Verbesserung der Ausgabe-Qualität
| Problem | Fix |
|---|
| Code als Daten gesehen | Markiere Einstiegspunkte / Prozedur-Starts |
| Falsche Ladeadresse | Lege --base richtig fest |
| Beschädigte Ausgabe | Bestätige Architektur und Endianness |
| Alles unbenannt | Benenne Prozeduren/Variablen, während du lernst |
| Fehlende Signaturen | Gebe Typ/Signatur-Metadatendateien an |
Reko vs andere Decompiler
| Aspekt | Reko | Ghidra | RetDec |
|---|
| Legacy-Architekturen | Außergewöhnlich | Gut | Moderat |
| Interaktive GUI | Ja | Ja (reicher) | Nein |
| Scriptbare Batch | Ja (CLI) | Ja | Ja |
| Sprache | C# | Java | C++ |
| Bestes für | Retro/exotische Ziele | Allgemeine interaktive RE | Batch, eingebettete Pipelines |
Verwende Ghidra für Mainstream-interaktive RE und RetDec für Batch-Pipelines; Reko verdient seinen Platz, wenn die Architektur ungewöhnlich ist.
Ressourcen