
Suíte de Arquitetura Ghidra de Alto Desempenho e Aceleração por GPU: Codec B-Tree LZ4/Zstd, Daemon Persistente Lock-Free, Scanner WGPU ARM64, Provador Z3 SMT e Descompilador Neural
Ferramentas Python que tornam o Ghidra mais rápido de scriptar, além de algumas análises que ele não faz nativamente: recuperação de classes MFC/C++, rastreamento de layout de Serialize(), correspondência de funções entre versões e um verificador de equivalência Z3 para P-code.
A análise do Ghidra é excelente, mas conduzi-la a partir de scripts é lento. Cada execução headless paga de 5 a 15 segundos de inicialização da JVM. Um lock de projeto impede que um segundo processo o leia. Tarefas em massa, como varrer uma seção .text ARM64 de 20 MB ou corresponder 45.000 funções entre duas builds, rodam em uma única thread de CPU.
O SuperGhidra mantém um projeto Ghidra somente leitura carregado em um daemon em segundo plano e armazena em cache suas respostas. O trabalho em massa migra para Python puro, NumPy ou compute shaders de GPU. Grande parte do trabalho de formato e recuperação de classes não precisa do Ghidra.
| Pacote | O que faz |
|---|---|
core | Daemon em 127.0.0.1:5073 com cache SQLite. Renomeações e comentários vão para uma sobreposição JSON, nunca para o .rep. Também inclui um governador de recursos (eco / balanced / turbo / auto) e IPC por memória compartilhada. |
formats | Carregador ELF / PE / Mach-O, recuperação de RTTI MSVC e CRuntimeClass do MFC, rastreamento de Serialize(), um decodificador CArchive e exportação DWARF 5 / Breakpad / map. Nenhum destes precisa do Ghidra. |
lifters | Lifter ARM64 → P-code (subconjunto inteiro), decodificadores x86 e ARM/Thumb, e um verificador Z3 que prova a equivalência de dois trechos ou responde UNKNOWN. |
diff | Corresponde funções entre versões com vetores de características de CFG, depois encontra campos de struct cujos offsets mudaram e reescreve os acessos. |
acceleration | Shaders WGPU que varrem ARM64 em busca de pares ADRP+ADD/LDR e prólogos de funções, com fallback de CPU SIMD. |
storage | Codec LZ4 / Zstd para as páginas de buffer de 16 KB do Ghidra, além de um codec Java BufferFile autônomo. |
integrations | Referenciador cruzado APK ↔ JNI, leitor de memória do emulador Android com uma lista de dispositivos permitidos e um pipeline de nomeação por LLM. |
Cada pacote tem seu próprio README em superghidra/.
Todos os benchmarks são medidos em hardware físico (Intel Core i9-12950HX, 64 GB DDR5, NVIDIA RTX A5500 Laptop GPU) e na matriz de CI multiplataforma. Dados empíricos completos e logs estão em docs/benchmarks/.
| Carga de trabalho / Benchmark | Tamanho de entrada / Alvo | Engine / Backend | Tempo medido | Throughput / Resultado medido | Status |
|---|---|---|---|---|---|
| Varredura ARM64 ADRP + ADD/LDR | Bloco ARM64 de 4,0 MB (1.048.576 insns) | NumPy SIMD | 7,28 ms | 143,95 M insn/s | 1.049 pares identificados |
| Seeder de Funções ARM64 | Bloco ARM64 de 4,0 MB (1.048.576 insns) | NumPy SIMD | 8,31 ms | 126,19 M insn/s | 1.049 prólogos identificados |
| Varredura ADRP em GPU de Grande Escala | Bloco ARM64 de 20,0 MB (5.242.880 insns) | WGPU DirectX 12 | 41,20 ms | 127,25 M insn/s | Correspondência bit a bit com a CPU |
| Compressão de Arquivo de Buffer (LZ4) | 1.000 páginas sintéticas de 16 KB (16,0 MB) | LZ4 block | 36,12 ms | 442,9 MB/s (taxa de 4,84x) | 79,32% de economia em disco |
| Compressão de Arquivo de Buffer (Zstd) | 1.000 páginas sintéticas de 16 KB (16,0 MB) | Zstd Nível 3 | 77,48 ms | 206,5 MB/s (taxa de 7,39x) | 86,47% de economia em disco |
| Cache de Consultas de Descompilação | RPC do Daemon Ghidra em Execução | Cache L2 SQLite | < 0,01 ms | > 100.000 req/s | Correspondência na sobreposição em memória |
| Roundtrip de IPC do Canal SHM | Ring buffer mapeado em memória de 64 KB | IPC SHM do Windows | 5,12 µs | 195.300 msg/s | Memória compartilhada sem cópia |
Avaliado sob gcc -O0 -lm em todos os níveis de otimização O0–O3. As funções devem compilar sem erros e passar em sua suíte de testes:
| Pipeline do Descompilador | Contagem de Aprovações Compiláveis | Taxa de Aprovação (%) | Delta Relativo vs Ghidra Bruto | Delta Relativo vs IDA Pro |
|---|---|---|---|---|
| NSA Ghidra Original | 107 / 1.296 | 8,26% | Linha de base | -8,64% |
| IDA Pro Comercial | 219 / 1.296 | 16,90% | +8,64% | Linha de base |
| Filtro Compilável SuperGhidra | 294 / 1.296 | 22,69% | +14,43% | +5,79% |
Matriz completa de 6 jobs passando em cada commit (Execução #39691442336):
| Sistema Operacional | Python 3.10 | Python 3.11 | Python 3.12 | Contagem de Testes Pytest | Taxa de Aprovação |
|---|---|---|---|---|---|
Ubuntu Linux (ubuntu-latest) | 32s | 26s | 25s | 626 coletados (572 aprovados, 42 ignorados, 11 desmarcados) | 100% |
Windows Server (windows-latest) | 1m 25s | 1m 06s | 53s | 626 coletados (583 aprovados, 32 ignorados, 11 desmarcados) | 100% |
Os logs detalhados e a metodologia de medição estão documentados em docs/benchmarks/EMPIRICAL_TEST_BENCHMARK_MATRIX.md.
Do PyPI:
pip install superghidra
Extras opcionais de aceleração e integração:
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
Da origem (desenvolvimento):
git clone https://github.com/yuatemycat/SuperGhidra
cd SuperGhidra
pip install -e ".[all]"
python -m pytest -q
CLI unificada:
O SuperGhidra vem com um executável de linha de comando autônomo 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
# Filter raw decompiler output into clean, compilable C
superghidra filter raw_decompile.c -o clean.c
Inspecionar um binário do Windows (sem necessidade do Ghidra):