
He documentado todos los parches de AMSI que he aprendido hasta ahora.
He documentado todos los parches de AMSI que he aprendido hasta ahora


a. Para omitir la entrada a amsi!AmsiOpenSession+0x4c mediante jne, si todas las instrucciones tienen éxito antes de la llamada a jne
=> Terminaríamos directamente en amsi!AmsiCloseSession.
Enlace del vídeo: https://drive.google.com/file/d/1H0JheGNGzIyWZ62HNLmJ_oeAAUtDGIKd/view?usp=sharing
jne desde amsi!AmsiOpenSession Github. He usado su plantilla de código de parcheo de AMSI y he añadido otros métodos en los que he trabajado hasta ahora.b. Para omitir la entrada a amsi!AmsiOpenSession+0x4c (abre una sesión dentro de la cual se pueden correlacionar múltiples solicitudes de escaneo) mediante ret, pegando directamente c3 al principio de amsi!AmsiOpenSession
=> Terminaríamos directamente en amsi!AmsiCloseSession.
Enlace del vídeo: https://drive.google.com/file/d/1_tpCfJ-aO1wzeEx3Id7b7bTJUyc5ExBw/view?usp=sharing
a. Para omitir la ejecución de las instrucciones principales de amsi!AmsiScanBuffer mediante ret, pegando directamente c3 al principio de amsi!AmsiScanBuffer
Enlace del vídeo: https://drive.google.com/file/d/1PljZld1aXz89nCO3gQCjYpwSqbEbi4J_/view?usp=sharing
b. Para omitir la rama que realiza el escaneo real en amsi!AmsiScanBuffer y retorna, pegando directamente \\xB8\\x57\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070057; ret') al principio de amsi!AmsiScanBuffer
Aquí, el valor (más bien valor de error) de HRESULT es 'E_INVALIDARG' (Fuente: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
c. Para omitir la rama que realiza el escaneo real en amsi!AmsiScanBuffer y retorna, pegando directamente \\xB8\\x05\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070005; ret') al principio de amsi!AmsiScanBuffer
Aquí, el valor (más bien valor de error) de HRESULT es 'E_ACCESSDENIED' (Fuente: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
d. Para omitir la rama que realiza el escaneo real en amsi!AmsiScanBuffer y retorna, pegando directamente \\xB8\\x06\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070006; ret') al principio de amsi!AmsiScanBuffer
Aquí, el valor (más bien valor de error) de HRESULT es 'E_HANDLE' (Fuente: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
e. Para omitir la rama que realiza el escaneo real en amsi!AmsiScanBuffer y retorna, pegando directamente \\xB8\\x0E\\x00\\x07\\x80\\xC3 ('mov eax, 0x8007000E; ret') al principio de amsi!AmsiScanBuffer
Aquí, el valor (más bien valor de error) de HRESULT es 'E_OUTOFMEMORY' (Fuente: https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
JE a JMP para que retorne directamente... : https://github.com/ZeroMemoryEx/Amsi-Killer