Блокировщик вируса

Блокировщик вируса

Рассмотрим пример. В дисплейном классе ВУЗа эпидемия, часть машин заражена неизвестным вирусом. До конца сессии – несколько дней, выключение машин из учебного процесса смерти подобно (в первую очередь для обслуживающих класс сотрудников). Ситуация усугубляется тем, что студенты постоянно переносят программы на дискетах с одной машины на другую. Как ограничить распространение эпидемии, пока вирус не уничтожен?

Выход – написать антивирус-блокировщик. Практически все резидентные вирусы определяют факт своего наличия в памяти машины, вызывая какое-либо программное прерывание с «хитрыми» параметрами. Если написать простую резидентную программу, которая будет имитировать наличие вируса в памяти компьютера, правильно «отзываясь на пароль», то вирус, скорее всего, сочтет эту машину уже зараженной. Даже если некоторые файлы на машине содержат в себе код вируса, в случае использования блокировщика заражения всех остальных файлов не произойдет.

Разумеется, надо попытаться запустить блокировщик раньше всех остальных программ, например, в файле config.sys:

install c:utilstopsvc.com

Но если вирус успел заразить command.com или стартует из загрузочного сектора, то антивирус-блокировщик не поможет.

Листинг программы, блокирующей распространение вируса SVC-1740:

;; Резидентный блокировщик вируса SVC?1740

;; (c) К. Климентьев, Самара 1997

cseg segment

assume cs:cseg, ds:cseg, ss:cseg

org 100h

;Переходим к инициализации программы

Start:

jmp Install

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

Int21:

;Проверим номер функции, если 83h –

;то это запрос присутствия вируса

cmp ah, 83h

jnz Skip21

;Ответим, что вирус присутствует

mov dx, 1990h

;Запускаем оригинальный обработчик прерывания

Skip21:

db 0EAh ;Код команды JMP

Ofs21 dw ?

Seg21 dw ?

;Инициализируем программу

Install:

;Проверим, не инсталлирована ли уже эта программа. Если

;инсталлирована, выведем сообщение об этом и выйдем из программы.

;Вторую копию программы инсталлировать не имеет смысла

mov ah,83h

int 21h

cmp dx, 1990h

jz Already

;Считаем оригинальный вектор прерывания INT 21h

mov ax,3521h

int 21h

mov Ofs21, bx

mov Seg21, es

;Установим наш вектор прерывания INT 21h

mov ax, 2521h

mov dx,offset Int21

int 21h

;Выведем сообщение об успешной инсталляции программы в памяти

mov ah,9

mov dx, offset OkMes

int 21h

;Выйдем из программы, оставив обработчик резидентным

mov dx, offset Install

int 27h

;Выведем сообщение о том, что вирус

;или наша программа уже в памяти

Already:

mov ah,9

mov dx, offset BadMes

int 21h

ret

;Сообщения программы

OkMes db ”Yeah! STOPSVC installed now!”,13,10

db ”(c) KostyaSoft, Samara 1997$”

BadMes db 7,”Perhaps, virus is in memory already. Sorry.$”

cseg ends

Данный текст является ознакомительным фрагментом.