سلام الله عليكم ورحمته وبركاته أحبتي في صرح ديف بوينت العظيم
كتير لما تيجي تفتح ملف تنفيذي في IDA أو أي Disassembler، تلاقي البرنامج مطلعلك 10 دوال بس ومفيش أي كود واضح وكل النصوص طالعة طلاسم! تيجي تدور على الدوال العادية متلاقيش حاجة. السبب هنا إن الملف ده محمي أو مضغوط بـ Packer زي UPX, ASPack, PECompact, أو بروتكتور متقدم.
في الموضوع ده، هنشرح الفلسفة الهندسية لفك التغليف (Unpacking) وإزاي بنصطاد نقطة الدخول الأصلية (Original Entry Point - OEP) ونفرغ الملف من الذاكرة ليرجع نقي تماماً.
1. يعني إيه Packer أصلاً وإزاي بيشتغل؟
فكرة الباكر عبارة عن برنامج صغير (اسمها الـ Stub / Loader) بياخد الملف الأصلي بتاعك يضغطه أو يشفره، ويحطه كبيانات جواه.
أول ما تشغل الملف:
2. إزاي تكتشف نوع الباكر قبل ما تبدأ؟
دايماً افتح الملف بأداة Detect It Easy (DIE) أو Exeinfo PE:
3. التكنيك السحري لصيد الـ OEP: خدعة الـ ESP (The ESP Trick)
معظم برامج التغليف العادية لما بتبدأ بتستخدم تعليمة اسمها PUSHAD عشان تحفظ كل مسجلات المعالج في الـ Stack، ولما تخلص فك التشفير بتستخدم تعليمة POPAD عشان ترجع المسجلات زي ما كانت قبل ما تقفز للـ OEP.
الخدعة كالتالي:
4. تفريغ الملف وإصلاح جدول الاستيراد بأداة Scylla
الآن البرنامج مفكوك في الـ RAM بس لسه على الهارد ديسك مشفر. عشان نحفظه:
كلمة ختامية:
مهارة فك التغليف هي المفتاح السحري اللي بيفتحلك أي برنامج محمي وبيمهدلك الطريق لتحليل الكود الحقيقي بكل سهولة.
جربوا الخطوات دي وقولولي في الردود إيه النتيجة اللي وصلتم ليها، وأي حد يواجهه مشكلة يطرح استفساره وسنكون متواجدين للمساعدة دائماً!
كتير لما تيجي تفتح ملف تنفيذي في IDA أو أي Disassembler، تلاقي البرنامج مطلعلك 10 دوال بس ومفيش أي كود واضح وكل النصوص طالعة طلاسم! تيجي تدور على الدوال العادية متلاقيش حاجة. السبب هنا إن الملف ده محمي أو مضغوط بـ Packer زي UPX, ASPack, PECompact, أو بروتكتور متقدم.
في الموضوع ده، هنشرح الفلسفة الهندسية لفك التغليف (Unpacking) وإزاي بنصطاد نقطة الدخول الأصلية (Original Entry Point - OEP) ونفرغ الملف من الذاكرة ليرجع نقي تماماً.
1. يعني إيه Packer أصلاً وإزاي بيشتغل؟
فكرة الباكر عبارة عن برنامج صغير (اسمها الـ Stub / Loader) بياخد الملف الأصلي بتاعك يضغطه أو يشفره، ويحطه كبيانات جواه.
أول ما تشغل الملف:
- المعالج بينفذ كود الـ Stub الأول.
- الـ Stub بيحجز مساحة في الذاكرة (VirtualAlloc) ويفك تشفير وضغط الكود الحقيقي جواه.
- بعد ما يخلص، بيقوم عامل قفزة كبيرة (Tail Jump) لنقطة بداية البرنامج الحقيقي وهي الـ OEP.
2. إزاي تكتشف نوع الباكر قبل ما تبدأ؟
دايماً افتح الملف بأداة Detect It Easy (DIE) أو Exeinfo PE:
- الأداة هتقولك نوع الباكر وإصداره وهل فيه Entropy عالي (دليل على التشفير والضغط).
- هتوضحلك أسماء الـ Sections (لو لقيت أقسام زي UPX0, UPX1 أو VMP0 فده دليل قاطع على وجود حماية).
3. التكنيك السحري لصيد الـ OEP: خدعة الـ ESP (The ESP Trick)
معظم برامج التغليف العادية لما بتبدأ بتستخدم تعليمة اسمها PUSHAD عشان تحفظ كل مسجلات المعالج في الـ Stack، ولما تخلص فك التشفير بتستخدم تعليمة POPAD عشان ترجع المسجلات زي ما كانت قبل ما تقفز للـ OEP.
الخدعة كالتالي:
- الخطوة 1: افتح الملف في x64dbg واضغط F7 خطوة واحدة لحد ما تعدي تعليمة PUSHAD.
- الخطوة 2: بص على مسجل ESP واضغط عليه كليك يمين واختار Follow in Dump.
- الخطوة 3: في نافذة الـ Dump، اضغط كليك يمين على أول 4 بايتات واختار Breakpoint -> Hardware, Access -> Dword.
- الخطوة 4: اضغط F9 (Run). البرنامج هيفك نفسه في الذاكرة وبمجرد ما يوصل لتعليمة POPAD عشان يقرا الـ Stack، الـ Hardware Breakpoint هتصطاده فوراً!
- الخطوة 5: انزل تحت سطرين هتلاقي تعليمة JMP كبير لعنوان بعيد (Tail Jump). اضغط F7 وراها ومبروك عليك.. إنت الآن واقف على الـ OEP الأصلية!
4. تفريغ الملف وإصلاح جدول الاستيراد بأداة Scylla
الآن البرنامج مفكوك في الـ RAM بس لسه على الهارد ديسك مشفر. عشان نحفظه:
- في برنامج x64dbg، ادخل على تبويب Plugins -> Scylla.
- اتأكد إن الـ OEP مكتوبة بالعنوان الجديد اللي إنت واقف عنده.
- اضغط على IAT Autosearch ثم اضغط Get Imports لاسترجاع كل دوال الـ Windows API اللي الملف بيستخدمها.
- اضغط على Dump لحفظ الذاكرة كملف تنفيذي جديد.
- أخيراً اضغط على Fix Dump لاختيار الملف اللي استخرجته وإصلاح هيكل الـ PE ليعمل بشكل مستقل تماماً وبدون أي باكر!
كلمة ختامية:
مهارة فك التغليف هي المفتاح السحري اللي بيفتحلك أي برنامج محمي وبيمهدلك الطريق لتحليل الكود الحقيقي بكل سهولة.
جربوا الخطوات دي وقولولي في الردود إيه النتيجة اللي وصلتم ليها، وأي حد يواجهه مشكلة يطرح استفساره وسنكون متواجدين للمساعدة دائماً!