
إضافة Binary Ninja لتحديد الكود المُبهم والهياكل البرمجية المثيرة للاهتمام الأخرى
المؤلف: تيم بلازيتكو
اكتشف تلقائيًا الكود المُعتم والهياكل البرمجية المثيرة للاهتمام الأخرى
كشف التعتيم هو إضافة لـ Binary Ninja لاكتشاف الكود المُعتم وهياكل برمجية مثيرة للاهتمام (مثل آلات الحالة) في الملفات الثنائية. بالنظر إلى ملف ثنائي، تُسهل الإضافة التحليل من خلال تحديد مواقع الكود التي قد تستحق نظرة فاحصة أثناء الهندسة العكسية.
بناءً على استدلالات متعددة، تحدد الإضافة الوظائف التي تحتوي على هياكل برمجية معقدة أو غير شائعة. قد تنفذ هذه الهياكل البرمجية
توفر المنشورات التالية مزيدًا من المعلومات حول الاستدلالات الأساسية وتوضح حالات استخدامها:
بعض حالات الاستخدام موجودة في أمثلة. علاوة على ذلك، يوضح حديث REcon "كشف الأسرار في الملفات الثنائية باستخدام استراتيجيات كشف الكود" بعض حالات الاستخدام. الشرائح متاحة هنا؛ والتسجيل متاح هنا.
يمكن تثبيت الأداة باستخدام مدير الإضافات لـ Binary Ninja.
بالنسبة للإصدار بدون واجهة، اتبع الخطوات التالية:
git clone https://github.com/mrphrazer/obfuscation_detection.git
cd obfuscation_detection
# install obfuscation_detection
pip install .
يمكن استخدام الإضافة في واجهة المستخدم وفي وضع بدون واجهة.
اختر الإضافات -> كشف التعتيم لتشغيل الاستدلالات الفردية، أو الإضافات -> كشف التعتيم -> الأدوات لتشغيل كشف الأدوات الفردية. الأمر الإضافات -> كشف التعتيم -> الكل يشغل جميع الاستدلالات وجميع الأدوات معًا.
يتم عرض النتائج في نافذة السجل:
بالنقر على عناوين الوظائف المُحددة، ينتقل Binary Ninja إلى الوظيفة المحددة.
لاستخدام الإضافة في وضع بدون واجهة، قم بتشغيل scripts/detect_obfuscation.py:
$ python3 scripts/detect_obfuscation.py <binary>
هذا يشغل جميع الاستدلالات وجميع الأدوات. للحصول على إخراج قابل للقراءة آليًا، استخدم --json:
$ python3 scripts/detect_obfuscation.py --json <binary>
يحتوي الحمولة JSON على جميع النتائج تحت مفتاح detections. كل كشف له id ثابت للأتمتة و name قابل للقراءة. كل نتيجة وظيفة موسومة تتضمن نوع الوسم ووصفًا يستخدمه إضافة Binary Ninja.
لتشغيل استدلال آلة الحالة فقط في وضع بدون واجهة، استخدم scripts/detect_state_machine.py:
$ python3 scripts/detect_state_machine.py [--json] <binary>
تنفذ الإضافة استدلالات كشف متعددة لاكتشاف هياكل برمجية مختلفة. في ما يلي، نصف الاستدلالات الفردية بإيجاز ونشرح استخدامها.
يحدد استدلال الكتلة الأساسية الكبيرة أعلى 10٪ من الوظائف التي تحتوي على أكبر متوسط لعدد التعليمات لكل كتلة أساسية. يسمح باكتشاف
يحدد استدلال الوظيفة المعقدة أعلى 10٪ من الوظائف ذات الرسوم البيانية الأكثر تعقيدًا لتدفق التحكم (بناءً على التعقيد الحلقيم). يسمح بتحديد
يستخدم استدلال آلة الحالة خصائص نظرية الرسوم البيانية لتحديد الوظائف التي تنفذ آلات الحالة. عادةً، يمكن تمثيل آلات الحالة هذه كتعليمات switch يتم توزيعها في حلقة. يسمح الاستدلال بتحديد
يقوم استدلال تسلسل التعليمات غير الشائع بتحليل إحصائي لتحديد أعلى 10٪ من الوظائف التي تنحرف أنماط كودها عن مرجع مُحسوب مسبقًا. بهذه الطريقة، يسمح الاستدلال بتحديد
يحدد استدلال التعليمات المتداخلة الوظائف ذات التعليمات غير المحاذية (بتات التعليمات مشتركة بين تعليمتين مختلفتين). يحدد الاستدلال
إذا تم استخدام الاستدلال في واجهة المستخدم لـ Binary Ninja، يتم أيضًا إبراز التعليمات المتداخلة في عرض الرسم البياني.
يحدد استدلال الوظيفة الأكثر استدعاءً أعلى 10٪ من الوظائف التي تحتوي على أكبر عدد من الاستدعاءات من وظائف مختلفة. بهذه الطريقة، يمكن للاستدلال تحديد
يحدد الاستدلال الوظائف التي تحتوي على عدد كبير من الحلقات. قد تنفذ هذه الأنواع من الوظائف
يساعد الاستدلال أيضًا في تحديد اختناقات الأداء المحتملة.
يحدد الاستدلال الوظائف ذات هياكل الحلقات النادرة والمعقدة التي تشير عادةً إلى
يحدد الاستدلال الوظائف التي تنفذ عملية XOR مع ثابت داخل حلقة. بهذه الطريقة، يمكن للاستدلال تحديد
يحدد الاستدلال الوظائف التي تحتوي تعبيراتها على أكثر من عملية حسابية وعملية منطقية واحدة في نفس الوقت. بهذه الطريقة، يمكن للاستدلال تحديد
يستخدم الاستدلال منهجية تجزئة السياق التكرارية لاكتشاف الهياكل متعددة الكتل المكررة داخل رسم تدفق التحكم لكل وظيفة. من خلال مقارنة توقيع opcode لكل كتلة مع توقيعات خلفائها، يحدد الاستدلال الرسوم البيانية الفرعية المكررة أو شبه المكررة في وظيفة واحدة. يساعد ذلك في تحديد:
تتضمن الإضافة أيضًا أدوات أضيق للوظائف ومناطق الكود المثيرة للاهتمام. تظل متاحة تحت القائمة الفرعية الأدوات؛ يقوم الأمر الكل بتشغيلها مع الاستدلالات الأوسع.
يحدد هذا المساعد الوظائف التي لا تحتوي على مستدعين معروفين. قد تكون هذه الوظائف
يحدد هذا المساعد الوظائف التي لا تستدعي وظائف أخرى. قد تكون هذه الأنواع من الوظائف، على سبيل المثال، وظائف
يحدد هذا المساعد الوظائف العودية — الوظائف التي تستدعي نفسها بشكل مباشر أو غير مباشر. قد تشير الوظائف العودية إلى:
يقيم هذا المساعد الإنتروبيا لكل قسم. الإنتروبيا هي مقياس إحصائي للعشوائية بقيم تتراوح بين 0 و 8. تشير الأقسام ذات الإنتروبيا القريبة من 8 إلى درجة عالية من العشوائية وقد تشير إلى:
يكتشف هذا المساعد تطبيقات خوارزمية RC4 المحتملة من خلال استخدام علامات استدلالية مرتبطة عادةً بخوارزمية جدولة المفاتيح (KSA) وخوارزمية التوليد العشوائي الزائف (PRGA) لـ RC4. يُستخدم RC4 على نطاق واسع في البرامج الضارة لأغراض مثل:
لمزيد من المعلومات، اتصل بـ @mr_phrazer.