
Ghidraの解析コアをJVM依存なしでC++で再実装し、組み込み可能なバイナリ解析、Pcode/Sleighの基盤、リバースエンジニアリング向けのAI対応インターフェースを提供します。
Ghidraの解析コア(SoftwareModeling + Utility)をJava/JVM依存なしで再実装したC++版。AI統合、パフォーマンス、組み込みやすさを目的として構築。Enigma Engineプロジェクトの一部。
Ghidraの解析コアをC++で再実装 — JVMなし、Javaなし、完全な制御。
Ghidraは、NSAがJavaで構築した強力なリバースエンジニアリングフレームワークです。 Enigmaはその解析コアをモダンC++でゼロから書き直したもので、以下のように設計されています:
これはJavaからC++へのトランスパイラ出力ではありません。すべてのファイルは手動で翻訳・検証され、完全なテストカバレッジを備えています。
GhidraのJavaコードベースは成熟していますが、特定の方向への拡張が困難です:
| 問題 | Enigmaの回答 |
|---|
| JVM起動 + GCオーバーヘッド | ネイティブC++、ランタイムゼロ |
| 非Javaプロジェクトへの組み込みが困難 | 静的/共有ライブラリ |
| AI統合に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 → 純粋なvirtualメソッドを持つC++のabstract classArrayList / 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の翻訳であり、 GhidraはApache License 2.0の下でライセンスされています。
Enigmaは同じライセンスの下で配布されます。 詳細はLICENSEを参照してください。