كل مــا تريد معرفته عن الـ Packing

Malware
ما التقنيه التي يستخدمها المخترقين لجعل عمليه تحليل البرامج الخبيثه أصعب؟ في هذه المقالة سنتعرف على عملية الـ Packing
Khaled Eid
June 7, 2023, 8 p.m.
khaled_eid
كل مــا تريد معرفته عن الـ Packing

كلنا سمعنا عن ال Packing وحتى ان لم تسمع أو تعلم فهذه المقاله ستتناول العديد من الجوانب لهذا الموضوع بالتفصيل.

مستعد؟ هيا بنا!

ما هو الـ Packing؟

الـ Packers هيا أدوات لضغط البرامج والأقسام (Resources) والمعلومات التي تحتويها بحيث لا نستطيع قراءتها وهيا في القرص الصلب (HardDisk) ولكن عند تشغيل البرنامج نستطيع قراءتها في الذاكرة العشوائية (Memory) ويتوفر بداخلها كود برمجي مسؤول عن عمليه فك الضغط (Unpacking).

Code Unpacking | Mastring malware analysis Book

وهناك أنواع مختلفه من ال Packing:

  • Packers: برامج هدفها ضغط الملف لتقليل حجمها الكلي مثل الأداه مفتوحه المصدر الشهيره UPX. 
  • Protectors: هدفها الاساسي حمايه البرامج من محاولات ال Reverse Engineering لحمايه licensing system of shareware products من الكراك.
  • Encryptors: نفس عمل ال Protectors  فهدفهم هو تصعيب عمليه ال Analysis ولكن التركيز الأساسي هنا مختلف وهو تجنب كشف ال antivirus فاغلب الملفات في هذه الفئه تكون خبيثه.

ففي حقيقه الأمر كل هذه الأدوات تسمى Packers.

كيف نعرف أن الملف Packed أم لا؟

لذا كيف لنا أن نعرف الملف الخبيث مضغوط (Packed) أم لا؟

هناك بضع علامات تكون دليل على ذلك:

  • أن يكون الملف محتوي على عدد قليل من الـنصوص (Strings) المفهومة
  • عندما تجد جدول ال Import محتوي على عدد قليل من الFuncation 
  • عندما ترى تغيير في أسامي الأقسام (Sections)
  • ال Byte values تكون عشوائيه جدا في الملف (high entropy)

وهناك عدة طرق لمعرفه ما هو الـ Packer المستخدم في عمليه ال Packing:

  • الطريقه الأولى وهيا استخدام أدوات مثل Exexinfo PE تعتمد على Signatures
  • عند النظر إلى النصوص في الملف, في الغالب سنرى أسم ال Packer المستخدم مكتوب في مكان ما
  • اذا وجدنا عدد كبير من ال Import لا معنى له , فيمكن أن يحتوي على أسم ال Packer

دعنا نطبق هذه المبادئ التي عرفناها على عينة خبيثة أسمها brbbot.exe ونستكشف هل يمكننا معرفه أنها packed أم لا بأستخدام عددا من الأدوات.

 يمكنك تحميل العينة من هنا 

PEstudio

اذا وضعنا brbbot.exe في PE studio وبحثنا في قسم ال Imports سنلاحظ القليل من الـ Funcations


واذا فحصنا قسم ال Source سنجد أن أسامي الأقسام قد تغيرت 


 

واذا ذهبنا إلى ال strings سنرى القليل من النصوص المفهومة والقابله للقراءه 

Detect It Easy

هذه الأدة بسيطة وسهلة الأتسخدام. سنقوم بفتح العينه فيها وسنلاحظ أن الأداه تخبرنا بأن العينه packed وال packer المستخدم هو UPX

واذا ضغطنا على "Entropy", سيظهر لنا رسم بياني والنسبة المئويه لاحتماليه ان هذا الملف PACKED  أم لا
وهيا هنا 97%

Exeinfo PE 

وهيا أداه أخرى قادرة على معرفه ال packer المستخدم ليس ذلك فحسب, بل تعطينا اقتراحات لأدوات قادرة على فك هذا الضغط (Unpacking) وعموما اذا لم نجد اسم ال packer فسنضطر إلى فك الضغط  يدوي (manually unpacking) كما سنعرف لاحقا.

