Ghidra
إطار عمل هندسة عكسية متكامل من تطوير وكالة الأمن القومي (NSA)، يوفر أدوات تحليل وفك شيفرة برمجية (Decompiler) قوية.
جيدرا (Ghidra) — الدليل الشامل للهندسة العكسية
تُعد منصة Ghidra أداة مفتوحة المصدر للهندسة العكسية للبرمجيات (SRE)، أطلقتها وكالة الأمن القومي الأمريكية (NSA). توفر الأداة محللاً للأكواد (Disassembler) ومسترجعاً للكود المصدري (Decompiler) يدعم معالجات x86/x64 و ARM و MIPS و RISC-V و PowerPC و SPARC وغيرها الكثير، مع واجهة رسومية تعتمد على Java. وتعتبر البديل المجاني الأبرز لبرنامج IDA Pro.
التثبيت (Install)
أو عبر أمر brew install ghidra لمستخدمي نظام macOS.
التشغيل الأول
- File ← New Project ← اختيار Non-Shared (لمستخدم واحد).
- سحب الملف الثنائي (Binary) إلى نافذة المشروع ← استيراد (Import) ← استخدام الإعدادات الافتراضية.
- النقر المزدوج على الملف ← يفتح واجهة CodeBrowser.
- الموافقة على التحليل التلقائي (Auto-analysis) ← اضغط Analyze.
تخطيط CodeBrowser
| اللوحة | الغرض |
|---|---|
| Listing | عرض كود التجميع (Disassembly) |
| Decompiler | إعادة بناء الكود بلغة شبيهة بـ C (جهة اليمين) |
| Functions | شجرة الدوال (Functions) |
| Symbol Tree | الواردات (Imports)، الصادرات (Exports)، والعلامات (Labels) |
| Defined Strings | جميع النصوص المستخرجة من الملف |
| Bookmarks | الإشارات المرجعية للمستخدم |
| Bytes | العرض الست عشري (Hex view) |
| Memory Map | أقسام الذاكرة وصلاحياتها |
| Comments | الملاحظات والتعليقات البرمجية |
اختصارات لوحة المفاتيح الأساسية
| المفتاح | الإجراء |
|---|---|
G | الانتقال إلى عنوان أو رمز محدد |
L | إعادة تسمية علامة أو متغير |
; | إضافة تعليق عند عنوان معين |
T | تحديد نوع البيانات (Data type) |
F | تحديث قسري لمسترجع الكود (Decompiler) |
H | البحث عن المراجع (References) |
Ctrl+Shift+G | انتقال متقدم لعنوان |
Ctrl+Shift+E | تصدير الجزء المحدد |
Ctrl+B | إضافة إشارة مرجعية |
Ctrl+M | خريطة الذاكرة |
Ctrl+Alt+S | مراجع الرموز (Symbol references) |
Ctrl+Shift+F | الرسم البياني لاستدعاءات الدوال |
Ctrl+E | تحرير توقيع الدالة (Signature) |
S | تحديد عضو في هيكل بيانات (Struct member) |
سير العمل على عينة برمجية خبيثة (Malware)
- تحديد الواردات (Imports) ← ابحث عن وظائف مثل
WinHttp*وCreateRemoteThreadوVirtualAllocExوWriteProcessMemory— وهي مؤشرات أساسية لعمل أدوات الوصول عن بُعد (RAT). - النصوص (Strings) ← ابحث عن نصوص مثيرة للاهتمام مثل (
http://،Mozilla/5.0، مسارات الملفات) وأضفها كتعليقات. - ابحث عن نقطة الدخول
mainأوWinMainأوDllMainوابدأ التحليل منها للخارج. - أعد تسمية الدوال فور اتضاح سلوكها (استخدم
Lللتسمية). - طبق أنواع الهياكل البرمجية (Structs) عند ملاحظة إزاحات (Offsets) ثابتة.
- استخدم لوحة Decompiler كخريطة أساسية، ولوحة Listing للتحقق الدقيق.
البرمجيات النصية المضمنة (Script Manager)
| النص البرمجي | الغرض |
|---|---|
ImportSymbolsScript.java | تحميل الرموز بكميات كبيرة من ملف CSV |
FindSymbolsScript.java | البحث عن أنماط (Patterns) معروفة |
FunctionGraph | رسم بياني مرئي للاستدعاءات |
ExportToDocumentation | تصدير النتائج بتنسيق Markdown أو HTML |
يمكنك كتابة سكربتات بلغة Java أو Python (عبر Jython / Ghidrathon) من خلال: Window ← Script Manager ← New Script.
# مثال: استخراج كافة الدوال التي تزيد عن 100 تعليمة إلى ملف
fm = currentProgram.getFunctionManager()
with open("/tmp/fns.txt", "w") as f:
for fn in fm.getFunctions(True):
if fn.getBody().getNumAddresses() > 100:
f.write(f"{fn.getName()}\t{fn.getEntryPoint()}\n")
الإضافات المفيدة (Extensions)
- Ghidrathon: لدعم لغة Python 3 بدلاً من Jython.
- GhidraEmu: لمحاكاة تشغيل الدوال.
- GhidraPAL / pcode-tools: للعمل مع لغة Ghidra الوسيطة (IR).
- ret-sync: لمزامنة مؤشر Ghidra مع برامج التصحيح (مثل x64dbg أو gdb).
وضع الخادم / المشاركة (Shared mode)
يسمح هذا الوضع لمستخدمين متعددين بالعمل على نفس الملف الثنائي في مشروع مشترك، مع إمكانية قفل الدوال أثناء العمل عليها.
المشكلات الشائعة وحلولها
| العرض | الحل |
|---|---|
| المسترجع (Decompiler) لا يظهر شيئاً | خطأ في اتفاقية الاستدعاء (Calling convention) أو لم يتم التعرف على الدالة — استخدم D لتحديد بداية الدالة |
عرض Hex يظهر علامات استفهام ?? | القسم (Section) غير محمل — اذهب لـ Memory Map وأضف شريحة (Segment) |
| تعليق التحليل التلقائي | وجود استدعاءات غير مباشرة كثيرة — عطل بعض المحللات وأعد التشغيل |
| تعطل المشروع | استرجع من النسخ الاحتياطية في مسار ~/ghidra_*_USER/_temp |
| بطء مع الملفات الكبيرة | زد مساحة ذاكرة JVM عبر تعديل -Xmx8G في ملف support/launch.properties |
| رموز غير محلولة | طبق أرشيف أنواع البيانات: Window ← Data Type Manager ← Apply Function Data Types |
منظور المدافع ومحلل الهندسة العكسية
تعد Ghidra سلاحاً أساسياً للمدافعين. بمجرد الحصول على ملف مشبوه (من KAPE أو EDR أو MalwareBazaar)، قم بفتحه لـ:
- تتبع دالة
mainلفهم السلوك. - تحديد نصوص خوادم التحكم (C2) والمفاتيح المشفرة برمجياً.
- كتابة قواعد Yara لتسلسلات العمليات (Opcodes) الفريدة.
- توثيق مؤشرات الاختراق (IOCs) لمشاركتها مع فرق الاستجابة.
أدوات ذات صلة
| الأداة | التخصص |
|---|---|
| IDA Pro | تجاري؛ يتفوق في بعض حالات استرجاع الكود وتكامل المصحح (Debugger) |
| Binary Ninja | أحدث، يدعم البرمجة النصية بسهولة، منحنى تعلم أقصر |
| radare2 / Cutter | أدوات مفتوحة المصدر (واجهة نصية ورسومية)؛ أخف وزناً |
| objdump / Capstone | أدوات سطر أوامر لغرض محدد |
| Hopper | مخصص لنظام macOS |