Reko - Decompilatore Binario Open-Source Cheatsheet
Reko è un decompilatore binario open-source scritto in C# che converte il codice macchina in sorgente leggibile simile a C. La sua caratteristica distintiva è l”ampiezza dell”architettura, specialmente per piattaforme legacy e esotiche: insieme a x86, x64 e ARM gestisce 6502, Z80, 68000, VAX, PDP-11, SPARC, PowerPC e molti altri. Questo lo rende la scelta pratica per il retrocomputing, il firmware vintage e i target embedded dove i tool mainstream non hanno supporto. Offre sia un decompilatore GUI che da linea di comando.
Installazione
| Metodo | Come |
|---|
| Rilascio | Scarica da GitHub Releases (Windows/Linux/macOS) |
| GUI | Esegui reko (UI WPF/Avalonia) |
| CLI | decompile / reko-cli binario |
| Dal sorgente | Build la soluzione .NET |
| Verifica | reko-cli --version |
Decompilazione da Linea di Comando
| Comando | Descrizione |
|---|
reko-cli binary.exe | Decompila con rilevamento automatico del formato |
reko-cli --arch x86-protected-32 raw.bin | Forza un”architettura |
reko-cli --base 0x8000 raw.bin | Imposta l”indirizzo di caricamento |
reko-cli --loader raw ... | Tratta l”input come immagine raw |
reko-cli -o outdir binary | Directory di output |
# Decompila una ROM Z80 raw caricata a 0x0000
reko-cli --loader raw --arch z80 --base 0x0000 game.rom
Artifact di Output
| File | Contiene |
|---|
*.c | Sorgente C decompilato |
*.h | Dichiarazioni di tipo/struct recuperate |
*.dis | Listato di disassembly |
*.reko | File di progetto (ricaricare nella GUI) |
| Grafico di chiamate | Struttura del programma |
Architetture Supportate (selezione)
| Moderno | Legacy / embedded |
|---|
| x86 / x86-64 | 6502 / 65C02 |
| ARM / AArch64 | Z80 / 8080 |
| MIPS | 68000 (m68k) |
| PowerPC | VAX, PDP-11 |
| SPARC | 8051, AVR |
| RISC-V | Cray, Alpha, e altri |
Questo è il motivo per cui ricorrere a Reko: quando il binario è da una console degli anni ‘80, un controllore industriale o un mainframe, altri decompilatori semplicemente non lo caricano.
La Pipeline di Decompilazione
| Fase | Fa |
|---|
| Caricamento | Analizza il contenitore (PE/ELF/raw/ecc.) |
| Scansione | Scopri codice vs dati, trova procedure |
| Riscrittura | Eleva le istruzioni a una rappresentazione intermedia |
| Analisi | Data flow, inferenza di tipo, recupero di struttura |
| Strutturazione | Ricostituisci loop e condizionali |
| Output | Emetti C e header |
Comprendere le fasi aiuta quando l”output è scarso — di solito la fix è guidare la fase di scansione con punti di ingresso corretti e indirizzi di caricamento.
Lavoro nella GUI
| Task | Come |
|---|
| Apri un binario | File → Open, scegli loader/arch se richiesto |
| Sfoglia procedure | Riquadro di elenco procedure |
| Visualizza C decompilato | Riquadro di codice per procedura |
| Rinomina/ritipa | Modifica i simboli per migliorare l”output |
| Riesegui l”analisi | Rianalizza dopo annotazioni |
| Salva progetto | File .reko preserva le tue annotazioni |
L”iterazione — annota, rianalizza, leggi di nuovo — è come ottieni output genuinamente leggibile da un binario privato.
Miglioramento della Qualità dell”Output
| Problema | Fix |
|---|
| Codice visto come dati | Contrassegna punti di ingresso / inizi di procedura |
| Indirizzo di caricamento sbagliato | Imposta --base correttamente |
| Output indecifrato | Conferma architettura e endianness |
| Tutto senza nome | Rinomina procedure/variabili mentre impari |
| Firme mancanti | Fornisci file di metadati di tipo/firma |
Reko vs Altri Decompilatori
| Aspetto | Reko | Ghidra | RetDec |
|---|
| Architetture legacy | Eccezionale | Buono | Moderato |
| GUI interattiva | Sì | Sì (più ricca) | No |
| Batch scriptabile | Sì (CLI) | Sì | Sì |
| Linguaggio | C# | Java | C++ |
| Migliore per | Target retro/esotici | RE interattivo generale | Pipeline batch, embedded |
Usa Ghidra per RE interattivo mainstream e RetDec per pipeline batch; Reko guadagna il suo posto quando l”architettura è insolita.
Risorse