
高性能Ghidraアーキテクチャ&GPUアクセラレーションスイート:LZ4/Zstd B-Treeコーデック、永続ロックフリーデーモン、WGPU ARM64スキャナー、Z3 SMT証明器、ニューラルデコンパイラ
Ghidra をより高速にスクリプト化するための Python ツール群に加え、標準では提供されないいくつかの解析機能を備えています。MFC/C++ クラスの復元、Serialize() レイアウトのトレース、バージョン間の関数マッチング、そして P-code 用の Z3 等価性チェッカーです。
Ghidra の解析は優れていますが、スクリプトから操作すると遅くなります。ヘッドレス実行のたびに JVM の起動に 5〜15 秒かかります。プロジェクトロックがあるため、2 つ目のプロセスは読み取りできません。20 MB の ARM64 .text セクションを走査したり、2 つのビルド間で 45,000 個の関数をマッチングしたりするようなバルク処理は、単一の CPU スレッドで実行されます。
SuperGhidra は、読み取り専用の Ghidra プロジェクトを 1 つバックグラウンドデーモンにロードしたままにし、その回答をキャッシュします。バルク処理はプレーンな 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 デコーダー、2 つのスニペットが等価であることを証明するか UNKNOWN を返す Z3 チェッカー。 |
diff | CFG 特徴ベクトルを用いてバージョン間で関数をマッチングし、オフセットが移動した構造体フィールドを特定してアクセスを書き換えます。 |
acceleration | ARM64 を走査して ADRP+ADD/LDR ペアと関数プロローグを検出する WGPU シェーダー。SIMD CPU フォールバック付き。 |
storage | Ghidra の 16 KB バッファページ用の LZ4 / Zstd コーデック、およびスタンドアロンの Java BufferFile コーデック。 |
integrations | APK ↔ JNI クロスリファレンサー、デバイス許可リスト付きの Android エミュレータメモリリーダー、LLM 命名パイプライン。 |
各パッケージには superghidra/ 配下にそれぞれの README があります。
すべてのベンチマークは物理ハードウェア(Intel Core i9-12950HX、64 GB DDR5、NVIDIA RTX A5500 Laptop GPU)およびマルチプラットフォーム CI マトリックス上で測定されています。完全な実測データとログは docs/benchmarks/ にあります。
| ワークロード / ベンチマーク | 入力サイズ / ターゲット | エンジン / バックエンド | 実測時間 | 実測スループット / 結果 | ステータス |
|---|---|---|---|---|---|
| ARM64 ADRP + ADD/LDR スイープ | 4.0 MB ARM64 ブロック(1,048,576 命令) | NumPy SIMD | 7.28 ms | 143.95 M 命令/s | 1,049 ペアを特定 |
| ARM64 関数シーダー | 4.0 MB ARM64 ブロック(1,048,576 命令) | NumPy SIMD | 8.31 ms | 126.19 M 命令/s | 1,049 プロローグを特定 |
| 大規模 GPU ADRP スイープ | 20.0 MB ARM64 ブロック(5,242,880 命令) | WGPU DirectX 12 | 41.20 ms | 127.25 M 命令/s | CPU とビット完全一致 |
| バッファファイル圧縮(LZ4) | 合成 16 KB ページ 1,000 個(16.0 MB) | LZ4 block | 36.12 ms | 442.9 MB/s(4.84 倍の圧縮率) | ディスク使用量 79.32% 削減 |
| バッファファイル圧縮(Zstd) | 合成 16 KB ページ 1,000 個(16.0 MB) | Zstd レベル 3 | 77.48 ms | 206.5 MB/s(7.39 倍の圧縮率) | ディスク使用量 86.47% 削減 |
| 逆コンパイルクエリキャッシュ | 稼働中の Ghidra デーモン RPC | SQLite L2 キャッシュ | < 0.01 ms | > 100,000 リクエスト/s | インメモリオーバーレイ一致 |
| SHM チャネル IPC ラウンドトリップ | 64 KB メモリマップドリングバッファ | Windows SHM IPC | 5.12 µs | 195,300 メッセージ/s | ゼロコピー共有メモリ |
gcc -O0 -lm で評価し、最適化レベル O0~O3 にわたって検証しています。関数はクリーンにコンパイルされ、テストスイートに合格する必要があります:
| 逆コンパイラパイプライン | コンパイル可能な合格数 | 合格率 (%) | 生の 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 collected (572 passed, 42 skipped, 11 deselected) | 100% |
Windows Server (windows-latest) | 1m 25s | 1m 06s | 53s | 626 collected (583 passed, 32 skipped, 11 deselected) | 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 は不要):
python -m superghidra.formats.binary_loader app.dll # sections, imports, exports
python -m superghidra.formats.msvc_class_recovery app.dll # RTTI + MFC classes
python -m superghidra.formats.serialize_trace app.dll CMyDoc # Serialize() field layout
Python から:
from superghidra.formats.binary_loader import load_binary
from superghidra.formats.msvc_class_recovery import recover_classes
import superghidra as sg
img = load_binary("app.dll")
print(img.format, img.arch, len(img.sections))
report = recover_classes("app.dll")
print(len(report.mfc_classes), "MFC classes")
# Lift one ARM64 instruction and check it against itself with Z3
ops = sg.ARM64PcodeLifter().lift_instruction(0x1000, 0x91008041) # add x1, x2, #0x20
print(sg.SMTPcodeVerifier().verify_equivalence(ops, ops).equivalent)
デーモンを介して Ghidra プロジェクトをクエリする(JDK 21、Ghidra 11+、pyghidra が必要):
export GHIDRA_INSTALL_DIR=/path/to/ghidra
python ghidra_oracle.py --project-dir ~/re/proj --project-name game --program-name libgame.so status
python ghidra_oracle.py decompile 0x00CF2D84 # first call boots Ghidra, later calls hit the cache
python ghidra_oracle.py rename 0x00CF2D84 World_tick
python ghidra_oracle.py mode eco # throttle CPU use
python ghidra_oracle.py stop
python ghidra_oracle.py --help を実行すると、すべてのコマンドが一覧表示されます。
設定は環境変数から読み込まれ、特定のマシンに依存するものはありません:
| 変数 | 用途 |
|---|---|
GHIDRA_INSTALL_DIR, JAVA_HOME | Ghidra と JDK の場所 (デーモン、ヘッドレス実行、Java コーデックのビルド) |
SUPERGHIDRA_PROJECTS | デーモンのデフォルトプロジェクト: ; で区切られた dir,name[,program] エントリ |
SUPERGHIDRA_MSVC_ROOT | ポータブル MSVC フォルダ。gcc/clang が PATH にない場合に使用 |
SUPERGHIDRA_TEST_ARM64_ELF, SUPERGHIDRA_TEST_SWDM, SUPERGHIDRA_TEST_SW_ROOT | 統合テスト用のオプションの実バイナリ / SOLIDWORKS インストール。未設定の場合、これらのテストはスキップされます。 |