
Reimplementación en C++ del núcleo analítico de Ghidra sin dependencias de JVM, que proporciona análisis binario embebible, fundamentos de Pcode/Sleigh e interfaces listas para IA para ingeniería inversa.
Reimplementación en C++ del núcleo analítico de Ghidra (SoftwareModeling + Utility), despojado de dependencias de Java/JVM. Construido para integración con IA, rendimiento y capacidad de incrustación. Parte del proyecto Enigma Engine.
Una reimplementación en C++ del núcleo analítico de Ghidra — sin JVM, sin Java, control total.
Ghidra es un potente framework de ingeniería inversa creado por la NSA en Java. Enigma es una reescritura desde cero de su núcleo analítico en C++ moderno, diseñado para ser:
Esto no es la salida de un transpilador de Java a C++. Cada archivo está traducido y verificado manualmente, con cobertura de pruebas completa.
La base de código Java de Ghidra es madura pero difícil de extender en ciertas direcciones:
| Problema | Respuesta de Enigma |
|---|
| Sobrecarga de inicio de JVM + GC | C++ nativo, cero runtime |
| Difícil de incrustar en proyectos que no son Java | Biblioteca estática/compartida |
| La integración con IA requiere puentes JNI | API directa en C++ |
| Sistema de plugins monolítico | Componentes modulares y reemplazables |
Desarrollo activo — la base analítica es estable y está probada.
El sistema de tipos central, el modelo de direcciones, las interfaces de memoria, el framework de configuración y las bases de Pcode/Sleigh están implementados y pasan las pruebas. El proyecto sigue un estricto orden de traducción de abajo hacia arriba: no se añade ningún módulo hasta que todas sus dependencias estén en su lugar y verificadas.
Sistema de compilación: CMake + Ninja + CTest — cero advertencias, todas las pruebas pasan.
Enigma refleja la estructura de paquetes internos de Ghidra, traducida a espacios de nombres de 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]
Decisiones clave de diseño:
interface de Java → abstract class de C++ con métodos virtual purosArrayList / HashMap de Java → std::vector / std::unordered_mapnull de Java → std::optional<T>Address fusionado de interfaz + implementación en un único tipo de valor (evita asignación en heap)Enigma es un reemplazo completo de Ghidra — cada componente que existe en Java tendrá un equivalente en C++, incluyendo la UI, el sistema de plugins, el desensamblador, el descompilador y el motor de scripting.
El enfoque actual es el núcleo analítico — la base sobre la que se construye todo lo demás. Una vez que sea sólido y esté probado, las capas restantes (GUI, cargadores, plugins de análisis, scripting) seguirán en orden.
Nada está excluido permanentemente. Todo es cuestión de prioridad.
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 — nombrado así por la máquina de cifrado de la Segunda Guerra Mundial, descifrada mediante ingeniería inversa. Parecía adecuado.
Este proyecto es una traducción de Ghidra, que está licenciado bajo la Apache License 2.0.
Enigma se distribuye bajo la misma licencia. Consulta LICENSE para más detalles.