Защита от программ - антивирусов
Алгоритм работы резидентного EXE - вируса
Для начала рассмотрим алгоритм работы резидентного вируса, заражающего EXE-файлы. Он очень похож на соответствующий алгоритм для COM-вируса, поэтому подробно рассматриваться не будет:
Секция инициализации выполняет следующие действия:
- Получает управление при запуске зараженной программы.
- Проверяет, установлена ли в память резидентная часть вируса.
- Если резидентная часть не установлена, выполняются следующие действия:
- Отыскивается свободный блок памяти достаточного для размещения вируса размера.
- Код вируса копируется в найденный блок памяти.
- В таблице векторов прерываний соответствующие вектора заменяются точками входа в вирусные обработчики.
- Определяются значения CS, IP, SS и SP, необходимые для правильной работы программы, из которой стартовал вирус.
- Управление передается зараженной программе. Для этого вирус использует команду безусловного дальнего перехода или возврата из дальней процедуры. Адрес перехода задается вычисленными CS и IP. После этого начинается обычное выполнение программы.
В том случае, если резидентная часть вируса уже находится в памяти, он просто выполняет действия перечисленные в п.п. "d" и "e".
Резидентная часть работает по такому "сценарию":
- Анализирует все вызовы системного прерывания INT 21h с целью выявить переход оператора в новый каталог или смену текущего диска.
- Если обнаружится смена текущего диска или каталога, резидентная часть должна:
- Сохранить исходное состояние вычислительной системы.
- Найти на диске подходящий EXE-файл.
- Записать вирусный код в конец этого файла.
- Скорректировать заголовок файла (см. п.1.4 гл. 1 ч. 2).
- Восстановить исходное состояние вычислительной системы и передать ей управление.
Как и в случае с COM - вирусом, заражение файлов выполняет только резидентная часть. Вредные действия можно " возложить " как на резидентную, так и на транзитную часть (на транзитную - проще, а на резидентную - обычно сложнее.).
Честно говоря, эта глава просто является обобщением всех предыдущих. Поэтому все основное уже рассказано. Но есть несколько весьма интересных и заслуживающих вашего внимания вопросов, о которых почти не упоминается в литературе. Речь идет о построении вирусов, " невидимых " для антивирусных программ. В самом деле,один - единственный "обыск" с помощью программы DOCTOR WEB на диске или в памяти может свести все наши усилия к нулю. Поэтому самое время поговорить о способах скрытия вирусом своего наличия в вычислительной системе. Технику защиты вирусной программы от обнаружения мы рассмотрим на примере всем известного антивируса DOCTOR WEB.Именно эта программа является наиболее удачной и используемой. Как вы знаете, для обнаружения неизвестных вирусов DOCTOR WEB использует так называемый эвристический анализатор, моделирующий действия человека, желающего обнаружить новый вирус. Все изложенное ниже базируется на следующем предположении: эвристический анализатор, по существу, представляет собой комбинацию пошагового отладчика и программы, анализирующей результаты его работы. Перейдем к делу. Если вы " заразите " ваш компьютер написанным ранее резидентным COM - вирусом, а потом запустите DOCTOR WEB (режим тестирования памяти должен быть включен), то вирус будет обнаружен как неизвестный резидентный. Кроме того, антивирусная программа определит адрес в памяти, по которому находится вирусный код. Если вы просмотрите содержимое памяти по этому адресу,то увидите, что DOCTOR WEB "ошибся". А именно - по указанному адресу расположен собственно не сам вирус, а только его обработчик прерывания INT 21h.На остальные вирусные обработчики антивирус не обратил внимания. Исходя из этого можно сделать такие выводы:
- Эвристический анализатор определяет, на какой адрес указывает вектор прерывания INT 21h в таблице векторов.
- Далее вступают в действие следующие соображения: Обработчик прерывания INT 21h почти никогда не может находиться в самых младших (например, в области данных BIOS) или в самых старших (например, в последнем сегменте) адресах основной памяти. Поэтому при обнаружении такой ситуации эвристический анализатор считает, что система заражена неизвестным вирусом, и в качестве адреса, по которому расположен его код, выдает адрес обработчика INT 21h.
Как видим, все не так уже и сложно. Далее пользователь должен решать сам, действительно ли вирус присутствует в его компьютере. Отметим, что для решения этого вопроса нужно иметь довольно высокую квалификацию, поэтому для подавляющего большинства пользователей задача представляется неразрешимой.