وحدات مختلفة ل Ghidra للمساعدة في الهندسة الثابتة للكمبيوتر الشخصي. تم قبول هذا كمشروع CoreBoot لـ GSOC 2019.
مطلوب JDK 11 (أو الأحدث) و Ghidra 10.1 (أو الأحدث).
يتم استخدام نظام بناء Gradle Gradle القياسي في Ghidra. قم بتعيين متغير بيئة GHIDRA_INSTALL_DIR قبل البناء ، أو تعيينه كقرة غراد (مفيدة للبناء في IDE):
$ export GHIDRA_INSTALL_DIR= " /path/to/ghidra "
$ ./gradlew echo GHIDRA_INSTALL_DIR=/path/to/ghidra > gradle.properties سيتم إخراج الرمز البريدي للوحدة إلى dist/ . استخدم الملف> تثبيت الامتدادات وحدد Green Plus للتصفح إلى الامتداد. أعد تشغيل Ghidra عند المطالبة.
بالنسبة للوظائف المناسبة ، يجب بناء المكون الإضافي بنفس JRE المستخدم بواسطة تثبيت Ghidra الخاص بك. إذا كان لديك العديد من بيئات تشغيل Java مثبتة ، فحدد JRE الصحيح عن طريق تعيين متغير بيئة JAVA_HOME قبل الإنشاء.
أضف خيار PCI ROM إلى مشروع Ghidra. يمكن تحميل roms الخيار Legacy X86 مباشرة للتحليل. تأكد من ضبط التنسيق الثنائي على خيار X86 PCI ، واستيراد الثنائي.
خيار UEFI ROMs أو roms الخيار التي تحتوي على أكثر من صورة واحدة يجب استيرادها باستخدام محمل نظام الملفات. عند المطالبة بتحديد وضع استيراد ، حدد نظام الملفات . سيتم عرض الصور الموجودة في الخيار ROM ، ويمكن استيرادها للتحليل. سيتم التعامل مع صور Legacy X86 مع Loader ROM خيار X86 ، وسيتم التعامل مع صور UEFI بواسطة محمل PE32 (يتم دعم الضغط). يمكن عرض معلومات كل صورة عن طريق تحديد الحصول على معلومات في قائمة النقر بزر الماوس الأيمن.
أضف صورة برامج ثابتة مدعومة إلى مشروع Ghidra. يدعم محمل صورة البرامج الثابتة صور Intel مع واصف فلاش ، وصور CoreBoot مع تخطيط FMAP/CBFS ، وأحجام البرامج الثابتة UEFI. يمكن استخدام وضع استيراد نظام الملفات لعرض الملفات المضمنة داخل صورة البرامج الثابتة المحددة.
لاحظ أن بعض صور البرامج الثابتة UEFI قد تخزن أحجام البرامج الثابتة المتداخلة ضمن ملفات Freeform/Raw (أو أقسام Freform/Raw FFS). يمكن استيراد هذه الملفات كحجابات البرامج الثابتة عن طريق تحديد نظام الملفات المفتوحة في قائمة النقر بزر الماوس الأيمن للملف المجاني/RAW المحدد. إذا لم يتم العثور على وحدة تخزين متداخلة ، فسيتم عرض رسالة خطأ ( No file system provider for... ).
يتم تضمين البرنامج النصي المساعد في دليل Ghidra_scripts المكون الإضافي ، والذي ينبغي إضافته تلقائيًا إلى قائمة أدلة البرنامج النصي في Ghidra.
قم بتشغيل برنامج UEFI Helper Script عن طريق تحديد uefihelper.java في نافذة Script Manager (تم الوصول إليها من Window -> Script Manager ).
لتعديل مكتبة نوع بيانات UEFI ، قم بتعديل قالب PRF في data/gen_prf.sh حسب الضرورة وإنشاء ملفات PRF جديدة. افتح ملف PRF الذي تم إنشاؤه في ملف -> Parse C Source . قم بإنشاء مكتبة نوع البيانات المحدثة عن طريق تحديد Parse إلى File .... الكتابة فوق مكتبات نوع البيانات الأصلية في data وإعادة بناء البرنامج المساعد.
هذه بعض المشاريع المثيرة للاهتمام المتعلقة بعكس UEFI:
Apache 2.0 ، مع بعض الاستثناءات:
src/efidecompress/c/efidecompress.c : BSD src/efidecompress/c/efidecompress.c هو نسخة معدلة خفيفة من Decompress.C من UEFI-Firmware-Parser (والتي يتم اشتقاقها من الأصل في BASETOOLS EDK2).
lib/xz-1.8.jar مأخوذ من XZ لمشروع Java.
يستخدم src/main/java/firmware/ifd IFD المحلل من uefitool كمرجع.
قاعدة بيانات GUID في data/guids.csv مأخوذة من Uefitool.
تم إنشاء مكتبات نوع البيانات UEFI في data/uefi_*.gdt باستخدام data/gen_prf.sh ، والذي يعتمد جزئيًا على تعريف محلل UEFI من طلب سحب Ghidra بواسطة WRFFRZ. تستخدم مكتبات نوع البيانات رؤوس من EDK2 MDEPKG.
تم استخدام Ghidravitaloader بواسطة Xerpi كمرجع لبعض أجزاء البرنامج النصي المساعد UEFI.