
고성능 Ghidra 아키텍처 및 GPU 가속 제품군: LZ4/Zstd B-트리 코덱, 영구 무잠금 데몬, WGPU ARM64 스캐너, Z3 SMT 증명기, 신경망 디컴파일러
Ghidra를 더 빠르게 스크립팅할 수 있게 해주는 Python 도구 모음과, 기본적으로 제공되지 않는 몇 가지 분석 기능을 제공합니다. MFC/C++ 클래스 복구, Serialize() 레이아웃 추적, 버전 간 함수 매칭, 그리고 P-code용 Z3 동등성 검사기를 포함합니다.
Ghidra의 분석 기능은 뛰어나지만, 스크립트로 구동하기에는 느립니다. 헤드리스 실행마다 JVM 시작에 5–15초가 소요됩니다. 프로젝트 잠금 때문에 두 번째 프로세스가 읽을 수 없습니다. 20 MB ARM64 .text 섹션을 훑거나 두 빌드 간 45,000개 함수를 매칭하는 대량 작업은 단일 CPU 스레드에서 실행됩니다.
SuperGhidra는 읽기 전용 Ghidra 프로젝트 하나를 백그라운드 데몬에 로드해 두고 그 응답을 캐시합니다. 대량 작업은 순수 Python, NumPy 또는 GPU 컴퓨트 셰이더로 옮겨집니다. 포맷 및 클래스 복구 작업의 상당 부분은 Ghidra가 전혀 필요하지 않습니다.
| 패키지 | 기능 |
|---|---|
core | SQLite 캐시를 갖춘 127.0.0.1:5073 데몬. 이름 변경과 주석은 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 디코더, 두 스니펫의 동등성을 증명하거나 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 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) | 합성 16 KB 페이지 1,000개 (16.0 MB) | LZ4 block | 36.12 ms | 442.9 MB/s (4.84x 비율) | 디스크 79.32% 절감 |
| 버퍼 파일 압축 (Zstd) | 합성 16 KB 페이지 1,000개 (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 대비 상대 델타 |
|---|---|---|---|---|
| Stock 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개 작업 매트릭스가 통과합니다 (실행 #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))
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 | gcc/clang이 PATH에 없을 때 사용하는 포터블 MSVC 폴더 |
SUPERGHIDRA_TEST_ARM64_ELF, SUPERGHIDRA_TEST_SWDM, SUPERGHIDRA_TEST_SW_ROOT | 통합 테스트용 선택적 실제 바이너리 / SOLIDWORKS 설치. 설정하지 않으면 해당 테스트는 건너뜁니다. |