Der weltweit erste agentische Reverse Engineer.
LLM-Orchestrierung zum Reverse Engineering von Binärdateien
Die meisten Aufgaben folgen einer linearen Beziehung: Je schwieriger eine Aufgabe, desto länger dauert sie normalerweise. Reverse Engineering (und Binäranalyse) ist eine Aufgabe, bei der die tatsächliche Schwierigkeit eher trivial ist, aber die Ausführungszeit in der Größenordnung von Stunden (und Tagen!) liegen kann, selbst für eine Binärdatei mit ein paar hundert Funktionen.
Kong automatisiert die mechanische Schicht unter Verwendung eines Reverse-Engineering-Frameworks auf NSA-Niveau. Kong kann eine vollständig obfuskatierte, gestrippte Binärdatei nehmen und eine vollständige Analyse-Pipeline durchführen: Funktionen triagieren, Call-Graph-Kontext aufbauen, Typen und Symbole durch LLM-gestützte Dekompilation wiederherstellen und die Ergebnisse zurück in Ghidras Programmdatenbank schreiben. Die Ausgabe ist eine Binärdatei, in der aus FUN_00401a30 nun parse_http_header wird, mit wiederhergestellten Strukturen, Parameternamen und Aufrufkonventionen.
Warum es das gibt
Gestrippte Binärdateien verlieren den gesamten Kontext, der Code lesbar macht: Funktionsnamen, Typinformationen, Variablennamen, Strukturlayouts. Die Wiederherstellung dieses Kontexts ist der Großteil der Arbeit bei den meisten RE-Aufgaben, und es ist größtenteils Mustererkennung: Erkennen von Standardbibliotheksfunktionen, Ableiten von Typen aus der Nutzung, Propagieren von Namen durch Call-Graphen.
LLMs sind genau für diese Art der Mustererkennung gut geeignet. Aber einen LLM auf rohe Dekompiler-Ausgabe zu richten und zu fragen "was macht das?" liefert mittelmäßige Ergebnisse. Dem Modell fehlt der Aufrufkontext, Kreuzreferenzinformationen und das größere Bild der Binärstruktur. Darüber hinaus führen die meisten obfuskierten Binärdateien extreme Techniken ein, um Reverse Engineering zu verhindern.
Kong löst dies, indem es reichhaltige Kontextfenster aus Ghidras Programm-Analyse (Call-Graphen, Kreuzreferenzen, String-Referenzen, Datenfluss) aufbaut, bevor der LLM überhaupt berührt wird, und dann die Analyse in Abhängigkeitsreihenfolge orchestriert, sodass jede Funktion davon profitiert, dass ihre Callees bereits benannt sind. Zusätzlich führt Kong seine eigene, erstmalige, agentische Deobfuskations-Pipeline ein.


