
ISA Recovery
Eine Reverse-Engineering-Pipeline, die eine Firmware-Binärdatei und ihre (möglicherweise falsche) Disassemblierung in eine funktionierende Ghidra-Prozessorspezifikation verwandelt. Wenn man auf einen proprietären Prozessor ohne Dokumentation und ohne Ghidra-Unterstützung stößt, rekonstruiert dieses Tool die tatsächliche Kodierung jedes Befehls – welche Bits der Opcode sind, welche Register und welche Immediate – und schreibt eine SLEIGH-Spezifikation aus, die man direkt in Ghidra laden kann, um die Firmware zu dekompilieren.
Im Kern ist es ein agentischer Workflow: eine feste Pipeline, in der jeder Schritt ein großes Sprachmodell ist, das für eine eng umrissene Aufgabe per Prompt eingesetzt wird. Der Workflow wird von deterministischem Code orchestriert – nicht von den LLMs selbst – und jeder am Ende erzeugte SLEIGH-Konstruktor wird verifiziert, indem er mit Ghidras sleigh-Binärdatei kompiliert wird, bevor er akzeptiert wird. Fehlgeschlagene Kompilierungen werden für bis zu drei Reparaturversuche an das Modell zurückgegeben.
Objdump
│
▼
Bootstrap ─── deterministic clustering (no LLM)
│
▼
┌─ Processing Loop ──────────────────────────┐
│ Text Interpreter → Bit Interpreter ──┐ │
│ → Knowledge Manager │ │
│ → Supervisor │ │
│ │ split ─────┘ │
│ └── next cluster ──────────┤
└────────────────────────────────────────────┘
│
▼
Knowledge Base
│
▼
SLEIGH Generator ─── compile-verify-retry loop
│
▼
Ghidra .slaspec
Befehle werden anhand ihrer Struktur (Bytegröße, Token-Muster, Bitmaske mit festen Bits) in Cluster gruppiert. Jedes Cluster wird dann von einer Kette spezialisierter LLM-Schritte analysiert:
add {REG1}, {REG2}, {REG3}).Wenn die Wissensbasis vollständig ist, erstellt ein separater SLEIGH-Generator die Ghidra-Spezifikation in zwei Phasen: Zuerst ein deterministisches Gerüst aller Konstruktoren, die als unimpl markiert sind, dann füllt ein LLM die P-Code-Semantik Anweisung für Anweisung aus, wobei jede gegen Ghidras sleigh-Binärdatei kompiliert und bei Fehlern erneut versucht wird.
Entworfen als Co-Pilot für den Analysten, nicht als Ersatz: Die TUI legt jede Entscheidung offen, der Supervisor eskaliert mehrdeutige Cluster an einen Menschen, und der vollständige Verlauf der LLM-Konversation, Tool-Aufrufe und Token-Nutzung wird auf der Festplatte gespeichert.
Getestet mit LEGv8, MIPS, pi32v2 und x86.
# Docker (recommended)
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env
./docker/run.sh integration_tests/mips
# Local
pip install -e ".[all]"
python -m main --config config.yaml
Eingabe: ein Firmware-Binary und eine Obdump-Disassemblierung – sogar eine, die für die falsche Architektur erstellt wurde. Das Tool löst das Disassemblierungsproblem nicht selbst; die Qualität der Ausgabe skaliert mit der Qualität der Eingabe-Disassemblierung.
Ausgabe: eine Ghidra-.slaspec-Datei plus eine JSON-Wissensbasis aus Registern, Befehlskodierungen, Adressierungsarten und Architekturmerkmalen.
Die vollständige Dokumentation – Architektur, Agenten-Interna, ausgearbeitete Beispiele, Konfigurationsreferenz – befindet sich im Wiki:
pip install -e ".[docs]"
cd wiki && mkdocs serve
Öffnen Sie dann http://localhost:8000.
ANTHROPIC_API_KEYrun.sh)