
J'ai documenté tous les patchs AMSI que j'ai appris jusqu'à présent.
J'ai documenté tous les correctifs AMSI que j'ai appris jusqu'à présent


a. Pour éviter d'entrer dans amsi!AmsiOpenSession+0x4c via jne, si toutes les instructions réussissent avant l'appel de jne
=> On aboutirait directement à amsi!AmsiCloseSession.
jne depuis amsi!AmsiOpenSession Github. J'ai utilisé son modèle de code de patch AMSI et ajouté d'autres méthodes sur lesquelles j'ai travaillé jusqu'à présent.b. Pour éviter d'entrer dans amsi!AmsiOpenSession+0x4c (Ouvre une session dans laquelle plusieurs requêtes de scan peuvent être corrélées) via ret, en collant directement c3 au début de amsi!AmsiOpenSession
=> On aboutirait directement à amsi!AmsiCloseSession.
a. Pour sauter l'exécution des instructions principales de amsi!AmsiScanBuffer via ret, en collant directement c3 au début de amsi!AmsiScanBuffer
b. Pour sauter la branche qui effectue le scan proprement dit dans amsi!AmsiScanBuffer et renvoie, en collant directement \\xB8\\x57\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070057; ret') au début de amsi!AmsiScanBuffer
Ici, la valeur (plutôt valeur d'erreur) de HRESULT étant 'E_INVALIDARG' (Source : https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
c. Pour sauter la branche qui effectue le scan proprement dit dans amsi!AmsiScanBuffer et renvoie, en collant directement \\xB8\\x05\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070005; ret') au début de amsi!AmsiScanBuffer
Ici, la valeur (plutôt valeur d'erreur) de HRESULT étant 'E_ACCESSDENIED' (Source : https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
d. Pour sauter la branche qui effectue le scan proprement dit dans amsi!AmsiScanBuffer et renvoie, en collant directement \\xB8\\x06\\x00\\x07\\x80\\xC3 ('mov eax, 0x80070006; ret') au début de amsi!AmsiScanBuffer
Ici, la valeur (plutôt valeur d'erreur) de HRESULT étant 'E_HANDLE' (Source : https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
e. Pour sauter la branche qui effectue le scan proprement dit dans amsi!AmsiScanBuffer et renvoie, en collant directement \\xB8\\x0E\\x00\\x07\\x80\\xC3 ('mov eax, 0x8007000E; ret') au début de amsi!AmsiScanBuffer
Ici, la valeur (plutôt valeur d'erreur) de HRESULT étant 'E_OUTOFMEMORY' (Source : https://pre.empt.dev/posts/maelstrom-etw-amsi/#Historic_AMSI_Bypasses)
JE à JMP pour qu'il retourne directement... : https://github.com/ZeroMemoryEx/Amsi-Killer