
Высокопроизводительный набор для архитектуры Ghidra и ускорения на GPU: B-дерево-кодек LZ4/Zstd, постоянный неблокирующий демон, сканер WGPU ARM64, SMT-доказыватель Z3 и нейронный декомпилятор
Инструменты на Python, которые ускоряют написание скриптов для Ghidra, а также несколько видов анализа, которых в ней нет из коробки: восстановление классов MFC/C++, трассировка раскладки Serialize(), сопоставление функций между версиями и проверка эквивалентности P-code с помощью Z3.
Анализ в Ghidra превосходен, но управлять им из скриптов медленно. Каждый headless-запуск тратит 5–15 секунд на старт JVM. Блокировка проекта не даёт второму процессу читать. Массовые задачи, такие как сканирование 20-мегабайтной секции .text для ARM64 или сопоставление 45 000 функций между двумя сборками, выполняются в одном потоке CPU.
SuperGhidra держит один read-only проект Ghidra загруженным в фоновом демоне и кэширует его ответы. Массовая работа переносится в чистый Python, NumPy или вычислительные шейдеры GPU. Значительная часть работы с форматами и восстановлением классов вообще не требует Ghidra.
| Пакет | Что делает |
|---|---|
core | Демон на 127.0.0.1:5073 с кэшем SQLite. Переименования и комментарии попадают в JSON-оверлей, никогда в .rep. Также включает регулятор ресурсов (eco / balanced / turbo / auto) и IPC через разделяемую память. |
formats | Загрузчик ELF / PE / Mach-O, восстановление MSVC RTTI и MFC CRuntimeClass, трассировка Serialize(), декодер CArchive и экспорт DWARF 5 / Breakpad / map. Ничто из этого не требует Ghidra. |
lifters | Лифтер ARM64 → P-code (целочисленное подмножество), декодеры x86 и ARM/Thumb, а также проверщик Z3, который доказывает эквивалентность двух фрагментов или отвечает UNKNOWN. |
diff | Сопоставляет функции между версиями с помощью векторов признаков CFG, затем находит поля структур, чьи смещения сместились, и переписывает обращения к ним. |
acceleration | Шейдеры WGPU, которые сканируют ARM64 на пары ADRP+ADD/LDR и прологи функций, с SIMD-резервом на CPU. |
storage | Кодек LZ4 / Zstd для 16-килобайтных буферных страниц Ghidra, а также автономный Java-кодек BufferFile. |
integrations | Кросс-референсер APK ↔ JNI, читатель памяти эмулятора Android с белым списком устройств и конвейер именования с помощью LLM. |
У каждого пакета есть собственный README в superghidra/.
Все бенчмарки измерены на физическом оборудовании (Intel Core i9-12950HX, 64 ГБ DDR5, NVIDIA RTX A5500 Laptop GPU) и в рамках мультиплатформенной матрицы CI. Полные эмпирические данные и логи находятся в docs/benchmarks/.
| Нагрузка / Бенчмарк | Размер входа / Цель | Движок / Бэкенд | Измеренное время | Измеренная пропускная способность / Результат | Статус |
|---|---|---|---|---|---|
| Сканирование ARM64 ADRP + ADD/LDR | Блок ARM64 4,0 МБ (1 048 576 инструкций) | NumPy SIMD | 7,28 мс | 143,95 млн инстр./с | Найдено 1 049 пар |
| Сидер функций ARM64 | Блок ARM64 4,0 МБ (1 048 576 инструкций) | NumPy SIMD | 8,31 мс | 126,19 млн инстр./с | Найдено 1 049 прологов |
| Крупномасштабное сканирование ADRP на GPU | Блок ARM64 20,0 МБ (5 242 880 инструкций) | WGPU DirectX 12 | 41,20 мс | 127,25 млн инстр./с | Побитово точное совпадение с CPU |
| Сжатие буферного файла (LZ4) | 1 000 синтетических страниц по 16 КБ (16,0 МБ) | LZ4 block | 36,12 мс | 442,9 МБ/с (степень сжатия 4,84x) | Экономия диска 79,32% |
| Сжатие буферного файла (Zstd) | 1 000 синтетических страниц по 16 КБ (16,0 МБ) | Zstd Level 3 | 77,48 мс | 206,5 МБ/с (степень сжатия 7,39x) | Экономия диска 86,47% |
| Кэш запросов декомпиляции | RPC живого демона Ghidra | Кэш L2 SQLite | < 0,01 мс | > 100 000 запр./с | Совпадение в оверлее в памяти |
| Круговой обмен IPC через канал SHM | Кольцевой буфер с отображением в память 64 КБ | Windows SHM IPC | 5,12 мкс | 195 300 сообщ./с | Разделяемая память без копирования |
Оценка проводилась при gcc -O0 -lm на уровнях оптимизации O0–O3. Функции должны компилироваться без ошибок и проходить свой набор тестов:
| Пайплайн декомпилятора | Число компилируемых прохождений | Доля прохождений (%) | Относительная дельта к Raw Ghidra | Относительная дельта к IDA Pro |
|---|---|---|---|---|
| Stock NSA Ghidra | 107 / 1,296 | 8.26% | Базовый уровень | -8.64% |
| Commercial IDA Pro | 219 / 1,296 | 16.90% | +8.64% | Базовый уровень |
| SuperGhidra Compilable Filter | 294 / 1,296 | 22.69% | +14.43% | +5.79% |
Полная матрица из 6 заданий проходит на каждом коммите (Run #39691442336):
| Операционная система | Python 3.10 | Python 3.11 | Python 3.12 | Количество тестов Pytest | Доля прохождений |
|---|---|---|---|---|---|
Ubuntu Linux (ubuntu-latest) | 32s | 26s | 25s | 626 собрано (572 пройдено, 42 пропущено, 11 исключено) | 100% |
Windows Server (windows-latest) | 1m 25s | 1m 06s | 53s | 626 собрано (583 пройдено, 32 пропущено, 11 исключено) | 100% |
Подробные журналы и методология измерений описаны в docs/benchmarks/EMPIRICAL_TEST_BENCHMARK_MATRIX.md.
Из PyPI:
pip install superghidra
Дополнительные опции для ускорения и интеграции:
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
Из исходников (разработка):
git clone https://github.com/yuatemycat/SuperGhidra
cd SuperGhidra
pip install -e ".[all]"
python -m pytest -q
Единый CLI:
SuperGhidra поставляется со встроенным автономным исполняемым файлом командной строки 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
Анализ бинарного файла Windows (Ghidra не требуется):