
Hochleistungs-Suite für Ghidra-Architektur und GPU-Beschleunigung: LZ4/Zstd-B-Tree-Codec, persistenter lock-freier Daemon, WGPU-ARM64-Scanner, Z3-SMT-Prover und neuronaler Dekompiler
Python-Tools, die das Skripting gegen Ghidra beschleunigen, plus einige Analysen, die Ghidra nicht von Haus aus bietet: MFC/C++-Klassenwiederherstellung, Tracing des Serialize()-Layouts, versionsübergreifender Funktionsabgleich und ein Z3-Äquivalenzprüfer für P-Code.
Ghidras Analyse ist hervorragend, aber die Steuerung per Skript ist langsam. Jeder Headless-Lauf kostet 5–15 Sekunden JVM-Startzeit. Eine Projektsperre verhindert, dass ein zweiter Prozess liest. Massenjobs wie das Durchsuchen eines 20 MB großen ARM64-.text-Abschnitts oder der Abgleich von 45.000 Funktionen zwischen zwei Builds laufen auf einem einzigen CPU-Thread.
SuperGhidra hält ein schreibgeschütztes Ghidra-Projekt in einem Hintergrund-Daemon geladen und cached dessen Antworten. Massenarbeit wird in reines Python, NumPy oder GPU-Compute-Shader verlagert. Ein Großteil der Format- und Klassenwiederherstellungsarbeit benötigt Ghidra überhaupt nicht.
| Paket | Was es tut |
|---|---|
core | Daemon auf 127.0.0.1:5073 mit einem SQLite-Cache. Umbenennungen und Kommentare landen in einem JSON-Overlay, niemals im .rep. Enthält außerdem einen Ressourcen-Governor (eco / balanced / turbo / auto) und Shared-Memory-IPC. |
formats | ELF-/PE-/Mach-O-Loader, MSVC-RTTI- und MFC-CRuntimeClass-Wiederherstellung, Serialize()-Tracing, ein CArchive-Decoder sowie DWARF-5-/Breakpad-/Map-Export. Nichts davon benötigt Ghidra. |
lifters | ARM64-→-P-Code-Lifter (Integer-Teilmenge), x86- und ARM/Thumb-Decoder sowie ein Z3-Prüfer, der die Äquivalenz zweier Snippets beweist oder UNKNOWN antwortet. |
diff | Gleicht Funktionen über Versionen hinweg mit CFG-Feature-Vektoren ab und findet dann Struct-Felder, deren Offsets sich verschoben haben, und schreibt die Zugriffe um. |
acceleration | WGPU-Shader, die ARM64 nach ADRP+ADD/LDR-Paaren und Funktionsprologen durchsuchen, mit einem SIMD-CPU-Fallback. |
storage | LZ4-/Zstd-Codec für Ghidras 16-KB-Pufferseiten sowie ein eigenständiger Java-BufferFile-Codec. |
integrations | APK-↔-JNI-Cross-Referencer, Android-Emulator-Speicherleser mit Geräte-Allow-List und eine LLM-Naming-Pipeline. |
Jedes Paket hat eine eigene README unter superghidra/.
Alle Benchmarks werden auf physischer Hardware (Intel Core i9-12950HX, 64 GB DDR5, NVIDIA RTX A5500 Laptop GPU) und über die Multi-Plattform-CI-Matrix hinweg gemessen. Vollständige empirische Daten und Logs befinden sich in docs/benchmarks/.
| Workload / Benchmark | Eingabegröße / Ziel | Engine / Backend | Gemessene Zeit | Gemessener Durchsatz / Ergebnis | Status |
|---|---|---|---|---|---|
| ARM64 ADRP + ADD/LDR Sweep | 4,0 MB ARM64-Block (1.048.576 Instruktionen) | NumPy SIMD | 7,28 ms | 143,95 M Instruktionen/s | 1.049 Paare identifiziert |
| ARM64 Function Seeder | 4,0 MB ARM64-Block (1.048.576 Instruktionen) | NumPy SIMD | 8,31 ms | 126,19 M Instruktionen/s | 1.049 Prologe identifiziert |
| Large-scale GPU ADRP Sweep | 20,0 MB ARM64-Block (5.242.880 Instruktionen) | WGPU DirectX 12 | 41,20 ms | 127,25 M Instruktionen/s | Bit-exakte Übereinstimmung mit CPU |
| Buffer File Compression (LZ4) | 1.000 synthetische 16-KB-Seiten (16,0 MB) | LZ4 block | 36,12 ms | 442,9 MB/s (4,84x Verhältnis) | 79,32 % Disk-Einsparung |
| Buffer File Compression (Zstd) | 1.000 synthetische 16-KB-Seiten (16,0 MB) | Zstd Level 3 | 77,48 ms | 206,5 MB/s (7,39x Verhältnis) | 86,47 % Disk-Einsparung |
| Decompilation Query Cache | Live Ghidra Daemon RPC | SQLite L2 Cache | < 0,01 ms | > 100.000 Anfragen/s | In-Memory-Overlay-Treffer |
| SHM Channel IPC Roundtrip | 64 KB memory-mapped Ringpuffer | Windows SHM IPC | 5,12 µs | 195.300 Nachrichten/s | Zero-Copy-Shared-Memory |
Ausgewertet unter gcc -O0 -lm über die Optimierungsstufen O0–O3. Funktionen müssen sauber kompilieren und ihre Testsuite bestehen:
| Decompiler-Pipeline | Kompilierbare bestandene Anzahl | Bestehensrate (%) | Relative Differenz zu Raw Ghidra | Relative Differenz zu IDA Pro |
|---|---|---|---|---|
| Stock NSA Ghidra | 107 / 1.296 | 8,26% | Basislinie | -8,64% |
| Kommerzielles IDA Pro | 219 / 1.296 | 16,90% | +8,64% | Basislinie |
| SuperGhidra Compilable Filter | 294 / 1.296 | 22,69% | +14,43% | +5,79% |
Vollständige 6-Job-Matrix, die bei jedem Commit besteht (Run #39691442336):
| Betriebssystem | Python 3.10 | Python 3.11 | Python 3.12 | Pytest-Testanzahl | Bestehensrate |
|---|---|---|---|---|---|
Ubuntu Linux (ubuntu-latest) | 32s | 26s | 25s | 626 erfasst (572 bestanden, 42 übersprungen, 11 abgewählt) | 100% |
Windows Server (windows-latest) | 1m 25s | 1m 06s | 53s | 626 erfasst (583 bestanden, 32 übersprungen, 11 abgewählt) | 100% |
Detaillierte Protokolle und die Messmethodik sind in docs/benchmarks/EMPIRICAL_TEST_BENCHMARK_MATRIX.md dokumentiert.
Von PyPI:
pip install superghidra
Optionale Beschleunigungs- und Integrations-Extras:
pip install "superghidra[all]" # all optional backends
pip install "superghidra[smt]" # Z3 P-code equivalence checker
pip install "superghidra[gpu]" # WGPU compute shaders (ADRP/prologue sweeps)
pip install "superghidra[storage]" # LZ4 & Zstandard 16 KB page compression
pip install "superghidra[ghidra]" # PyGhidra bridge & JVM headless bindings
pip install "superghidra[frida]" # Live emulator runtime inspection
Aus der Quelle (Entwicklung):
git clone https://github.com/yuatemycat/SuperGhidra
cd SuperGhidra
pip install -e ".[all]"
python -m pytest -q
Einheitliche CLI:
SuperGhidra wird mit einer integrierten eigenständigen Kommandozeilen-Anwendung superghidra ausgeliefert:
# Display version and hardware acceleration telemetry
superghidra version
# Staged P-code decompiler (MBA simplification, opaque branch pruning, goto-free C)
superghidra decompile target.dll --rva 0x140001000 --arch x86_64 -o decompiled.c
# Import IDA Pro .til type library and dump schema catalog
superghidra til-import mssdk64.til -o catalog.json
# Match binary bytes against IDA FLIRT signature database
superghidra flirt-match vc32rtf.sig target.exe --rva 0x1000
# Recover MSVC / MFC C++ class hierarchies, RTTI structures, and virtual call tables
superghidra rtti-recover app.dll -o classes.json
# Filter raw decompiler output into clean, compilable C
superghidra filter raw_decompile.c -o clean.c
Eine Windows-Binärdatei inspizieren (kein Ghidra erforderlich):