RetDec - Decompilatore di Codice Macchina Retargetabile Cheatsheet
RetDec (Retargetable Decompiler, di Avast) è un decompilatore open-source di codice macchina che converte binari compilati in codice di alto livello leggibile. “Retargetabile” è la proprietà chiave: piuttosto che essere costruito per un”architettura, eleva molti set di istruzioni — x86, ARM, MIPS, PIC32, PowerPC — in LLVM IR, poi decompila quella rappresentazione comune in C o uno pseudocodice simile a Python. Viene eseguito in modalità standalone e si integra con IDA, Ghidra e radare2.
Installazione
| Metodo | Come |
|---|
| Build di rilascio | Scarica il pacchetto precostruito da GitHub Releases |
| Dal sorgente | Build CMake (vedi la documentazione di build del repo) |
| Docker | docker run -v "$PWD:/dst" retdec/retdec |
| Verifica | retdec-decompiler --version |
Decompilazione di Base
| Comando | Descrizione |
|---|
retdec-decompiler binary.exe | Decompila a binary.exe.c |
retdec-decompiler -o out.c binary | Scegli il percorso di output |
retdec-decompiler --backend-no-debug binary | Output più pulito |
retdec-decompiler --cleanup binary | Rimuovi file intermedi |
retdec-decompiler --help | Elenco completo delle opzioni |
# Decompila e leggi il risultato
retdec-decompiler suspicious.exe
less suspicious.exe.c
| Flag | Produce |
|---|
| (default) | Sorgente C |
-f py | Pseudocodice simile a Python |
--backend-emit-cfg | Grafici di flusso di controllo |
--backend-emit-cg | Grafico di chiamate |
--config out.json | Configurazione e risultati di analisi strutturati |
| LLVM IR | Output intermedio .ll durante la decompilazione |
Architetture Supportate
| Architettura | Formati |
|---|
| x86 / x86-64 | PE, ELF, Mach-O |
| ARM / Thumb | ELF, PE, raw |
| MIPS | ELF, raw |
| PIC32 | ELF, Intel HEX |
| PowerPC | ELF |
L”ampia copertura dell”architettura rende RetDec particolarmente utile per il lavoro su firmware e embedded, dove i binari MIPS e PIC32 sono comuni e i decompilatori mainstream offrono meno.
Opzioni Utili
| Opzione | Effetto |
|---|
-a arch | Forza un”architettura |
-e endian | Imposta l”endianness (little/big) |
-m mode | Modalità: bin, raw, ll |
--raw-entry-point ADDR | Punto di ingresso per binari raw |
--raw-section-vma ADDR | Indirizzo di caricamento per codice raw |
--select-ranges A-B | Decompila solo un intervallo di indirizzi |
--select-functions f1,f2 | Decompila funzioni specifiche |
# Blob di firmware raw: dì a RetDec come caricarlo
retdec-decompiler -m raw -a mips -e big \
--raw-entry-point 0x80000000 --raw-section-vma 0x80000000 firmware.bin
Caratteristiche di Analisi
| Caratteristica | Fornisce |
|---|
| Rilevamento del formato di file | Parsing PE/ELF/Mach-O |
| Rilevamento di compilatore/packer | Fingerprinting della toolchain |
| ID di funzione basato su firma | Riconosci il codice di libreria collegato staticamente |
| Ricostruzione di tipo | Recupera strutture e tipi |
| Utilizzo di informazioni di debug | DWARF/PDB quando disponibili |
L”identificazione della funzione di libreria è importante nella pratica: ti consente di saltare le migliaia di linee di libc collegato staticamente e concentrarti sulla logica propria dell”applicazione.
Integrazioni
| Tool | Plugin |
|---|
| IDA Pro | Plugin RetDec IDA |
| Ghidra | Plugin RetDec Ghidra |
| radare2 | r2retdec |
| API | Decompila programmaticamente via CLI/config |
RetDec vs Altri Decompilatori
| Aspetto | RetDec | Ghidra | Hex-Rays (IDA) | Binary Ninja |
|---|
| Costo | Gratuito/open-source | Gratuito/open-source | Commerciale | Commerciale |
| Architetture | Molte (incl. PIC32) | Molte | Molte (per licenza decompilatore) | Molte |
| Interattivo | No (batch) | Sì (GUI) | Sì | Sì |
| Migliore per | Decompilazione batch/scriptata, embedded | Lavoro interattivo RE | Output di qualità massima | UX e API moderna |
Complementare a Ghidra per il lavoro interattivo — RetDec eccelle per i pipeline automatizzati e le architetture insolite.
Risorse