Блокировщик вируса
Блокировщик вируса
Рассмотрим пример. В дисплейном классе ВУЗа эпидемия, часть машин заражена неизвестным вирусом. До конца сессии – несколько дней, выключение машин из учебного процесса смерти подобно (в первую очередь для обслуживающих класс сотрудников). Ситуация усугубляется тем, что студенты постоянно переносят программы на дискетах с одной машины на другую. Как ограничить распространение эпидемии, пока вирус не уничтожен?
Выход – написать антивирус-блокировщик. Практически все резидентные вирусы определяют факт своего наличия в памяти машины, вызывая какое-либо программное прерывание с «хитрыми» параметрами. Если написать простую резидентную программу, которая будет имитировать наличие вируса в памяти компьютера, правильно «отзываясь на пароль», то вирус, скорее всего, сочтет эту машину уже зараженной. Даже если некоторые файлы на машине содержат в себе код вируса, в случае использования блокировщика заражения всех остальных файлов не произойдет.
Разумеется, надо попытаться запустить блокировщик раньше всех остальных программ, например, в файле 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Данный текст является ознакомительным фрагментом.