
Reimplementazione in C++ del core analitico di Ghidra senza dipendenze dalla JVM, che fornisce analisi binaria integrabile, fondamenta Pcode/Sleigh e interfacce pronte per l'IA per il reverse engineering.
Reimplementazione in C++ del core analitico di Ghidra (SoftwareModeling + Utility), privata delle dipendenze Java/JVM. Progettata per l'integrazione con l'IA, le prestazioni e l'incorporabilità. Parte del progetto Enigma Engine.
Una reimplementazione in C++ del core analitico di Ghidra — niente JVM, niente Java, pieno controllo.
Ghidra è un potente framework di reverse engineering sviluppato dalla NSA in Java. Enigma è una riscrittura da zero del suo core analitico in C++ moderno, progettata per essere:
Questo non è l'output di un transpiler da Java a C++. Ogni file è tradotto e verificato manualmente, con copertura completa dei test.
Il codebase Java di Ghidra è maturo ma difficile da estendere in certe direzioni:
| Problema | La risposta di Enigma |
|---|
| Avvio JVM + overhead GC | C++ nativo, zero runtime |
| Difficile da incorporare in progetti non-Java | Libreria statica/dinamica |
| L'integrazione con l'IA richiede bridge JNI | API C++ diretta |
| Sistema di plugin monolitico | Componenti modulari e sostituibili |
Sviluppo attivo — la fondazione analitica è stabile e testata.
Il sistema di tipi core, il modello di indirizzi, le interfacce di memoria, il framework di impostazioni e le fondamenta Pcode/Sleigh sono implementati e superano i test. Il progetto segue un rigoroso ordine di traduzione bottom-up: nessun modulo viene aggiunto finché tutte le sue dipendenze non sono in atto e verificate.
Sistema di build: CMake + Ninja + CTest — zero warning, tutti i test passano.
Enigma rispecchia la struttura interna dei package di Ghidra, tradotta in namespace 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]
Decisioni di design chiave:
interface Java → abstract class C++ con metodi virtual puriArrayList / HashMap Java → std::vector / std::unordered_mapnull Java → std::optional<T>Address unificato da interfaccia + impl in un singolo value type (evita allocazione sull'heap)Enigma è un sostituto completo di Ghidra — ogni componente che esiste in Java avrà un equivalente in C++, inclusi la UI, il sistema di plugin, il disassembler, il decompilatore e il motore di scripting.
L'attuale focus è il core analitico — la fondazione su cui tutto il resto si costruisce. Una volta che sarà solido e testato, i livelli rimanenti (GUI, loader, plugin di analisi, scripting) seguiranno in ordine.
Nulla è escluso in modo permanente. Tutto è una questione di priorità.
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 — prende il nome dalla macchina cifrante della Seconda Guerra Mondiale, violata attraverso il reverse engineering. Sembrava appropriato.
Questo progetto è una traduzione di Ghidra, che è distribuito sotto la Apache License 2.0.
Enigma è distribuito sotto la stessa licenza. Vedi LICENSE per i dettagli.