Выживание в системах с жестоким квотированием

       

система запоминает путь


Антивирус просто не сможет открыть файл "D:\1\2\3\NOTEPAD.EXE", потому что его уже нет! Как говориться, кто не успел, тот опоздал. Теоретически (и практически) антивирус может "подключиться" к процессу через его PID, но этому легко противостоять. Достаточно распотрошить любой хороший упаковщик типа Armadillo или eXtreme Protector — они сопротивляются этому вовсю! (Как вариант, можно положить на прежний путь безобидный файл с тем же самым именем — вот тогда доверчивый антивирус обломается по полной программе, даже не подозревая как круто мы его провели).

Резидентные мониторы таким образом обойти уже не получится. Они перехватывают API-функции, отвечающие за чтение файлов и запуск процессов (как правильно это CreateFile и CreateProcess), прогоняя программу через анализатор _до_ ее запуска. Несколько лет назад мыщъх опубликовал в хакере статью "техника выживания в мутной воде или как обуть антивирус" описывающую ряд элегантных и эффективных приемов, обламывающих антивирус со всеми его эвристическими анализаторами. Тогда было достаточно упаковать программу каким-нибудь навесным упаковщиком (неважно — известным антивирусу или нет) а в точку входа вставить jump на свой thunk, использующий самомодифицирующийся код, структурные исключения или новомодные SSE команды, после чего восстанавливающий оригинальное содержимое, затертое jump'ом и передающий распаковщику бразды правления. Но виртуальные машины антивирусных систем за последнее время значительно окрепли и часть этих трюков уже перестала работать, а скоро они перестанут работать совсем! Что же делать? Без паники парни! Не торопитесь высаживаться на измену, а лучше повращайте хвостом и подумайте головой.

Самое простое — воткнуть в thunk функцию SetTimer/Sleep, вызывающую оригинальную точку входа через несколько секунд. Ни один из известных мыщъх'у антивирусов не анализирует аргументы SetTimer и не ждет так долго. С его точки зрения программа выглядит так:

SetTimer(,,,);

Sleep(,);

Exit(,);



Содержание раздела