Ghidra 分析核心(SoftwareModeling + Utility)的 C++ 重新实现,去除了 Java/JVM 依赖。专为 AI 集成、性能和可嵌入性而构建。Enigma Engine 项目的一部分。
Ghidra 分析核心的 C++ 重新实现——无 JVM,无 Java,完全掌控。
Ghidra 是 NSA 用 Java 构建的强大逆向工程框架。 Enigma 是用现代 C++ 对其分析核心进行的从零重写,旨在实现:
这不是 Java 到 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 中存在的每个组件都将有 C++ 等价物,包括 UI、插件系统、反汇编器、反编译器和脚本引擎。
当前重点是分析核心——其他一切构建于其上的基础。一旦它稳固并经过测试,其余层(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 — 以二战密码机命名,通过逆向工程被破解。 感觉挺合适。
本项目是 Ghidra 的翻译版本, 后者根据 Apache License 2.0 许可。
Enigma 在相同许可证下分发。 详情请参见 LICENSE。