该仓库包含如何采用单字节补丁同时修补 AMSI 和 ETW 的信息。
其思路是,由于补丁本身只有一个字节,因此可以限制对该补丁的检测。
其思路是,AMSI 在到达关键的 AMSI“检查”代码之前会执行大量验证检查。你可以简单地将某个 jz 切换为 jnz,反之亦然。

上图中红色箭头指示关键代码所在的位置。

可切换以避免调用关键代码的检查示例。
在本例中,我们修补 cmp dword ptr [rbx], 49534d41h 之后的 jnz。
该补丁只是:AmsiScanBuffer + 0x83 = 0x74 (x64)。
不要修补 EtwEventWrite,而是直接修补系统调用 NtTraceEvent,该调用被许多函数调用。

如下图所示,NtTraceEvent 被 ntdll.dll 中的许多函数使用。

该补丁就是在调用 NtTraceEvent 函数时强制返回:NtTraceEvent = 0xc3 (x64)。