
Ghidra의 분석 코어를 JVM 의존성 없이 C++로 재구현하여, 임베디드 가능한 바이너리 분석, Pcode/Sleigh 기반, 그리고 리버스 엔지니어링을 위한 AI 지원 인터페이스를 제공합니다.
Ghidra의 분석 코어(SoftwareModeling + Utility)를 Java/JVM 의존성 없이 C++로 재구현한 것. AI 통합, 성능, 임베드 가능성을 위해 설계됨. Enigma Engine 프로젝트의 일부.
Ghidra의 분석 코어를 C++로 재구현 — JVM 없음, Java 없음, 완전한 제어.
Ghidra는 NSA가 Java로 만든 강력한 리버스 엔지니어링 프레임워크입니다. Enigma는 그 분석 코어를 현대적인 C++로 처음부터 다시 작성한 것으로, 다음을 목표로 합니다:
이것은 Java-to-C++ 트랜스파일러의 출력이 아닙니다. 모든 파일은 수동으로 번역되고 검증되었으며, 완전한 테스트 커버리지를 갖추고 있습니다.
Ghidra의 Java 코드베이스는 성숙했지만 특정 방향으로 확장하기 어렵습니다:
| 문제 | Enigma의 해답 |
|---|
| JVM 시작 + GC 오버헤드 | 네이티브 C++, 런타임 제로 |
| 비 Java 프로젝트에 임베드하기 어려움 | 정적/공유 라이브러리 |
| AI 통합에 JNI 브리지 필요 | 직접적인 C++ API |
| 모놀리식 플러그인 시스템 | 모듈식, 교체 가능한 컴포넌트 |
활발한 개발 중 — 분석 기반은 안정적이고 테스트됨.
핵심 타입 시스템, 주소 모델, 메모리 인터페이스, 설정 프레임워크, Pcode/Sleigh 기반이 구현되었고 테스트를 통과했습니다. 이 프로젝트는 엄격한 상향식 번역 순서를 따릅니다: 모든 의존성이 갖춰지고 검증되기 전까지 어떤 모듈도 추가되지 않습니다.
빌드 시스템: CMake + Ninja + CTest — 경고 제로, 모든 테스트 통과.
Enigma는 Ghidra의 내부 패키지 구조를 그대로 반영하여 C++ 네임스페이스로 번역했습니다:
include/ghidra/
├── [Address system] Address, AddressSpace, AddressFactory, AddressRange
├── [Data types] DataType, Structure, Union, Enum, Pointer,
│ Array, TypeDef, FunctionDefinition, ...
├── [Memory] MemBuffer, MemoryBlock, Memory, ByteProvider
├── [Settings] Settings + full SettingsDefinition hierarchy
├── [Pcode / Sleigh] PcodeOp, Varnode, SleighLanguage, SequenceNumber
└── [Utilities] MathUtilities, DataConverter, Msg, TaskMonitor, ...
src/
└── [.cpp implementations for complex classes]
주요 설계 결정:
interface → 순수 virtual 메서드를 가진 C++ abstract classArrayList / HashMap → std::vector / std::unordered_mapnull 반환 → std::optional<T>Address는 인터페이스 + 구현을 단일 값 타입으로 병합 (힙 할당 방지)Enigma는 Ghidra의 완전한 대체입니다 — Java에 존재하는 모든 컴포넌트는 UI, 플러그인 시스템, 디스어셈블러, 디컴파일러, 스크립팅 엔진을 포함하여 C++ 등가물을 갖게 됩니다.
현재 초점은 분석 코어 — 다른 모든 것이 그 위에 구축되는 기반입니다. 이것이 견고해지고 테스트되면 나머지 계층(GUI, 로더, 분석 플러그인, 스크립팅)이 순서대로 뒤따를 것입니다.
영구적으로 제외되는 것은 없습니다. 모든 것은 우선순위의 문제입니다.
git clone https://github.com/adam-040/Enigma.git
cd Enigma
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build --output-on-failure
.sla / .pspec 로딩)Enigma — 제2차 세계 대전의 암호 기계에서 이름을 따왔으며, 리버스 엔지니어링을 통해 해독되었습니다. 그게 딱 맞는 것 같았습니다.
이 프로젝트는 Ghidra의 번역물이며, Ghidra는 Apache License 2.0에 따라 라이선스됩니다.
Enigma는 동일한 라이선스로 배포됩니다. 자세한 내용은 LICENSE를 참조하세요.