
Suite ad alte prestazioni per l'architettura di Ghidra e l'accelerazione GPU: codec B-Tree LZ4/Zstd, daemon persistente lock-free, scanner WGPU ARM64, dimostratore Z3 SMT e decompilatore neurale
Strumenti Python che rendono più rapida la scrittura di script per Ghidra, oltre ad alcune analisi che Ghidra non esegue di default: recupero delle classi MFC/C++, tracciamento del layout di Serialize(), confronto di funzioni tra versioni diverse e un verificatore di equivalenza Z3 per il P-code.
L'analisi di Ghidra è eccellente, ma pilotarla tramite script è lento. Ogni esecuzione headless paga 5–15 secondi di avvio della JVM. Un lock di progetto impedisce a un secondo processo di leggere. I lavori in blocco, come l'analisi di una sezione .text ARM64 da 20 MB o il confronto di 45.000 funzioni tra due build, girano su un singolo thread della CPU.
SuperGhidra mantiene un progetto Ghidra in sola lettura caricato in un daemon in background e memorizza nella cache le sue risposte. Il lavoro in blocco passa a Python puro, NumPy o compute shader su GPU. Gran parte del lavoro su formati e recupero delle classi non richiede affatto Ghidra.
| Pacchetto | Cosa fa |
|---|---|
core | Daemon su 127.0.0.1:5073 con cache SQLite. Le rinomine e i commenti finiscono in un overlay JSON, mai nel .rep. Include anche un resource governor (eco / balanced / turbo / auto) e IPC a memoria condivisa. |
formats | Loader ELF / PE / Mach-O, recupero di MSVC RTTI e MFC CRuntimeClass, tracciamento di Serialize(), un decoder CArchive ed esportazione DWARF 5 / Breakpad / map. Nessuno di questi richiede Ghidra. |
lifters | Lifter ARM64 → P-code (sottoinsieme intero), decoder x86 e ARM/Thumb, e un verificatore Z3 che dimostra l'equivalenza di due frammenti o risponde UNKNOWN. |
diff | Confronta le funzioni tra versioni con vettori di feature CFG, poi individua i campi delle struct i cui offset si sono spostati e riscrive gli accessi. |
acceleration | Shader WGPU che scansionano ARM64 alla ricerca di coppie ADRP+ADD/LDR e prologhi di funzione, con fallback SIMD su CPU. |
storage | Codec LZ4 / Zstd per le pagine buffer da 16 KB di Ghidra, più un codec Java BufferFile standalone. |
integrations | Cross-referencer APK ↔ JNI, lettore di memoria dell'emulatore Android con allow-list dei dispositivi, e una pipeline di naming basata su LLM. |
Ogni pacchetto ha il proprio README sotto superghidra/.
Tutti i benchmark sono misurati su hardware fisico (Intel Core i9-12950HX, 64 GB DDR5, NVIDIA RTX A5500 Laptop GPU) e sulla matrice CI multi-piattaforma. I dati empirici completi e i log sono in docs/benchmarks/.
| Carico di lavoro / Benchmark | Dimensione input / Target | Motore / Backend | Tempo misurato | Throughput / Risultato misurato | Stato |
|---|---|---|---|---|---|
| Sweep ARM64 ADRP + ADD/LDR | Blocco ARM64 da 4,0 MB (1.048.576 istruzioni) | NumPy SIMD | 7,28 ms | 143,95 M insn/s | 1.049 coppie identificate |
| Seeder di funzioni ARM64 | Blocco ARM64 da 4,0 MB (1.048.576 istruzioni) | NumPy SIMD | 8,31 ms | 126,19 M insn/s | 1.049 prologhi identificati |
| Sweep ADRP su GPU su larga scala | Blocco ARM64 da 20,0 MB (5.242.880 istruzioni) | WGPU DirectX 12 | 41,20 ms | 127,25 M insn/s | Corrispondenza bit-exact con la CPU |
| Compressione file buffer (LZ4) | 1.000 pagine sintetiche da 16 KB (16,0 MB) | LZ4 block | 36,12 ms | 442,9 MB/s (rapporto 4,84x) | Risparmio su disco del 79,32% |
| Compressione file buffer (Zstd) | 1.000 pagine sintetiche da 16 KB (16,0 MB) | Zstd livello 3 | 77,48 ms | 206,5 MB/s (rapporto 7,39x) | Risparmio su disco dell'86,47% |
| Cache delle query di decompilazione | RPC del daemon Ghidra live | Cache L2 SQLite | < 0,01 ms | > 100.000 req/s | Corrispondenza in overlay in memoria |
| Roundtrip IPC del canale SHM | Ring buffer memory-mapped da 64 KB | IPC SHM Windows | 5,12 µs | 195.300 msg/s | Memoria condivisa zero-copy |
Valutato con gcc -O0 -lm su tutti i livelli di ottimizzazione da O0 a O3. Le funzioni devono compilare senza errori e superare la propria suite di test:
| Pipeline del decompilatore | Conteggio dei test superati compilabili | Tasso di superamento (%) | Delta relativo rispetto a Ghidra grezzo | Delta relativo rispetto a IDA Pro |
|---|---|---|---|---|
| Ghidra NSA stock | 107 / 1.296 | 8,26% | Baseline | -8,64% |
| IDA Pro commerciale | 219 / 1.296 | 16,90% | +8,64% | Baseline |
| Filtro compilabile SuperGhidra | 294 / 1.296 | 22,69% | +14,43% | +5,79% |
Matrice completa di 6 job superata a ogni commit (Run #39691442336):
| Sistema operativo | Python 3.10 | Python 3.11 | Python 3.12 | Conteggio test Pytest | Tasso di superamento |
|---|---|---|---|---|---|
Ubuntu Linux (ubuntu-latest) | 32s | 26s | 25s | 626 raccolti (572 superati, 42 saltati, 11 deselezionati) | 100% |
Windows Server (windows-latest) | 1m 25s | 1m 06s | 53s | 626 raccolti (583 superati, 32 saltati, 11 deselezionati) | 100% |
I log dettagliati e la metodologia di misurazione sono documentati in docs/benchmarks/EMPIRICAL_TEST_BENCHMARK_MATRIX.md.
Da PyPI:
pip install superghidra
Extra opzionali di accelerazione e integrazione:
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
Dal sorgente (sviluppo):
git clone https://github.com/yuatemycat/SuperGhidra
cd SuperGhidra
pip install -e ".[all]"
python -m pytest -q
CLI unificata:
SuperGhidra viene fornito con un eseguibile da riga di comando standalone integrato superghidra:
# 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
Ispeziona un binario Windows (senza bisogno di Ghidra):