التطوير العملي للبرمجيات الخبيثة
التمرين 1 - إعداد البيئة
- قم بإعداد جهاز افتراضي يعمل بنظام ويندوز داخل مُشغّل افتراضي (hypervisor).
أ. تأكد من أخذ لقطة (snapshot) للتثبيت الأساسي.
- قم بتنزيل وتثبيت Visual Studio 2022 - https://visualstudio.microsoft.com/vs/
أ. اختر عبء العمل
Desktop development with C++ عند التثبيت.
- قم بتنزيل وتثبيت:
بالإضافة إلى ذلك (اختياري)، للحصول على تجربة فك هندسي أكثر اكتمالًا، قم بإعداد الرموز (symbols):
setx _NT_SYMBOL_PATH c:\Symbols;srv*c:\Symbols*https://msdl.microsoft.com/download/symbols
mkdir \symbols
- افتح
PMD.sln داخل Visual Studio.
- حدد مشروع
setup، وتأكد من أنك تستطيع:
أ. ترجمة المشروع
ب. رؤية عبارة الطباعة الخاصة بالتصحيح داخل DebugView++.
التمرين 2 - فهم خصائص PE
- حدّث خيارات المترجم والرابط لمشروع
template للتحكم في مدخلات IAT وخصائص PE الأخرى.
أ. اعتد على استخدام تحليل API الديناميكي ووثائق MSDN.
ب. هل توجد أي خصائص أخرى تبرز؟ إذا قمت بتشغيل Strings.exe على الملف الثنائي، فهل تبرز أي سلاسل نصية؟
ج. هل يمكنك إزالتها/تحديثها؟
استخدم أي أداة من اختيارك لإكمال التمرين (مثل dumpbin/PE Bear). تم توفير غلاف حول pefile في scripts\props.py (تأكد من تثبيت المتطلبات).
- قم بتنزيل بعض عينات البرمجيات الخبيثة من VXUG
أ. ما هي الاختلافات الرئيسية بين الملفات التنفيذية الحميدة والخبيثة؟
ب. ما هي الاختلافات الرئيسية بين ملفنا الثنائي والملفات التنفيذية الحميدة؟
مصادر إضافية
التمرين 3 - تجزئة API في وقت الترجمة
خوارزمية تجزئة API المستخدمة حاليًا هي fnv1a.
- افتح مشروع
solution واستدعِ MessageBoxA باستخدام إطار عمل تجزئة API.
- استخدم خوارزمية تجزئة مختلفة وتأكد من أنك ما زلت قادرًا على استدعاء MessageBoxA.
مصادر إضافية
التمرين 4 - اكتشاف واستغلال اختطاف DLL
- قم بتنزيل Cisco Webex (https://www.webex.com/downloads.html)
- ابحث عن CiscoCollabHost ولاحظ ملفات DLL التي يتم تحميلها
- استخدم Procmon/PE Bear/Ghidra أو أي شيء آخر!
- افتح CiscoCollabHost في Ghidra وحدد طرقًا مختلفة للحصول على تنفيذ الكود من التحميل الجانبي
- عدّل
dll_template لتحميل ملفك الثنائي الهدف تحميلًا جانبيًا. تحقق من قدرتك على رؤية سلسلة التصحيح في DebugView++.
- حدّث
LastWriteTime و CreationTime للملف dll_template.dll بحيث تتطابق مع DLL الهدف.
مصادر إضافية
التمرين 5 - تنفيذ شيل كود
- قم بترجمة وتشغيل مشروع الأداة المساعدة.
أ. بالإضافة إلى ذلك، فكّر في تشغيله على نظامك المضيف.
- انسخ ملف DLL المحدد إلى دليل
x64/{Debug,Release} وحدّث كود المُحمّل.
- حدّث
execute_sc لتنفيذ شيل كود خاص بك باستخدام دالة مختلفة مع إطار عمل تجزئة API.
مصادر إضافية
التمرين 6 - تجميع كل العناصر معًا
- أنشئ مشروع DLL جديدًا واجمع ما يلي:
أ. التحميل الجانبي لـ DLL
ب. تنفيذ شيل كود من التحميل الجانبي
- تحقق من أن خصائص PE لديك كما هو متوقع.
- قم بترجمة حمولتك في وضع Release وعُبّئها بتنسيق مناسب للتسليم.
التمرين 7 - استضافة الحمولة
- سجّل لدى مزوّد تخزين سحابي (مثل AWS/CloudFlare)
- عبّئ حمولتك وارفعها
أ. بالإضافة إلى ذلك، ابحث عن طرق لتقييد/تدقيق الوصول إلى التنزيل
- التقط لقطة لجهازك الافتراضي
- أعد الجهاز الافتراضي إلى حالته الأساسية ونفّذ سيناريو "التسليم" الكامل
- على سبيل المثال، توجيه المستخدم إلى الرابط وحثّه على التنزيل. تأكد من أن الأمر يعمل.
التمرين 8 - بناء الحمولات باستخدام Github Actions
- أنشئ مستودع Git يحتوي على محتويات هذا المشروع
- تحقق من أنك تستطيع تشغيل Action وأن المخرجات (artifacts) تعمل
- حدّث
.github\workflows\build.yml لإجراء أي معالجة إضافية قبل/بعد البناء ترغب بها لتوفير الوقت. إليك بعض الأفكار:
- تشغيل
props.py والتحقق من المخرجات/تضمينها
- أتمتة تعبئة الحمولة باستخدام Python
- أتمتة تحديث
LastWriteTime و CreationTime لمطابقة هدف معيّن