RetDec - Retargetable Machine-Code Decompiler Cheatsheet
RetDec (Retargetable Decompiler, von Avast) ist ein Open-Source Machine-Code-Decompiler, der kompilierte Binärdateien zurück in lesbaren High-Level-Code konvertiert. “Retargetable” ist die Schlüsseleigenschaft: Anstatt für eine Architektur gebaut zu sein, hebt er viele Befehlssätze an — x86, ARM, MIPS, PIC32, PowerPC — in LLVM IR und dekompiliert diese gemeinsame Darstellung dann in C oder Pseudocode ähnlich wie Python. Es läuft eigenständig und integriert mit IDA, Ghidra und radare2.
Installation
| Methode | Wie |
|---|
| Release-Build | Download des vorgefertigten Pakets von GitHub Releases |
| Aus Quelle | CMake-Build (siehe Build-Docs des Repos) |
| Docker | docker run -v "$PWD:/dst" retdec/retdec |
| Überprüfung | retdec-decompiler --version |
Grundlegende Dekompilierung
| Befehl | Beschreibung |
|---|
retdec-decompiler binary.exe | Dekompiliere in binary.exe.c |
retdec-decompiler -o out.c binary | Wähle den Ausgabepfad |
retdec-decompiler --backend-no-debug binary | Sauberere Ausgabe |
retdec-decompiler --cleanup binary | Entferne Zwischendateien |
retdec-decompiler --help | Vollständige Optionsliste |
# Dekompiliere und lese das Ergebnis
retdec-decompiler suspicious.exe
less suspicious.exe.c
| Flag | Erzeugt |
|---|
| (Standard) | C-Quelle |
-f py | Python-ähnlicher Pseudocode |
--backend-emit-cfg | Kontrollfluss-Diagramme |
--backend-emit-cg | Call-Graph |
--config out.json | Strukturierte Analysekonfiguration/Ergebnisse |
| LLVM IR | Intermediate .ll-Output während der Dekompilierung |
Unterstützte Architekturen
| Architektur | Formate |
|---|
| x86 / x86-64 | PE, ELF, Mach-O |
| ARM / Thumb | ELF, PE, raw |
| MIPS | ELF, raw |
| PIC32 | ELF, Intel HEX |
| PowerPC | ELF |
Die breite Architektur-Unterstützung macht RetDec besonders nützlich für Embedded- und Firmware-Arbeit, wo MIPS- und PIC32-Binärdateien häufig sind und Mainstream-Decompiler weniger bieten.
Nützliche Optionen
| Option | Effekt |
|---|
-a arch | Erzwinge eine Architektur |
-e endian | Lege Endianness fest (little/big) |
-m mode | Modus: bin, raw, ll |
--raw-entry-point ADDR | Einstiegspunkt für Raw-Binärdateien |
--raw-section-vma ADDR | Ladeadresse für Raw-Code |
--select-ranges A-B | Dekompiliere nur einen Adressbereich |
--select-functions f1,f2 | Dekompiliere spezifische Funktionen |
# Raw-Firmware-Blob: Sagen Sie RetDec, wie es geladen wird
retdec-decompiler -m raw -a mips -e big \
--raw-entry-point 0x80000000 --raw-section-vma 0x80000000 firmware.bin
Analyse-Funktionen
| Funktion | Bietet |
|---|
| Dateiformaterkennung | PE/ELF/Mach-O-Analyse |
| Compiler/Packer-Erkennung | Toolchain-Fingerprinting |
| Signaturbbasierte Funktions-ID | Erkenne statisch verknüpfte Library-Code |
| Typrekonstruktion | Stelle Strukturen und Typen wieder her |
| Debug-Info-Verwendung | DWARF/PDB wenn verfügbar |
Die Library-Funktions-Identifizierung ist in der Praxis sehr wichtig: Sie können die Tausende von Zeilen statisch verknüpfter libc überspringen und sich auf die Logik der Anwendung konzentrieren.
Integrationen
| Tool | Plugin |
|---|
| IDA Pro | RetDec IDA-Plugin |
| Ghidra | RetDec Ghidra-Plugin |
| radare2 | r2retdec |
| API | Dekompiliere programmatisch via CLI/Config |
RetDec vs andere Decompiler
| Aspekt | RetDec | Ghidra | Hex-Rays (IDA) | Binary Ninja |
|---|
| Kosten | Kostenlos/Open-Source | Kostenlos/Open-Source | Kommerziell | Kommerziell |
| Architekturen | Viele (inkl. PIC32) | Viele | Viele (pro-Decompiler Lizenz) | Viele |
| Interaktiv | Nein (Batch) | Ja (GUI) | Ja | Ja |
| Bestes für | Batch/Scripted-Dekompilierung, Embedded | Interaktive RE | Höchste Qualität | Modernes API/UX |
Ergänzt Ghidra für interaktive Arbeit — RetDec glänzt in automatisierten Pipelines und ungewöhnlichen Architekturen.
Ressourcen