
Documentei todos os patches de AMSI que aprendi até agora.
Eu documentei todos os patches de AMSI que aprendi até agora


a. Para pular a entrada em amsi!AmsiOpenSession+0x4c via jne, se todas as instruções forem bem-sucedidas antes da chamada de jne
=> Acabaríamos indo diretamente para amsi!AmsiCloseSession.
Link do vídeo: https://drive.google.com/file/d/1H0JheGNGzIyWZ62HNLmJ_oeAAUtDGIKd/view?usp=sharing
jne de amsi!AmsiOpenSession Github. Usei o modelo de código de patch de AMSI dele e adicionei outros métodos nos quais trabalhei até agora.b. Para pular a entrada em amsi!AmsiOpenSession+0x4c (Abre uma sessão na qual várias solicitações de verificação podem ser correlacionadas) via ret, colando diretamente c3 no início de amsi!AmsiOpenSession
=> Acabaríamos indo diretamente para amsi!AmsiCloseSession.
Link do vídeo: https://drive.google.com/file/d/1_tpCfJ-aO1wzeEx3Id7b7bTJUyc5ExBw/view?usp=sharing
a. Para pular a execução das instruções principais de amsi!AmsiScanBuffer via ret, colando diretamente c3 no início de amsi!AmsiScanBuffer
Link do vídeo: https://drive.google.com/file/d/1PljZld1aXz89nCO3gQCjYpwSqbEbi4J_/view?usp=sharing
b. Para pular o ramo que realiza a verificação real em amsi!AmsiScanBuffer e retorna, colando diretamente \\xB8\\x57\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070057; ret') no início de amsi!AmsiScanBuffer
Aqui, o valor (mais precisamente, o valor de erro) do HRESULT é 'E_INVALIDARG' (Fonte: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
c. Para pular o ramo que realiza a verificação real em amsi!AmsiScanBuffer e retorna, colando diretamente \\xB8\\x05\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070005; ret') no início de amsi!AmsiScanBuffer
Aqui, o valor (mais precisamente, o valor de erro) do HRESULT é 'E_ACCESSDENIED' (Fonte: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
d. Para pular o ramo que realiza a verificação real em amsi!AmsiScanBuffer e retorna, colando diretamente \\xB8\\x06\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070006; ret') no início de amsi!AmsiScanBuffer
Aqui, o valor (mais precisamente, o valor de erro) do HRESULT é 'E_HANDLE' (Fonte: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
e. Para pular o ramo que realiza a verificação real em amsi!AmsiScanBuffer e retorna, colando diretamente \\xB8\\x0E\\x00\\x07\\x80\\xC3 ('mov eax, 0x8007000E; ret') no início de amsi!AmsiScanBuffer
Aqui, o valor (mais precisamente, o valor de erro) do HRESULT é 'E_OUTOFMEMORY' (Fonte: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
Por Ritaban Das: https://github.com/dosxuz/TradecraftImrprovement
JE para JMP para que ele retorne diretamente... : https://github.com/ZeroMemoryEx/Amsi-Killer