ملحق مصدر ملف الكائن لـ Ghidra
يتيح امتداد Ghidra تصدير أجزاء من البرنامج كملفات كائنية. تحتوي ملفات الكائنات هذه على بيانات وصفية صالحة (رموز، جداول نقل...) وبالتالي يمكن إعادة استخدامها مباشرة بواسطة سلسلة أدوات لمزيد من المعالجة.
تتضمن حالات الاستخدام ما يلي:
- تصحيح ثنائي متقدم، من خلال الاستفادة من الرابط لإصلاح الأجزاء الأصلية والمعدلة معًا بدلاً من القيام بهذا العمل يدويًا؛
- منافذ البرامج، عن طريق عزل التعليمات البرمجية المستقلة عن النظام من البرنامج واستبدال الباقي؛
- تحويل البرامج أو ملفات الكائنات من تنسيق ملف إلى آخر؛
- إنشاء المكتبات، من خلال استخراج أجزاء من البرنامج وإعادة استخدامها في سياق آخر؛
- مشاريع التفكيك، عن طريق تقسيم البرنامج إلى ملفات كائنات متعددة وإعادة تنفيذ أسلوب سفينة ثيسيوس ؛
- …
مصفوفة بنيات مجموعة التعليمات المدعومة وملفات الكائنات:
البناء (CLI)
- استنساخ هذا المستودع؛
- قم بتعريف متغير البيئة
GHIDRA_INSTALL_DIR
للإشارة إلى دليل تثبيت Ghidra الخاص بك؛ - قم بتشغيل
gradle buildExtension
.
سيتم إنشاء أرشيف ملحق Ghidra داخل الدليل dist/
.
تثبيت
- قم بتنزيل الامتداد من صفحة الإصدارات أو أنشئه محليًا؛
- قم بتثبيت الامتداد في مثيل Ghidra الخاص بك باستخدام
File > Install Extensions…
; - قم بتمكين المكوّن
RelocationTableSynthesizedPlugin
باستخدام File > Configure
داخل نافذة CodeBrowser.
الاستخدام
- حدد مجموعة من العناوين في عرض القائمة؛
- قم بتشغيل محلل
Relocation table synthesizer
(متوفر في وضع اللقطة الواحدة)؛ - قم باستدعاء مصدر ملف كائن قابل للنقل باستخدام
File > Export Program…
يمكن عرض عمليات النقل المُعاد بناؤها باستخدام Window > Relocation table (synthesized)
.
- ️ يعتمد محلل مركب جدول النقل على قاعدة بيانات غيدرا مملوءة بالكامل (مع الرموز وأنواع البيانات والمراجع المعلنة بشكل صحيح) لكي يعمل. قد تؤدي المعلومات غير الصحيحة أو المفقودة إلى عمليات نقل معطلة أو غير مكتشفة أثناء التحليل.
- ️ يعتمد مصدرو ملفات الكائنات على نتائج محلل مركب جدول النقل حتى يعمل. عندما تكون في شك، قم بتشغيل هذا المحلل مباشرة قبل تصدير ملف كائن للتأكد من أن محتويات جدول النقل محدثة مع الحالة الحالية للبرنامج.
كيف يعمل؟
تتكون ملفات الكائنات من ثلاثة أجزاء:
- بايتات القسم القابلة للنقل؛
- جدول الرموز ;
- جدول الترحيل.
عندما يتم استدعاء رابط لإنشاء ملف قابل للتنفيذ من مجموعة من ملفات الكائنات، فإنه سوف:
- وضع أقسامها في الذاكرة ;
- حساب عناوين الرموز الموجودة في مساحة العنوان الافتراضية ;
- قم بتطبيق عمليات النقل بناءً على العناوين النهائية للرموز على بايتات القسم.
عادةً يتم تجاهل جدول النقل بعد هذه العملية، بالإضافة إلى جدول الرموز إذا لم يتم الاحتفاظ برموز تصحيح الأخطاء، مما يترك فقط وحدات بايت القسم غير القابلة للنقل. ومع ذلك، من خلال التحليل الدقيق، يمكن إعادة إنشاء هذه البيانات، مما يسمح لنا بعد ذلك بفصل البرنامج بشكل فعال مرة أخرى إلى ملفات الكائنات.