
أداة استكشاف التتبعات لمهندسي الهندسة العكسية
Tenet هو إضافة لـ IDA Pro لاستكشاف تتبعات التنفيذ. الهدف من هذه الإضافة هو توفير أدوات تحكم أكثر طبيعية وبشرية للتنقل عبر تتبعات التنفيذ مقابل ثنائي معين. أساس هذا العمل ينبع من الرغبة في البحث عن طرق جديدة أو مبتكرة لفحص واستخلاص أنماط التنفيذ المعقدة في البرمجيات.
لمزيد من السياق حول هذا المشروع، يرجى قراءة منشور المدونة حول إصداره الأولي.
شكر خاص لـ QIRA / geohot وآخرين للإلهام.
Tenet هو إضافة Python 3 متعددة المنصات (ويندوز، ماك، لينكس). لا يتطلب أي تبعيات خارجية، مما يجعل الكود محمولاً وسهل التثبيت.
من وحدة تحكم بايثون في المفكك، قم بتشغيل الأمر التالي للعثور على دليل الإضافات:
import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")انسخ محتويات مجلد /plugins/ من هذا المستودع إلى الدليل المذكور.
أعد تشغيل المفكك.
هذه الإضافة مدعومة فقط لـ IDA 7.5 وما أحدث.
بعد التثبيت الصحيح، سيكون هناك إدخال قائمة جديد متاح في المفكك. يمكن استخدامه لتحميل تتبعات التنفيذ المجمعة خارجيًا إلى Tenet.
نظرًا لأن هذا هو الإصدار الأولي، فإن Tenet يقبل فقط تتبعات نصية بسيطة قابلة للقراءة البشرية. يرجى الرجوع إلى دليل التتبع في هذا المستودع لمزيد من المعلومات حول تنسيق التتبع والقيود وأدوات التتبع المرجعية.
أثناء استخدام Tenet، ستقوم الإضافة 'برسم' مسارات للإشارة إلى تدفق التنفيذ للأمام (أزرق) والخلف (أحمر) من موقعك الحالي في تتبع التنفيذ النشط.
للتنقل خطوة للأمام أو للخلف عبر الزمن، ما عليك سوى التمرير أثناء التمرير فوق الخط الزمني على الجانب الأيمن من المفكك. لتجاوز step over استدعاءات الدوال، اضغط مع الاستمرار على SHIFT أثناء التمرير.
سيتم إرساء الخط الزمني للتتبع على الجانب الأيمن من المفكك. تُستخدم هذه الأداة لتصور أنواع مختلفة من الأحداث على طول الخط الزمني للتتبع وأداء التنقل الأساسي كما هو موضح أعلاه.
من خلال النقر والسحب عبر الخط الزمني، يمكن التكبير على قسم معين من تتبع التنفيذ. يمكن تكرار هذا الإجراء أي عدد من المرات للوصول إلى مستوى التفاصيل المطلوب.
النقر المزدوج على مؤشر التعليمات في نافذة السجلات سوف يبرزه باللون الأحمر، مما يكشف جميع المواقع التي تم فيها تنفيذ التعليمات عبر الخط الزمني للتتبع.
للقفز بين عمليات التنفيذ، قم بالتمرير لأعلى أو لأسفل أثناء التمرير فوق مؤشر التعليمات المظلل.
بالإضافة إلى ذلك، يمكنك النقر بزر الماوس الأيمن في قائمة التفكيك واختيار أحد إدخالات القائمة المستندة إلى التنقل للبحث بسرعة عن تنفيذ تعليمات معينة.
يمكن أيضًا استخدام مفتاح الاختصار الأصلي F2 في IDA لتعيين نقاط توقف على تعليمات عشوائية.
من خلال النقر المزدوج على بايت في أي من عروض المكدس أو الذاكرة، سترى فورًا جميع القراءات/الكتابات إلى هذا العنوان مصورة عبر الخط الزمني للتتبع. يشير اللون الأصفر إلى قراءة من الذاكرة، ويشير اللون الأزرق إلى كتابة إلى الذاكرة.
يمكن التنقل بين نقاط توقف الذاكرة باستخدام نفس التقنية الموصوفة لنقاط توقف التنفيذ. انقر نقرًا مزدوجًا على بايت، وقم بالتمرير أثناء التمرير فوق الـ بايت المحدد للبحث في التتبع حول كل وصول إليه.
النقر بزر الماوس الأيمن على بايت مهم سيعطيك خيارات للبحث بين قراءة الذاكرة / كتابتها / الوصول إليها إذا كان لديك إجراء تنقل محدد في ذهنك.
للتنقل في عرض الذاكرة إلى عنوان عشوائي، انقر على عرض الذاكرة واضغط G لإدخال عنوان أو رمز قاعدة بيانات لتوجيه العرض إليه.
من الممكن تعيين نقطة توقف ذاكرة عبر منطقة من الذاكرة عن طريق تمييز كتلة من الذاكرة، والنقر المزدوج عليها لتعيين نقطة توقف وصول.
كما هو الحال مع نقاط توقف الذاكرة العادية، يمكن استخدام التمرير فوق المنطقة والتمرير للتنقل بين الوصولات التي تم إجراؤها إلى المنطقة المحددة من الذاكرة.
في الهندسة العكسية، من الشائع جدًا مواجهة مواقف تسأل فيها نفسك "أي تعليمات قامت بتعيين هذا السجل إلى قيمته الحالية؟"
باستخدام Tenet، يمكنك البحث للخلف عن تلك التعليمات بنقرة واحدة.
البحث للخلف هو بالتأكيد الاتجاه الأكثر شيوعًا للتنقل عبر تغييرات السجلات... ولكن من أجل المرونة، يمكنك أيضًا البحث للأمام عن تعيين السجل التالي باستخدام السهم الأزرق على يمين السجل.
يتم توفير 'واجهة' بسيطة للتنقل إلى طوابق زمنية محددة في التتبع. لصق (أو كتابة...) طابع زمني في الواجهة مع أو بدون فواصل سيكون كافيًا.
باستخدام علامة تعجب، يمكنك أيضًا البحث عن 'نسبة مئوية' محددة في التتبع. إدخال !100 سيبحث عن التعليمات الأخيرة في التتبع، بينما !50 سيبحث تقريبًا في منتصف التتبع. !last سيبحث عن آخر تعليمات قابلة للتصفح يمكن عرضها في المفكك.
يأتي Tenet مع سمة افتراضيتين - سمة 'فاتحة' وأخرى 'داكنة'. اعتمادًا على الألوان المستخدمة حاليًا من قبل المفكك الخاص بك، سيحاول Tenet اختيار السمة التي تبدو الأكثر ملاءمة.
يتم تخزين ملفات السمات كـ JSON بسيطة على القرص وهي قابلة للتخصيص بشكل كبير. إذا لم تكن راضيًا عن السمات أو الألوان الافتراضية، يمكنك إنشاء سماتك الخاصة وإسقاطها ببساطة في دليل سمات المستخدم.
سيتذكر Tenet تفضيلات السمة الخاصة بك للأحمال والاستخدامات المستقبلية.
إذا سمح الوقت والدافع والتمويل، فقد يشمل العمل المستقبلي:
أرحب بالمساهمات الخارجية والمشكلات وطلبات الميزات. يرجى تقديم أي طلبات سحب إلى فرع develop من هذا المستودع إذا كنت ترغب في أن يتم النظر فيها لإصدار مستقبلي.