我已经记录了我迄今学到的所有AMSI补丁


a. 如果在调用 jne 之前所有指令都成功执行,则通过 jne 跳过进入 amsi!AmsiOpenSession+0x4c
=> 我们最终将直接进入 amsi!AmsiCloseSession。
b. 通过 ret 跳过进入 amsi!AmsiOpenSession+0x4c(打开一个会话,在该会话中可以关联多个扫描请求),方法是在 amsi!AmsiOpenSession 的开头直接粘贴 c3
=> 我们最终将直接进入 amsi!AmsiCloseSession。
a. 通过 ret 跳过 amsi!AmsiScanBuffer 主要指令的执行,方法是在 amsi!AmsiScanBuffer 的开头直接粘贴 c3
b. 通过 ret 跳过 amsi!AmsiScanBuffer 中执行实际扫描并返回的分支,方法是在 amsi!AmsiScanBuffer 的开头直接粘贴 \\xB8\\x57\\x00\\x07\\x80\\xC3('mov eax, 0x80070057; ret')
此处,HRESULT 的值为(更确切地说是错误值)'E_INVALIDARG'(来源:https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
c. 通过 ret 跳过 amsi!AmsiScanBuffer 中执行实际扫描并返回的分支,方法是在 amsi!AmsiScanBuffer 的开头直接粘贴 \\xB8\\x05\\x00\\x07\\x80\\xC3('mov eax, 0x80070005; ret')
此处,HRESULT 的值为(更确切地说是错误值)'E_ACCESSDENIED'(来源:https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
d. 通过 ret 跳过 amsi!AmsiScanBuffer 中执行实际扫描并返回的分支,方法是在 amsi!AmsiScanBuffer 的开头直接粘贴 \\xB8\\x06\\x00\\x07\\x80\\xC3('mov eax, 0x80070006; ret')
此处,HRESULT 的值为(更确切地说是错误值)'E_HANDLE'(来源:https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
e. 通过 ret 跳过 amsi!AmsiScanBuffer 中执行实际扫描并返回的分支,方法是在 amsi!AmsiScanBuffer 的开头直接粘贴 \\xB8\\x0E\\x00\\x07\\x80\\xC3('mov eax, 0x8007000E; ret')
此处,HRESULT 的值为(更确切地说是错误值)'E_OUTOFMEMORY'(来源:https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
JE改为JMP,从而直接返回...:https://github.com/ZeroMemoryEx/Amsi-Killer