Comments 3
Спасибо, ятебяненавижу, за интересный кейс!
Переписать на rust - hell gate, на новую идею не тянет, имхо. Один вопрос, а ав реально в статик анализе считают легитимным GetProcAddress? По-моему там всё несколько сложнее, и зачастую эта апишка вызовет Алерт )
P.s. без негатива, круто , спасибо за статью.
Спасибо за вопрос. Вы правы, что GetProcAddress может быть триггером в динамическом или эвристическом анализе, но в статическом анализе он легитимен на 100% по нескольким причинам.
Статические сигнатуры строятся на паттернах - уникальных байт-кодах, хэшах участков кода, специфичных последовательностях API. Одиночный вызов GetProcAddress встречается в миллионах легитимных приложений (от драйверов принтеров до игр Steam). Внедрение сигнатуры на него даст миллион ложных срабатываний - ни один вендор этого не сделает
GetProcAddress(“NtCreateThreadEx”) + вызов полученного адреса + отсутствие цифровой подписи + работа из временной директории - да, это повод для алерта. Но в нашем случае GetProcAddress используется для VirtualAlloc, LoadLibrary, GetProcAddress (рекурсивно для самой себя) функций, которые легитимный рантайм Rust или любой инсталлятор вызывает на раз
Как я модифицировал IronPE и обошел Windows Defender в 2026 году