
C++-Neuimplementierung von Gidras Analyse-Kern ohne JVM-Abhängigkeiten, die einbettbare Binäranalyse, Pcode/Sleigh-Grundlagen und KI-fähige Schnittstellen für Reverse Engineering bereitstellt.
C++-Neuimplementierung von Gidras analytischem Kern (SoftwareModeling + Utility), befreit von Java/JVM-Abhängigkeiten. Entwickelt für KI-Integration, Performance und Einbettbarkeit. Teil des Enigma-Engine-Projekts.
Eine C++-Neuimplementierung von Gidras analytischem Kern — keine JVM, kein Java, volle Kontrolle.
Ghidra ist ein leistungsstarkes Reverse-Engineering-Framework, das von der NSA in Java entwickelt wurde. Enigma ist eine von Grund auf neu geschriebene Implementierung seines analytischen Kerns in modernem C++, konzipiert als:
Dies ist keine Ausgabe eines Java-zu-C++-Transpilers. Jede Datei ist manuell übersetzt und verifiziert, mit vollständiger Testabdeckung.
Gidras Java-Codebasis ist ausgereift, aber in bestimmten Richtungen schwer zu erweitern:
| Problem | Enigmas Antwort |
|---|
| JVM-Start + GC-Overhead | Natives C++, keine Laufzeitumgebung |
| Schwer in Nicht-Java-Projekte einzubetten | Statische/Shared Library |
| KI-Integration erfordert JNI-Bridges | Direkte C++-API |
| Monolithisches Plugin-System | Modulare, austauschbare Komponenten |
Aktive Entwicklung — das analytische Fundament ist stabil und getestet.
Das Kern-Typsystem, das Adressmodell, Speicherschnittstellen, das Einstellungs-Framework sowie die Pcode/Sleigh-Grundlagen sind implementiert und bestehen die Tests. Das Projekt folgt einer strikten Bottom-up-Übersetzungsreihenfolge: Kein Modul wird hinzugefügt, bevor alle seine Abhängigkeiten vorhanden und verifiziert sind.
Build-System: CMake + Ninja + CTest — keine Warnungen, alle Tests bestehen.
Enigma spiegelt Gidras interne Paketstruktur wider, übersetzt in C++-Namespaces:
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]
Zentrale Designentscheidungen:
interface → C++ abstract class mit reinen virtual-MethodenArrayList / HashMap → std::vector / std::unordered_mapnull-Rückgaben → std::optional<T>Address aus Interface + Impl zu einem einzigen Werttyp zusammengeführt (vermeidet Heap-Allokation)Enigma ist ein vollständiger Ersatz für Ghidra — jede Komponente, die in Java existiert, wird ein C++-Äquivalent erhalten, einschließlich UI, Plugin-System, Disassembler, Decompiler und Skript-Engine.
Der aktuelle Fokus liegt auf dem analytischen Kern — dem Fundament, auf dem alles andere aufbaut. Sobald dieser solide und getestet ist, folgen die übrigen Schichten (GUI, Loader, Analyse-Plugins, Skripting) in der Reihenfolge.
Nichts ist dauerhaft ausgeschlossen. Alles ist eine Frage der Priorität.
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-Laden)Enigma — benannt nach der Chiffriermaschine aus dem Zweiten Weltkrieg, die durch Reverse Engineering geknackt wurde. Es fühlte sich richtig an.
Dieses Projekt ist eine Übersetzung von Ghidra, das unter der Apache License 2.0 lizenziert ist.
Enigma wird unter derselben Lizenz vertrieben. Siehe LICENSE für Details.