Kong arbeitet mit den meisten Ghidra-dekompilierbaren Binärdateien (vorerst, mehr folgen).
| C | C++ | Go | Rust | |
|---|---|---|---|---|
| x86 | Hoch | Hoch | Mittel | Mittel |
| x86-64 | Hoch | Hoch | Mittel | Mittel |
| ARM (32-bit) | Hoch | Hoch | Mittel | Niedrig |
| AArch64 | Hoch | Hoch | Mittel | Niedrig |
| MIPS | Mittel | Mittel | Niedrig | Niedrig |
| PowerPC | Mittel | Mittel | Niedrig | Niedrig |
Hoch: Kong dekompiliert, deobfuskiert und stellt Namen, Typen und Struktur zuverlässig wieder her.
Mittel: Die Dekompilation ist brauchbar, aber verrauschter. Erwarten Sie teilweise Wiederherstellung und niedrigere Konfidenzwerte.
Niedrig: Die Dekompilation hat erhebliche Lücken und die Ergebnisse bleiben unvollständig, verrauscht oder unlesbar.
Hinweis: Die Binärdateigröße skaliert positiv mit der Funktionsanzahl, den LLM-Kosten und der Fertigstellungszeit. Allerdings skaliert die Binärdateigröße auch negativ mit der Konfidenz, denken Sie daran bei der Analyse größerer Binärdateien.
Kong verwendet eine fünfphasige Pipeline, die von einem Supervisor orchestriert wird, der Triage, parallele Analyse und Nachbearbeitung koordiniert:
┌──────────────────────┐
│ Triage │
│ enumerate, classify,│
│ build call graph, │
│ match signatures │
└──────────┬───────────┘
│
▼
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Analyze │ │ Analyze │ │ ... │
│ (leaf fns) │ │ (next tier) │ │ │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└────────┬───────┴────────────────┘
│
▼
┌──────────────────────┐
│ Cleanup │
│ normalize, dedupe │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Synthesis │
│ unify names, build │
│ structs, deobfuscate│
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Export │
│ analysis.json + │
│ Ghidra writeback │
└──────────────────────┘
Triage zählt alle Funktionen in der Binärdatei auf, klassifiziert sie nach Größe (trivial / klein / mittel / groß), erstellt den Call-Graphen, erkennt die Quellsprache und führt einen Signaturabgleich mit bekannten Standardbibliotheks- und Kryptofunktionen durch. Funktionen, die durch Signaturen übereinstimmen, werden als aufgelöst markiert und überspringen die LLM-Analyse vollständig.
Analyse verarbeitet Funktionen in bottom-up-Reihenfolge aus dem Call-Graphen mit einer Arbeitswarteschlange. Für jede Funktion baut Kong ein Kontextfenster aus Ghidras Programmdatenbank auf — Dekompilation, Kreuzreferenzen, String-Referenzen und die Signaturen bereits analysierter Callees — normalisiert die Dekompiler-Ausgabe und sendet sie an den LLM zur Wiederherstellung von Namen, Typen und Parametern. Wenn in der Dekompilation einer Funktion Obfuskation erkannt wird, führt Kong einen agentischen Deobfuskations-Durchlauf mit symbolischem Tool-Zugang durch, bevor die Analyse erstellt wird. Ergebnisse werden sofort zurück in Ghidra geschrieben, sodass nachgelagerte Aufrufer aktualisierte Namen sehen.
Bereinigung vereinheitlicht Strukturtypen aus während der Analyse gesammelten Vorschlägen und wiederholt Funktionssignaturen, die während des Analyse-Durchlaufs fehlgeschlagen sind.
Synthese nimmt eine globale Sicht auf alle analysierten Funktionen ein. Ein einziger LLM-Aufruf überprüft die am stärksten verbundenen Funktionen, vereinheitlicht Namenskonventionen, synthetisiert Strukturdefinitionen aus Feldzugriffsmustern und verfeinert Namen, die im weiteren Kontext inkonsistent erscheinen.
Export schreibt die finale analysis.json und wendet alle wiederhergestellten Namen, Typen und Signaturen zurück auf die Ghidra-Programmdatenbank an.
# 1. Kong installieren
uv pip install kong-re
# 2. API-Schlüssel setzen
export ANTHROPIC_API_KEY="sk-ant-..."
# und/oder
export OPENAI_API_KEY="sk-..."
# 3. Setup-Assistent ausführen (nur beim ersten Mal)
kong setup
# 4. Binärdatei analysieren
kong analyze ./pfad/zur/gestrippten_binaerdatei
Der Setup-Assistent lässt Sie auswählen, welche LLM-Provider verwendet werden sollen, und legt einen Standard fest. Kong erkennt Ihre Ghidra- und JDK-Installationen automatisch, lädt die Binärdatei in eine In-Prozess-Ghidra-Instanz und führt die vollständige Pipeline aus.
git clone https://github.com/amruth-sn/kong.git
cd kong
uv sync
uv run kong setup
uv run kong analyze ./pfad/zur/gestrippten_binaerdatei
| Variable | Erforderlich | Beschreibung |
|---|---|---|
ANTHROPIC_API_KEY | Ja (mindestens einer) | Anthropic-API-Schlüssel (Claude) |
OPENAI_API_KEY | Ja (mindestens einer) | OpenAI-API-Schlüssel (GPT-4o) |
GHIDRA_INSTALL_DIR | Nein | Pfad zur Ghidra-Installation (wird automatisch erkannt, wenn nicht gesetzt) |
JAVA_HOME | Nein | Pfad zum JDK (wird automatisch erkannt, wenn nicht gesetzt) |
KONG_CONFIG_DIR | Nein | Überschreibt das Konfigurationsverzeichnis (Standard: ~/.config/kong) |
# Setup-Assistent ausführen
kong setup
# Gestrippte Binärdatei analysieren (verwendet den konfigurierten Standard-Provider)
kong analyze ./binary
# Mit einem bestimmten Provider analysieren
kong analyze ./binary --provider openai
# Das Modell überschreiben
kong analyze ./binary --provider openai --model gpt-4o-mini
# Binärdatei-Metadaten anzeigen ohne Analyse
kong info ./binary
# Analyseergebnisse mit Ground-Truth-Quellcode evaluieren
kong eval ./analysis.json ./source.c
Ergebnisse werden in das Ausgabeverzeichnis geschrieben (Standard: ./kong_output_{binary_name}/):
kong_output_{binary_name}/
├── analysis.json # Alle wiederhergestellten Funktionsnamen, Typen, Parameter
└── events.log # Pipeline-Ausführungsprotokoll
Kong hat autonom die gesamte XZ-Hintertür (CVE-2024-3094) Kill Chain aus einer gestrippten liblzma.so.5.4.1 rekonstruiert — Identifizierung aller fünf Kern-Implant-Funktionen mit 90-95% Konfidenz in 15 Minuten für 6,63 $.
Siehe BENCHMARKS.md für die vollständige Fallstudie und Reproduktionsanweisungen.
kong/
├── __main__.py # CLI-Einstiegspunkt (click)
├── config.py # KongConfig, LLMProvider, LLMConfig
├── db.py # SQLite-Konfigurationsspeicher (~/.config/kong/)
├── banner.py # ASCII-Banner, API-Key-Helfer
├── agent/
│ ├── supervisor.py # Pipeline-Orchestrator
│ ├── triage.py # Funktionsaufzählung + Klassifizierung
│ ├── analyzer.py # LLM-gestützte Funktionsanalyse
│ ├── queue.py # BFS-Arbeitswarteschlange aus Call-Graph
│ ├── signatures.py # Signaturabgleich bekannter Funktionen
│ ├── prompts.py # System-Prompt + Ausgabeschema
│ ├── events.py # Phasen-/Ereignistypen für Pipeline-Tracing
│ └── models.py # FunctionResult-Dataclass
├── ghidra/
│ ├── client.py # In-Prozess-GhidraClient (PyGhidra/JPype)
│ ├── types.py # FunctionInfo, BinaryInfo, XRef, etc.
│ └── environment.py # Ghidra/JDK-Autoerkennung
├── llm/
│ ├── client.py # AnthropicClient
│ ├── openai_client.py # OpenAIClient
│ ├── usage.py # TokenUsage, Kostenverfolgung, Preisregister
│ └── limits.py # Modellspezifische Grenzen + Ratenbegrenzer
├── normalizer/
│ └── syntactic.py # Normalisierung der Dekompiler-Ausgabe
├── synthesis/
│ └── semantic.py # Globale Namensvereinheitlichung + Struktursynthese
├── evals/
│ ├── harness.py # Ground-Truth-Extraktion + Bewertung
│ └── metrics.py # symbol_accuracy, type_accuracy
├── export/
│ └── source.py # analysis.json + Ghidra-Rückschreiben
├── signatures/
│ ├── stdlib.json # Signaturen der C-Standardbibliothek
│ └── crypto.json # Signaturen kryptografischer Funktionen
└── tui/
└── app.py # Textual TUI
Kong ist unter der Apache Lizenz 2.0 lizenziert. Kong ist ein freies und Open-Source-Projekt.
Diese Lizenz ist mit der Ghidra-Lizenz kompatibel und erlaubt kommerzielle Nutzung.
Fehlermeldungen und Feature-Anfragen sind über GitHub Issues willkommen.
Ein großes Dankeschön an das Shannon-Projekt von KeygraphHQ, das die Inspiration für dieses Projekt geliefert hat. Meine Motivation war es, die gleiche Art von Pipeline, die Shannon für sein webbasiertes Pentesting-Tool verwendet, zu replizieren und für Binäranalyse und Dekompilation anzupassen.
Fürchte den Affen.
Kong: Der weltweit erste KI-Reverse Engineer