
Патч AMSI и ETW
этот репозиторий содержит информацию о патчинге AMSI и ETW с помощью однобайтового патча для обоих.
Идея заключалась в том, чтобы ограничить обнаружение самого патча, поскольку он занимает всего один байт.
Идея в том, что AMSI выполняет множество проверок, прежде чем дойти до критического кода «check». Можно просто переключить один из jz на jnz и наоборот.

Красная стрелка на рисунке выше показывает, где расположен критический код.

Пример проверок, которые можно переключить, чтобы избежать вызова критического кода.
В данном случае мы патчим jnz после cmp dword ptr [rbx], 49534d41h.
Патч — это просто адрес AmsiScanBuffer + 0x83 = 0x74 (x64).
Вместо патчинга EtwEventWrite просто пропатчите системный вызов NtTraceEvent, который вызывается множеством функций.

Как показано на рисунке ниже, NtTraceEvent используется множеством функций внутри ntdll.dll.

Патч просто принудительно возвращает управление при вызове функции NtTraceEvent: NtTraceEvent = 0xc3 (x64).