
Я задокументировал все 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