Истории о вирусах

Конструирование неотслеживаемого обращения к DOS


Для чего нужно такое конструирование? Неужели антивирусные мони-

торы настолько бдительны, что пресекают любые попытки открыть для

модификации ЕХЕ- или СОМ-файл? Да, это действительно так. Авто-

ры антивирусных мониторов обладают достаточно эффективными сред-

ствами, чтобы предотвратить прямые обращения к DOS со стороны ви-

русов.

Обратимся к мнению Ю. Косивцова: "Для обнаружения действия нере-

зидентных вирусов необходимо контролировать вызов функций DOS

с номерами: 3Dh (открытие файла через описатель), OFh (открытие

файла через FCB и 5Dh) и подфункцию OOh (косвенный вызов DOS).

Если при открытии файла обнаружено, что расширение его СОМ, ЕХЕ

или SYS, то можно выдавать предупреждающее сообщение".



Список выглядит слишком коротким. Действительно, а что произойдет,

если сначала переименовать программный файл? И почему не учтена

функция 6Ch (расширенное открытие файла)? А что будет, если от-

крыть файл для чтения, а затем изменить режим доступа прямым обра-

щением к SFT?

Конечно же, авторы антивирусных мониторов не столь наивны. Просто

они никогда не раскрывают свои профессиональные секреты. Например,

авторы программы AVPTSR реально учли и использовали все эти мето-

дики и тонкости.

Итак, предположим, что гипотетический антивирусный супермонитор:

- отслеживает и блокирует попытки трассировки 21-го прерывания;

- для контроля "опасных" функций DOS встраивается в начало обра-

ботчика прерывания INT 21h;

- для предотвращения прямого обращения к DOS использует флаг,

сбрасываемый либо во вставленном фрагменте, либо в обработчике

прерывания 2Ah (более грамотный подход).

Эти действия монитора порождают соответствующие проблемы при

конструировании неотслеживаемого обращения к DOS.

Первая проблема достаточно просто решается с использованием "мето-

да предопределенных адресов".

Для решения второй проблемы стоит проанализировать возможное

расположение в обработчике DOS точки перехода на антивирусный

монитор. Очевидно, это может быть точка 0 либо точка 1.
В самом

худшем случае можно допустить, что врезка происходит непосред-

ственно после команды проверки на максимальное значение номера

функции. Далее обработчик DOS "растекается" на многочисленные

ручейки, поэтому отследить их все крайне затруднительно. По край-

ней мере, обработчики функций OFh, 3Dh и 5Fh попадают в разные

ручейки. Однако, при использовании ограниченного набора функций

они могут разместиться и в одном ручейке, что намного упростит ре-

шение данной задачи. Функции 3Ch-43h, отвечающие за создание, от-

крытие, закрытие, чтение, запись, атрибуты и перемещение, действи-

тельно располагаются в одном общем ручейке. Это позволяет

использовать адрес точки 2 для прямого обращения к DOS. Монито-

ры, скорее всего, не будут отслеживать эту точку.

Решение третьей проблемы также не вызовет особых затруднений.

Один из вариантов - замаскировать прерывания таймера и изменить

вектор 8-го прерывания перед прямым обращением к DOS. Вместо из-

менения вектора можно попробовать вставить инструкции IRET в нача-

ло текущего (антивирусного) обработчика. При использовании все того

же метода "предопределенных адресов" и, зная позицию инструкции

INT 2Ah в обработчике DOS, перед прямым обращением к DOS следу-

ет просто заменить этот вызов двумя командами NOP.


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