
إعادة تنفيذ بلغة C++ للنواة التحليلية الخاصة بـ Ghidra دون الاعتماد على JVM، مما يوفر تحليلًا ثنائيًا قابلًا للتضمين، وأسس Pcode/Sleigh، وواجهات جاهزة للذكاء الاصطناعي لهندسة عكسية.
إعادة تنفيذ بلغة C++ للنواة التحليلية الخاصة بـ Ghidra (SoftwareModeling + Utility)، مجرّدة من تبعيات Java/JVM. مبنية للتكامل مع الذكاء الاصطناعي، والأداء، وقابلية التضمين. جزء من مشروع Enigma Engine.
إعادة تنفيذ بلغة C++ للنواة التحليلية الخاصة بـ Ghidra — بدون JVM، بدون Java، تحكّم كامل.
Ghidra هو إطار عمل قوي للهندسة العكسية بنته وكالة NSA بلغة Java. Enigma هي إعادة كتابة من الصفر لـنواتها التحليلية بلغة C++ الحديثة، مصمّمة لتكون:
هذا ليس ناتج مترجم من Java إلى C++. كل ملف مترجم يدويًا ومُتحقَّق منه، مع تغطية اختبارية كاملة.
قاعدة شيفرة Ghidra بلغة Java ناضجة لكن يصعب توسيعها في اتجاهات معينة:
| المشكلة | جواب Enigma |
|---|
| عبء بدء تشغيل JVM + GC | C++ أصلي، بدون وقت تشغيل |
| صعوبة التضمين في مشاريع غير Java | مكتبة ثابتة/مشتركة |
| تكامل الذكاء الاصطناعي يتطلب جسور JNI | واجهة C++ مباشرة |
| نظام إضافات أحادي | مكوّنات معيارية قابلة للاستبدال |
تطوير نشط — الأساس التحليلي مستقر ومُختبَر.
نظام الأنواع الأساسي، ونموذج العناوين، وواجهات الذاكرة، وإطار الإعدادات، وأساسيات 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 → C++ abstract class بدوال virtual خالصةArrayList / HashMap → std::vector / std::unordered_mapnull → std::optional<T>Address دُمجت من الواجهة + التنفيذ في نوع قيمة واحد (يتجنّب تخصيص الكومة)Enigma هو بديل كامل لـ Ghidra — كل مكوّن موجود في Java سيكون له مقابل بلغة C++، بما في ذلك واجهة المستخدم، ونظام الإضافات، والمفكّك، والمفكّك العكسي (decompiler)، ومحرّك البرمجة النصية.
التركيز الحالي على النواة التحليلية — الأساس الذي يُبنى عليه كل شيء آخر. بمجرد أن تصبح صلبة ومُختبَرة، ستتبع الطبقات المتبقية (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، المرخّص تحت Apache License 2.0.
يُوزَّع Enigma تحت نفس الترخيص. راجع LICENSE للتفاصيل.