والأداة تخبرنا بنفس المعلومات التي أكتشفناها سابقا.

بعد استخدام هذه الأدوات العديدة ، تعلمنا كيفية التمييز بين البرامج الضارة المضغوطه والغير المضغوطة.
وتأكدنا من ان brbbot.exe هو ملف خبيث مضغوط.

 

طرق الـ Unpacking  

حسنا, نريد الان عمل Unpacking للعينة لنستطيع رؤيه المعلومات المخفيه والمشفره مما يجعلنا نتعرف أكثر على العينه الخبيثه وفهم طريقه عملها

وقبل البدء في هذه العملية يجب أن نعرف أن هناك طريقتين رئيسيتين Automatically Unpacking و Manually Unpacking.

Automatically Unpacking

هذه الطريقه هيا الطريقه السريعه التي لا تأخذ وقتا, فنستخدم عدة أدوات تفعل ال Unpacking تلقائي بدون أي جهد يذكر. ويوجد العديد من التقنيات المستخدمة هنا وأشهرها Memory Dumps دعنا نعرف معا كيفيه تطبيقها عمليا.

ولكن قبل ذلك يجب أن نفهم مفهوم الـ ASLR. سابقا في الكنز الدفين! ما يجب معرفته عن الـ PE header عرفنا أن ال ImageBase Filed هو العنوان الذي سيتم عليه تحميل البرنامج في الذاكرة الافتراضية (virtual memory) ولكن في نظام التشغيل ويندوز (8.1 وما أكثر) يتجاهل الويندوز قيمه الـ ImageBase ويضع قيمة عشوائية ليجعل الذاكرة صعبة الأختراق من قبل الهجمات التي تستهدف مواقع الذاكرة المعروفة بأنها مرتبطة بعمليات (Process) معينة. ولكن نتيجة لهذا الميزة الأمنية جعلت عملية ال Unpacking أكثر صعوبة بالنسبة لنا, لذا يجب علينا تعطيل ال ASLR عن الملف المراد فك ضغطه (لا يمكن تعطيل الـ ASLR عن الويندوز بشكل تام, ملفات فقط)

سنستخدم CFF Explorer لتعيطل الـ ASLR. سنقوم بفتح الملف داخل الأداة وسنذهب الى الـ Optional Header ثم الى خانة DLLCharacteristics.

سنقوم بالضغط على زر Click here ثم نلغي الأشاره من مربع "Dll Can move"

لا تنسى تحفظ هذه التعديلات عن طريق CTRL+S.

الان نحن جاهزين لتنفيذ الـ Memory Dumps بأستخدام برنامج Scylla.

عند تشغيل البرنامج الخبيث على الجهاز, سنفتح أداه Scylla وسنرى البرنامج الخبيث ظاهر, سنختاره من القائمة.

ثم سنضعط زر "Dump" ونختار المكان الذي سيتم فيه حفظ الملف.

بعد ذلك, سنضعط زر "IAT" لكي يستخرج ال Important table التي تم تحميلها في الميموري

سيظهر لنا كل مكاتب ال DLL التي بداخلها الـ API ثم نضعط على زر Get Imports

أخيرا سنضغط على زر "Fix Dump" ثم نختار من القائمة النسخة التي حفظناها سابقا في الخطوات السابقة.

سيظهر لنا هذه النسخة الأخيرة المعدلة (ستكون بهذا الأسم غالبا اذا لم يتم تعديلها)

الان دعنا نضع هذه النسخه المعدلة في برنامج  PE studio لنرى العينة بعد فك الضغط.

سنلاحظ أن هناك المزيد من النصوص عن النسخة الـ packed.

واذا ذهبنا الى قسم ال Imports سنرى المزيد من الـ API التي أستخرجناها من عملية الـ "IAT Autosearch"

الــخــاتمــة

لقد تعلمنا معا ما هو ال Packing وعلاماته وكيفيه تخطي هذا التقنيه و هناك طرق أخرى كـ ال manually unpacking وهيا تأخذ جهد ووقت كبير. لم نغطيها في هذه المقالة ولكن سنتاولها في المقالات القادمة بأذن الله


Packing Packers UPX Unpacking Malware Encryption Obfuscated