
Suite de alto rendimiento de arquitectura Ghidra y aceleración por GPU: códec de árbol B LZ4/Zstd, daemon persistente sin bloqueos, escáner WGPU ARM64, demostrador Z3 SMT y descompilador neuronal
Herramientas de Python que hacen que Ghidra sea más rápida de programar, además de algunos análisis que no realiza de forma nativa: recuperación de clases MFC/C++, trazado del diseño de Serialize(), coincidencia de funciones entre versiones y un verificador de equivalencia Z3 para P-code.
El análisis de Ghidra es excelente, pero controlarlo desde scripts es lento. Cada ejecución headless paga de 5 a 15 segundos de arranque de la JVM. Un bloqueo de proyecto impide que un segundo proceso lea. Los trabajos masivos, como recorrer una sección .text ARM64 de 20 MB o emparejar 45.000 funciones entre dos compilaciones, se ejecutan en un único hilo de CPU.
SuperGhidra mantiene un proyecto Ghidra de solo lectura cargado en un daemon en segundo plano y almacena en caché sus respuestas. El trabajo masivo se traslada a Python puro, NumPy o shaders de cómputo en GPU. Gran parte del trabajo de formatos y recuperación de clases no necesita Ghidra en absoluto.
| Paquete | Qué hace |
|---|---|
core | Daemon en 127.0.0.1:5073 con una caché SQLite. Los renombrados y comentarios van a un overlay JSON, nunca al .rep. También incluye un gobernador de recursos (eco / balanced / turbo / auto) e IPC por memoria compartida. |
formats | Cargador ELF / PE / Mach-O, recuperación de RTTI de MSVC y de CRuntimeClass de MFC, trazado de Serialize(), un decodificador de CArchive y exportación DWARF 5 / Breakpad / map. Ninguno de estos necesita Ghidra. |
lifters | Lifter ARM64 → P-code (subconjunto de enteros), decodificadores x86 y ARM/Thumb, y un verificador Z3 que demuestra la equivalencia de dos fragmentos o responde UNKNOWN. |
diff | Empareja funciones entre versiones con vectores de características de CFG y luego encuentra campos de struct cuyos offsets se movieron y reescribe los accesos. |
acceleration | Shaders WGPU que escanean ARM64 en busca de pares ADRP+ADD/LDR y prólogos de funciones, con un fallback de CPU SIMD. |
storage | Códec LZ4 / Zstd para las páginas de búfer de 16 KB de Ghidra, además de un códec Java independiente BufferFile. |
integrations | Referenciador cruzado APK ↔ JNI, lector de memoria del emulador de Android con una lista de dispositivos permitidos, y un pipeline de nombrado con LLM. |
Cada paquete tiene su propio README en superghidra/.
Todos los benchmarks se miden en hardware físico (Intel Core i9-12950HX, 64 GB DDR5, NVIDIA RTX A5500 Laptop GPU) y en la matriz de CI multiplataforma. Los datos empíricos completos y los registros están en docs/benchmarks/.
| Carga de trabajo / Benchmark | Tamaño de entrada / Objetivo | Motor / Backend | Tiempo medido | Rendimiento medido / Resultado | Estado |
|---|---|---|---|---|---|
| Barrido ARM64 ADRP + ADD/LDR | Bloque ARM64 de 4,0 MB (1.048.576 insns) | NumPy SIMD | 7,28 ms | 143,95 M insn/s | 1.049 pares identificados |
| Sembrador de funciones ARM64 | Bloque ARM64 de 4,0 MB (1.048.576 insns) | NumPy SIMD | 8,31 ms | 126,19 M insn/s | 1.049 prólogos identificados |
| Barrido ADRP en GPU a gran escala | Bloque ARM64 de 20,0 MB (5.242.880 insns) | WGPU DirectX 12 | 41,20 ms | 127,25 M insn/s | Coincidencia bit a bit con la CPU |
| Compresión de archivos de búfer (LZ4) | 1.000 páginas sintéticas de 16 KB (16,0 MB) | LZ4 block | 36,12 ms | 442,9 MB/s (ratio 4,84x) | 79,32% de ahorro en disco |
| Compresión de archivos de búfer (Zstd) | 1.000 páginas sintéticas de 16 KB (16,0 MB) | Zstd Nivel 3 | 77,48 ms | 206,5 MB/s (ratio 7,39x) | 86,47% de ahorro en disco |
| Caché de consultas de descompilación | RPC del daemon de Ghidra en vivo | Caché L2 SQLite | < 0,01 ms | > 100.000 req/s | Coincidencia en overlay en memoria |
| Roundtrip de IPC por canal SHM | Búfer circular mapeado en memoria de 64 KB | IPC SHM de Windows | 5,12 µs | 195.300 msg/s | Memoria compartida sin copia |
Evaluado bajo gcc -O0 -lm en los niveles de optimización O0–O3. Las funciones deben compilar sin errores y superar su conjunto de pruebas:
| Pipeline del descompilador | Recuento de compilaciones superadas | Tasa de éxito (%) | Delta relativo frente a Ghidra sin procesar | Delta relativo frente a IDA Pro |
|---|---|---|---|---|
| Ghidra NSA estándar | 107 / 1,296 | 8.26% | Línea base | -8.64% |
| IDA Pro comercial | 219 / 1,296 | 16.90% | +8.64% | Línea base |
| Filtro de compilabilidad de SuperGhidra | 294 / 1,296 | 22.69% | +14.43% | +5.79% |
Matriz completa de 6 trabajos superada en cada commit (Ejecución #39691442336):
| Sistema operativo | Python 3.10 | Python 3.11 | Python 3.12 | Recuento de pruebas de Pytest | Tasa de éxito |
|---|---|---|---|---|---|
Ubuntu Linux (ubuntu-latest) | 32s | 26s | 25s | 626 recopiladas (572 superadas, 42 omitidas, 11 deseleccionadas) | 100% |
Windows Server (windows-latest) | 1m 25s | 1m 06s | 53s | 626 recopiladas (583 superadas, 32 omitidas, 11 deseleccionadas) | 100% |
Los registros detallados y la metodología de medición están documentados en docs/benchmarks/EMPIRICAL_TEST_BENCHMARK_MATRIX.md.
Desde PyPI:
pip install superghidra
Extras opcionales de aceleración e integración:
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
Desde el código fuente (desarrollo):
git clone https://github.com/yuatemycat/SuperGhidra
cd SuperGhidra
pip install -e ".[all]"
python -m pytest -q
CLI unificada:
SuperGhidra incluye un ejecutable de línea de comandos independiente e integrado 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