
उच्च-प्रदर्शन Ghidra आर्किटेक्चर और GPU त्वरण सूट: LZ4/Zstd B-Tree कोडेक, पर्सिस्टेंट लॉक-फ्री डेमॉन, WGPU ARM64 स्कैनर, Z3 SMT प्रूवर, और न्यूरल डीकंपाइलर
Python टूल्स जो Ghidra के विरुद्ध स्क्रिप्टिंग को तेज़ बनाते हैं, साथ ही कुछ ऐसे विश्लेषण जो यह डिफ़ॉल्ट रूप से नहीं करता: MFC/C++ क्लास रिकवरी, Serialize() लेआउट ट्रेसिंग, क्रॉस-वर्ज़न फ़ंक्शन मिलान, और P-code के लिए एक Z3 तुल्यता जाँचकर्ता।
Ghidra का विश्लेषण उत्कृष्ट है, लेकिन स्क्रिप्ट से इसे चलाना धीमा है। प्रत्येक हेडलेस रन में 5–15 सेकंड का JVM स्टार्टअप लगता है। एक प्रोजेक्ट लॉक दूसरी प्रक्रिया को पढ़ने से रोकता है। 20 MB ARM64 .text सेक्शन को स्वीप करना या दो बिल्ड्स के बीच 45,000 फ़ंक्शन्स का मिलान करना जैसे बल्क कार्य एक ही CPU थ्रेड पर चलते हैं।
SuperGhidra एक रीड-ओनली 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 | Ghidra के 16 KB बफ़र पेजों के लिए LZ4 / Zstd कोडेक, साथ ही एक स्टैंडअलोन Java BufferFile कोडेक। |
integrations | APK ↔ JNI क्रॉस-रेफ़रेंसर, डिवाइस अनुमति-सूची के साथ Android एमुलेटर मेमोरी रीडर, और एक LLM नेमिंग पाइपलाइन। |
प्रत्येक पैकेज का अपना README superghidra/ के अंतर्गत है।
सभी बेंचमार्क भौतिक हार्डवेयर (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 insns) | NumPy SIMD | 7.28 ms | 143.95 M insn/s | 1,049 जोड़े पहचाने गए |
| ARM64 फ़ंक्शन सीडर | 4.0 MB ARM64 ब्लॉक (1,048,576 insns) | NumPy SIMD | 8.31 ms | 126.19 M insn/s | 1,049 प्रोलॉग्स पहचाने गए |
| बड़े पैमाने का GPU ADRP स्वीप | 20.0 MB ARM64 ब्लॉक (5,242,880 insns) | WGPU DirectX 12 | 41.20 ms | 127.25 M insn/s | CPU के साथ बिट-सटीक मिलान |
| बफ़र फ़ाइल कम्प्रेशन (LZ4) | 1,000 सिंथेटिक 16 KB पेज (16.0 MB) | LZ4 block | 36.12 ms | 442.9 MB/s (4.84x अनुपात) | 79.32% डिस्क बचत |
| बफ़र फ़ाइल कम्प्रेशन (Zstd) | 1,000 सिंथेटिक 16 KB पेज (16.0 MB) | Zstd Level 3 | 77.48 ms | 206.5 MB/s (7.39x अनुपात) | 86.47% डिस्क बचत |
| डीकम्पाइलेशन क्वेरी कैश | लाइव Ghidra डेमन RPC | SQLite L2 कैश | < 0.01 ms | > 100,000 req/s | इन-मेमोरी ओवरले मिलान |
| SHM चैनल IPC राउंडट्रिप | 64 KB मेमोरी-मैप्ड रिंग बफ़र | Windows SHM IPC | 5.12 µs | 195,300 msg/s | ज़ीरो-कॉपी शेयर्ड मेमोरी |
gcc -O0 -lm के अंतर्गत अनुकूलन स्तरों O0–O3 पर मूल्यांकन किया गया। फ़ंक्शन को साफ़ रूप से संकलित होना चाहिए और अपने परीक्षण सूट को पास करना चाहिए:
| डीकंपाइलर पाइपलाइन | संकलन-योग्य पास गणना | पास दर (%) | कच्चे Ghidra की तुलना में सापेक्ष डेल्टा | IDA Pro की तुलना में सापेक्ष डेल्टा |
|---|---|---|---|---|
| स्टॉक NSA Ghidra | 107 / 1,296 | 8.26% | आधार रेखा | -8.64% |
| व्यावसायिक IDA Pro | 219 / 1,296 | 16.90% | +8.64% | आधार रेखा |
| SuperGhidra संकलन-योग्य फ़िल्टर | 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 की आवश्यकता नहीं):
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))