
لقد وثّقت جميع تصحيحات AMSI التي تعلّمتها حتى الآن
لقد وثّقت جميع تصحيحات AMSI التي تعلمتها حتى الآن


a. لتخطي الدخول إلى amsi!AmsiOpenSession+0x4c عبر jne، إذا نجحت جميع التعليمات قبل استدعاء jne
=> سننتقل مباشرة إلى amsi!AmsiCloseSession.
jne من amsi!AmsiOpenSession Github. لقد استخدمت قالب كود تصحيح AMSI الخاص به وأضفت طرقًا أخرى عملت عليها حتى الآن.b. لتخطي الدخول إلى amsi!AmsiOpenSession+0x4c (يفتح جلسة يمكن من خلالها ربط طلبات فحص متعددة) عبر ret، بلصق c3 مباشرة في بداية amsi!AmsiOpenSession
=> سننتقل مباشرة إلى amsi!AmsiCloseSession.
a. لتخطي تنفيذ التعليمات الرئيسية لـ amsi!AmsiScanBuffer عبر ret، بلصق c3 مباشرة في بداية amsi!AmsiScanBuffer
b. لتخطي الفرع الذي يقوم بالفحص الفعلي في amsi!AmsiScanBuffer ويعود، بلصق \\xB8\\x57\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070057; ret') مباشرة في بداية amsi!AmsiScanBuffer
هنا، تكون قيمة HRESULT (أو بالأحرى قيمة الخطأ) هي 'E_INVALIDARG' (المصدر: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
c. لتخطي الفرع الذي يقوم بالفحص الفعلي في amsi!AmsiScanBuffer ويعود، بلصق \\xB8\\x05\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070005; ret') مباشرة في بداية amsi!AmsiScanBuffer
هنا، تكون قيمة HRESULT (أو بالأحرى قيمة الخطأ) هي 'E_ACCESSDENIED' (المصدر: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
d. لتخطي الفرع الذي يقوم بالفحص الفعلي في amsi!AmsiScanBuffer ويعود، بلصق \\xB8\\x06\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070006; ret') مباشرة في بداية amsi!AmsiScanBuffer
هنا، تكون قيمة HRESULT (أو بالأحرى قيمة الخطأ) هي 'E_HANDLE' (المصدر: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
e. لتخطي الفرع الذي يقوم بالفحص الفعلي في amsi!AmsiScanBuffer ويعود، بلصق \\xB8\\x0E\\x00\\x07\\x80\\xC3 ('mov eax, 0x8007000E; ret') مباشرة في بداية amsi!AmsiScanBuffer
هنا، تكون قيمة HRESULT (أو بالأحرى قيمة الخطأ) هي 'E_OUTOFMEMORY' (المصدر: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
JE إلى JMP بحيث يعود مباشرة... : https://github.com/ZeroMemoryEx/Amsi-Killer