
حقن الشيلكود باستخدام واجهة تصحيح ويندوز
DbgNexum هو إثبات مفهوم لحقن الشيل كود باستخدام واجهة برمجة تطبيقات التصحيح في ويندوز والذاكرة المشتركة (تعيين الملفات). يتجنب كتابة وقراءة الذاكرة البعيدة مباشرة، بدلاً من ذلك يستخدم التلاعب بالسياق لإجبار العملية الهدف على تحميل وتنفيذ الحمولة بنفسها.
يقوم الحاقن بالارتباط بعملية مستهدفة وإنشاء خيط معلق. من خلال حلقة تصحيح، يضع نقطة توقف عتادية (Hardware Breakpoint) لاصطياد التنفيذ عند عنوان عودة محدد. عند كل اصطياد، يعدل الحاقن سجلات وحدة المعالجة المركزية (CPU) لمحاكاة استدعاءات الدوال، وينسق سلسلة من استدعاءات دوال واجهة برمجة تطبيقات ويندوز داخل العملية الهدف.
في وقت كتابة هذا الملف التمهيدي، اختبرت التقنية ضد MDE و Elastic، ولم يكشفها أي منهما.
WriteProcessMemory / VirtualAllocEx: يتم نقل الحمولة عبر CreateFileMapping و MapViewOfFile.ReadProcessMemory: يحصل الأسلوب على جميع المعلومات الأساسية من سياق الخيط.يستخدم إثبات المفهوم شيل كود msfvenom تم تشفيره بـ XOR لتشغيل "calc.exe". لكن يُرجى استخدام الشيل كود الخاص بك!
shellcode.hDbgNexum.exe <PID>
مثال على الإخراج:
[i] Section 'MZ' created and shellcode copied
[+] Bait thread created. Setting HWBP on FileTimeToSystemTime
[i] Execution Redirected:
|-> [0] Preparation & anchoring stack
|-> [1] Setting HWBP & buffer alloc
|-> [2] Copying File-Mapping name
|-> [3] Zeroing stack slot
|-> [4] Opening handle to named file mapping
|-> [5] Mapping payload into mem. with exec. perm.
|-> [6] Cleanup & shellcode execution
[+] Successfully detached from process 19256
[i] Orchestration complete.
تدفق التنفيذ هو ذهاب وإياب مستمر بين حلقة التصحيح الخاصة بالحاقن والعملية الهدف.
مراحل الحقن
تحتوي دالة DebugLoop على منطق الحقن الرئيسي وتنسق "آلة الحالة":
0. التحضير:
ret فوري.1. التخصيص:
LocalAlloc لتخصيص مخزن صغير (بوضوح).2. إعداد البيانات:
memcpy لنسخ السلسلة MZ إلى المخزن المخصص سابقاً.3. إعداد المكدس:
memset لتصفير خانة في المكدس. هذا تمهيد للمرحلة 5، التي ستستدعي MapViewOfFile. نظراً لأن الدالة ستستخدم أكثر من 4 وسائط، يتم تمرير الوسيط الخامس عبر المكدس (الذي نضبطه هنا).4. فتح التعيين:
OpenFileMappingA باستخدام الاسم MZ "المنشأ" في المرحلتين 2 و 3.5. تعيين الحمولة:
MapViewOfFile. هذا يعيّن قسم الذاكرة المشتركة (الذي يحتوي على الشيل كود) في مساحة عنوان الهدف مع أذونات EXECUTE.6. التنفيذ:
RIP إلى العنوان الذي أعادته MapViewOfFile.