
Реализация аналитического ядра Ghidra на C++ без зависимостей от JVM, обеспечивающая встраиваемый бинарный анализ, основы Pcode/Sleigh и интерфейсы, готовые к использованию с ИИ, для обратной разработки.
C++-реализация аналитического ядра Ghidra (SoftwareModeling + Utility), лишённая зависимостей от Java/JVM. Создана для интеграции с ИИ, производительности и встраиваемости. Часть проекта Enigma Engine.
C++-реализация аналитического ядра Ghidra — без JVM, без Java, полный контроль.
Ghidra — мощный фреймворк для обратной разработки, созданный АНБ на Java. Enigma — это полная переработка его аналитического ядра на современном C++, спроектированная так, чтобы быть:
Это не результат транспиляции из Java в C++. Каждый файл переведён вручную и проверен, с полным тестовым покрытием.
Кодовая база Ghidra на Java зрелая, но её сложно расширять в некоторых направлениях:
| Проблема | Ответ Enigma |
|---|
| Запуск JVM + накладные расходы GC | Нативный C++, нулевые накладные расходы |
| Сложно встроить в не-Java проекты | Статическая/динамическая библиотека |
| Для интеграции с ИИ требуются мосты 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 → C++ abstract class с чистыми virtual методамиArrayList / 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.