
Reimplementação em C++ do núcleo analítico do Ghidra sem dependências de JVM, fornecendo análise binária incorporável, fundamentos de Pcode/Sleigh e interfaces prontas para IA para engenharia reversa.
Reimplementação em C++ do núcleo analítico do Ghidra (SoftwareModeling + Utility), sem dependências de Java/JVM. Criado para integração com IA, desempenho e capacidade de incorporação. Parte do projeto Enigma Engine.
Uma reimplementação em C++ do núcleo analítico do Ghidra — sem JVM, sem Java, controle total.
Ghidra é uma poderosa framework de engenharia reversa criada pela NSA em Java. Enigma é uma reescrita do zero do seu núcleo analítico em C++ moderno, projetada para ser:
Isto não é a saída de um transpilador de Java para C++. Cada arquivo é traduzido e verificado manualmente, com cobertura total de testes.
A base de código Java do Ghidra é madura, mas difícil de estender em certas direções:
| Problema | Resposta do Enigma |
|---|
| Arranque da JVM + sobrecarga do GC | C++ nativo, zero runtime |
| Difícil de incorporar em projetos não-Java | Biblioteca estática/dinâmica |
| Integração com IA requer pontes JNI | API C++ direta |
| Sistema de plugins monolítico | Componentes modulares e substituíveis |
Desenvolvimento ativo — a base analítica está estável e testada.
O sistema de tipos central, o modelo de endereços, as interfaces de memória, a framework de configurações e as bases de Pcode/Sleigh estão implementados e a passar nos testes. O projeto segue uma ordem de tradução estritamente ascendente: nenhum módulo é adicionado até que todas as suas dependências estejam prontas e verificadas.
Sistema de compilação: CMake + Ninja + CTest — zero avisos, todos os testes passam.
O Enigma espelha a estrutura interna de pacotes do Ghidra, traduzida para namespaces 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]
Decisões de design fundamentais:
interface de Java → abstract class de C++ com métodos virtual purosArrayList / HashMap de Java → std::vector / std::unordered_mapnull de Java → std::optional<T>Address fundido de interface + implementação num único tipo de valor (evita alocação no heap)O Enigma é um substituto completo do Ghidra — cada componente que existe em Java terá um equivalente em C++, incluindo a UI, o sistema de plugins, o disassembler, o decompilador e o motor de scripting.
O foco atual é o núcleo analítico — a base sobre a qual tudo o resto é construído. Assim que estiver sólido e testado, as camadas restantes (GUI, loaders, plugins de análise, scripting) seguirão por ordem.
Nada está permanentemente excluído. Tudo é uma questão de prioridade.
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 — nomeada em homenagem à máquina de cifra da Segunda Guerra Mundial, quebrada através de engenharia reversa. Pareceu adequado.
Este projeto é uma tradução do Ghidra, que está licenciado sob a Apache License 2.0.
O Enigma é distribuído sob a mesma licença. Consulte LICENSE para mais detalhes.