
إضافة Binary Ninja لتحليل الشيفرة المشوّشة وتبسيطها
المؤلفون: Tim Blazytko و Nicolò Altamura
تحليل وتبسيط الشيفرة المشوَّشة
تحليل التشويش هو إضافة لـ Binary Ninja تُخفّف عناء التعامل مع الملفات الثنائية المحمية بشكل مكثّف. وهي تجمع مجموعة من الأدوات المساعدة المركّزة التي تتيح لك
يمكن العثور على بعض حالات الاستخدام النموذجية في examples. علاوةً على ذلك، يعرض حديث REcon بعنوان "Breaking Mixed Boolean-Arithmetic Obfuscation in Real-World Applications" بعض حالات الاستخدام. يمكن العثور على الشرائح هنا. تُكمّل هذه الإضافة أداة Obfuscation Detection: فبمجرد الإشارة إلى الدوال المشبوهة، تساعدك Obfuscation Analysis على تنظيفها وفهمها. وستُضاف المزيد من الأدوات المساعدة بمرور الوقت.
يمكن تثبيت الأداة باستخدام مدير الإضافات الخاص بـ Binary Ninja.
للتثبيت اليدوي، اتبع هذه الخطوات في مجلد إضافات Binary Ninja:
git clone https://github.com/mrphrazer/obfuscation_analysis.git
cd obfuscation_analysis
# optionally: use a virtual environment
python -m venv obfana-env
source obfana-env/bin/activate
# install requirements
pip install -r requirements.txt
إذا كنت تستخدم بيئة افتراضية، فستحتاج إلى تعيين مسار site-packages يدويًا في إعدادات Binary Ninja.
تتوفر الإضافة من القائمة العلوية في Binary Ninja ضمن Plugins -> Obfuscation Analysis.
لتبسيط التشويش الحسابي، حدّد أولًا تعبير HLIL الذي تريد تبسيطه في عرض المُفكِّك. بعد ذلك، اختر Plugins -> Obfuscation Analysis -> MBA Simplification -> Slice & Simplify. تحلّ الإضافة الحساب الكامل، وتمرّره عبر msynth، وتُدرج النتيجة المبسّطة كتعليق على السطر نفسه. يُظهر العرض المتحرك القصير أدناه سير العمل بالكامل:
يعتمد تبسيط MBA على msynth. افتراضيًا، تستخدم الإضافة oracle التبسيط الافتراضي في msynth، والذي يأتي مع الإضافة ومُهيّأ مسبقًا. إذا أردت استخدام oracle أكبر أو مخصّص، فعيّن obfuscation_analysis.mba_oracle_path يدويًا أو تصفّح إلى الملف في نافذة Settings الخاصة بـ Binary Ninja.
إذا حدث خطأ ما، تكتب الإضافة رسالة موجزة على مستوى المستخدم في لوحة Log؛ بدّل عرض السجل إلى Debug لرؤية التتبّع الكامل.
تأتي الإضافة بأدوات مساعدة مركّزة تستهدف العقبات الشائعة التي تواجهها عند عكس هندسة الملفات الثنائية المحمية، وكل منها قابل للتشغيل كمهمة في الخلفية من واجهة المستخدم أو من نصوص برمجية بدون واجهة. فيما يلي الميزات المتاحة حاليًا.
الدوال المعطوبة هي الدوال التي يُظهر تفكيكها آثارًا غير معرّفة—كتل أساسية فارغة، وتعليمات غير صالحة أو متداخلة، وما شابه ذلك. تتجوّل هذه الأداة المساعدة في كامل BinaryView، وتُشير إلى الدوال التي تحمل هذه الأعراض، وتُدرجها بحيث يستطيع المحلّل فحص الشيفرة التي أُسيء تحليلها أو شُوّشت عمدًا بسرعة. يؤدي إجراء الإزالة الاختياري إلى محو كل دالة مُشار إليها وفرض تحليل جديد، ما ينظّف قائمة الدوال. وهو مفيد بشكل خاص في تحديد
الحساب المختلط المنطقي (MBA) هو تقنية تشويش تدفن حسابات بسيطة في سلاسل طويلة من العمليات الحسابية والمنطقية. تُبسّط هذه الميزة مثل هذه التعبيرات في المُفكِّك. عند اختيارك لتعليمة HLIL، تجمع الإضافة سلسلة حسابها الكاملة عبر شريحة خلفية SSA (SSA backward slice) مقيّدة بالكتلة الأساسية الحالية، وتترجم تلك الشريحة إلى Miasm IR، وتُمرّرها إلى msynth، ثم تُضيف النتيجة المبسّطة كتعليق في عرض المُفكِّك. تتيح لك هذه الميزة
بالنسبة للدالة المحدّدة حاليًا، تُضمّن هذه الأداة المساعدة كل دالة مستدعاة (callee) بشكل تكراري داخل عرض المُفكِّك، ما يمنح Binary Ninja لغة وسيطة (IL) واحدة مكتفية بذاتها. ومع زوال كل الحدود، يستطيع المُفكِّك نشر البيانات عبر الدوال، ما يتيح طيًا أعمق للثوابت، وإزالة الشيفرة الميتة، ومنطقًا أوضح عمومًا. استخدمها من أجل
لاحظ أن HLIL قد يصبح ضخمًا جدًا وبطيئًا في العرض على الدوال الكبيرة جدًا أو أشجار الاستدعاء العميقة. علاوةً على ذلك، قد تصبح بعض تحسينات المُفكِّك أقل فعالية بمجرد دمج كل شيء في وحدة واحدة. للتحكم في ذلك، يمكنك تحديد عمق التضمين: عيّن Settings -> Obfuscation Analysis -> Max Function Inlining Depth إلى حدّ أعلى N (المضبوط افتراضيًا على 1). مع حدّ العمق، تُضمَّن فقط أول N من مستويات الاستدعاء؛ ولا تُضمَّن الاستدعاءات الأعمق.
للإضافة بعض التحفظات التي ينبغي أن تكون على دراية بها، ومعظمها متعلق بمسار تبسيط MBA:
خطأ في Binary Ninja: في BN 5.0 stable، قد تفشل خطوة التقطيع الخلفي (backward-slicing) بسبب غياب تحويلات أنواع HLIL: https://github.com/Vector35/binaryninja-api/issues/6371؛ وقد أُصلحت المشكلة في 5.1.7477-de وما بعده
الشريحة محصورة في كتلة أساسية واحدة: تُتجاهل تعريفات المتغيرات الواقعة في الكتل السابقة (غالبًا ما تكون معتمدة على تدفق التحكم)، لذا قد تبقى بعض حدود MBA محلولة جزئيًا
فجوات الترجمة من HLIL إلى Miasm IR: ليست كل بنية HLIL لها مقابل سليم في Miasm؛ وعند فشل الترجمة يُتخطّى التعبير ويُسجَّل خطأ
تغطية IL: عُقد تدفق التحكم وعمليات الفاصلة العائمة غير مترجمة حاليًا
قيود msynth الموروثة: يَرِث تبسيط MBA كل قيود msynth
لمزيد من المعلومات، تواصل مع Tim Blazytko (@mr_phrazer) أو Nicolò Altamura (@nicolodev).