
Una pipeline di reverse-engineering che trasforma un binario di firmware e il suo disassembly (possibilmente errato) in una specifica funzionante del processore per Ghidra. Quando ti imbatti in un processore proprietario senza documentazione e senza supporto in Ghidra, questo strumento recupera la codifica reale di ogni istruzione — quali bit sono l'opcode, quali sono i registri, quali sono gli immediati — e scrive una specifica SLEIGH che puoi caricare direttamente in Ghidra per decompilare il firmware.
Sotto il cofano è un workflow agente: una pipeline fissa in cui ogni passaggio è un modello linguistico di grandi dimensioni a cui viene chiesto un compito circoscritto. Il workflow è orchestrato da codice deterministico — non dai LLM stessi — e ogni costruttore SLEIGH generato alla fine viene verificato compilandolo con il binario sleigh di Ghidra prima di essere accettato. Le compilazioni fallite vengono restituite al modello per un massimo di tre tentativi di riparazione.
Objdump
│
▼
Bootstrap ─── clustering deterministico (senza LLM)
│
▼
┌─ Ciclo di Elaborazione ────────────────────┐
│ Text Interpreter → Bit Interpreter ──┐ │
│ → Knowledge Manager │ │
│ → Supervisor │ │
│ │ split ─────┘ │
│ └── prossimo cluster ──────┤
└────────────────────────────────────────────┘
│
▼
Knowledge Base
│
▼
SLEIGH Generator ─── ciclo compila-verifica-riprova
│
▼
Ghidra .slaspec
Le istruzioni sono raggruppate in cluster in base alla struttura (dimensione in byte, pattern di token, maschera di bit fissi). Ogni cluster viene poi analizzato da una catena di passaggi LLM specializzati:
add {REG1}, {REG2}, {REG3}).Quando la knowledge base è completa, un generatore SLEIGH separato costruisce la specifica Ghidra in due fasi: uno scheletro deterministico di tutti i costruttori marcati unimpl, poi un LLM riempie la semantica p-code un'istruzione alla volta, compilando ciascuna contro il binario sleigh di Ghidra e riprovando in caso di errore.
Progettato come co-pilota per l'analista, non un sostituto: la TUI espone ogni decisione, il supervisor scala i cluster ambigui a un essere umano e l'intera cronologia delle conversazioni LLM, delle chiamate agli strumenti e dell'uso dei token viene scritta su disco.
Testato su LEGv8, MIPS, pi32v2 e x86.
# Docker (consigliato)
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env
./docker/run.sh integration_tests/mips
# Locale
pip install -e ".[all]"
python -m main --config config.yaml
Input: un binario di firmware e un disassembly objdump — anche uno prodotto contro l'architettura sbagliata. Lo strumento non risolve da solo il problema del disassembly; la qualità dell'output scala con la qualità del disassembly in ingresso.
Output: un file Ghidra .slaspec più una knowledge base JSON di registri, codifiche di istruzioni, modalità di indirizzamento e tratti architetturali.
La documentazione completa — architettura, internals degli agenti, esempi pratici, riferimento di configurazione — vive nella wiki:
pip install -e ".[docs]"
cd wiki && mkdocs serve
Poi apri http://localhost:8000.
ANTHROPIC_API_KEYrun.sh)