
مستكشف التغطية لمهندسي الهندسة العكسية
Lighthouse هو مستكشف تغطية كود قوي لـ IDA Pro و Binary Ninja، يوفر لباحثي البرمجيات أدوات تحكم تفاعلية فريدة لدراسة خرائط التنفيذ للتطبيقات الأصلية دون الحاجة إلى رموز أو مصدر.
حصل هذا المشروع على المركز الثاني في مسابقة الإضافات لعام 2017 الخاصة بـ IDA، وتم لاحقًا ترشيحه في جوائز Pwnie لعام 2021 لمساهماته في صناعة أبحاث الأمن.
شكر خاص لـ @0vercl0k على الإلهام.
Lighthouse هو إضافة Python 2/3 متعددة المنصات (Windows، macOS، Linux). لا يتطلب أي تبعيات خارجية، مما يجعل الكود محمولًا وسهل التثبيت.
استخدم التعليمات أدناه وفقًا للمفكك الخاص بك.
import idaapi, os; print(os.path.join(idaapi.get_user_idadir(), "plugins"))/plugins/ في هذا المستودع إلى الدليل المذكور.يمكن تثبيت Lighthouse من خلال مدير الإضافات في Binary Ninja، مع دعم الإصدار 3.5 وما أحدث.
Edit -> Preferences -> Manage PluginsEnable في أسفل اليمين.بمجرد التثبيت بشكل صحيح، ستتوفر بعض إدخالات القوائم الجديدة في المفكك. هذه هي نقاط الدخول للمستخدم لتحميل بيانات التغطية والبدء في استخدام Lighthouse.
Lighthouse قادر على تحميل عدة 'أنواع' مختلفة من بيانات التغطية. لتوليد بيانات تغطية يمكن تحميلها في Lighthouse، يرجى الاطلاع على README في دليل coverage في هذا المستودع.
أثناء استخدام Lighthouse، سيقوم 'برسم' بيانات التغطية النشطة عبر جميع عارضات الكود المتاحة في المفكك. على وجه التحديد، سيُطبَّق هذا على نافذة التفكيك الخطي، والرسم البياني، والمفكك العكسي.
في Binary Ninja، يتم دعم عروض التفكيك الخطي والرسم البياني و IL فقط. سيتم إضافة دعم رسم مخرجات المفكك العكسي في Binary Ninja إلى Lighthouse في المستقبل القريب عندما تستقر الميزة.
نظرة عامة على التغطية هي أداة قابلة للإرساء ستُفتح بمجرد تحميل التغطية في Lighthouse.
توفر هذه الأداة التفاعلية عرضًا على مستوى الدوال لبيانات التغطية المحمّلة. كما تحتوي على عدد من الأدوات لإدارة البيانات المحمّلة ودفع أشكال أكثر تقدمًا من تحليل التغطية.
النقر بزر الفأرة الأيمن على الجدول في نظرة عامة على التغطية سيُنتج قائمة سياق تحتوي على بعض الخدمات الأساسية لاستخراج المعلومات من الجدول، أو التلاعب بقاعدة البيانات كجزء من عملية الهندسة العكسية.
إذا كانت هناك أي إجراءات أخرى تعتقد أنها قد تكون مفيدة لإضافتها إلى قائمة السياق هذه، يرجى تقديم طلب وسيتم النظر فيها لإصدار مستقبلي من Lighthouse.
يمكن تحديد أو حذف التغطية المحمّلة والتركيبات التي أنشأها المستخدم من خلال صندوق التغطية المنسدل.
يمكن لـ Lighthouse توليد تقارير تغطية HTML أساسية. يمكن رؤية تقرير نموذجي هنا.
في أسفل نافذة نظرة عامة على التغطية توجد صدفة التغطية. يمكن استخدام هذه الصدفة لتنفيذ عمليات قائمة على المنطق تجمع أو تتلاعب بمجموعات التغطية المحمّلة.
هذه الميزة مفيدة للغاية في استكشاف علاقات تنفيذ البرنامج عبر عمليات تشغيل متعددة. بعبارة أخرى، يمكن استخدام الصدفة لـ 'مقارنة' التنفيذ بين مجموعات التغطية واستخراج معنى أعمق يكون مخفيًا بخلاف ذلك داخل ضوضاء أجزائها الفردية.
يتم تحقيق تركيب التغطية، أو التركيب كما هو موضح أعلاه، من خلال قواعد تعبير بسيطة ورموز تغطية 'مختصرة' (A إلى Z) على صدفة التركيب.
|, &, ^, -A, B, C, ..., Z, *(...)A والتغطية B:A & B
A:A - B
A أو B، ولكن ليس C:(A | B) - C
يمكن أن تكون التعبيرات بأي طول أو تعقيد، ولكن قد يحدث تقييم التركيب من اليمين إلى اليسار. لذا يُنصح باستخدام الأقواس للتعبيرات التي قد تكون غامضة.
بالإضافة إلى ذلك، هناك وضع 'الصدفة الساخنة' الذي يقيّم ويخزّن مؤقتًا تركيبات المستخدم بشكل غير متزامن في الوقت الفعلي.
تعمل الصدفة الساخنة كبوابة طبيعية للاستكشاف غير الموجّه للعلاقات المركّبة.
باستخدام الصدفة، يمكنك البحث وتصفية الدوال المدرجة في جدول التغطية عن طريق إضافة بادئة / إلى الاستعلام.
سيعرض رأس الصدفة نسبة تغطية محدّثة محسوبة فقط من الدوال المتبقية. هذا مفيد عند تحليل التغطية لعائلات دوال محددة.