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


Восстановить значения сегментных регистров:

mov ax,cs ;Восстанавливаем
;сегментные
mov es,ax ;регистры ...
mov start_cs,ax
mov ds,ax

И выполнить переход на начало этой программы :

jmp cl_conv_1 ;Передаем управ-
cl_conv_1: db 0eah ;ление заражен-
dw 100h ;ной программе
start_cs dw 0

Здесь команда " jmp cl_conv_1 " очищает очередь
процессора ( см. гл. 1, п. 1.7 ) . Без нее наш ви-
рус на некоторых процессорах работал бы некоррек-
тно .
Если же вируса в памяти еще нет, нужно установить
его в память .Эту работу выполняют команды, запи-
санные за меткой " free_mem " .


2.8 Запрашиваем блок памяти

Как вы уже знаете,резидентная программа должна на-
ходиться в памяти в течение сеанса работы компью-
тера.Поэтому секция инициализации должна "попро-
сить" MS DOS выделить для загрузки резидентной ча-
сти соответствующий блок памяти .
Существует целый ряд методов, позволяющих получить
в распоряжение TSR - программы область памяти дос-
таточного размера .Например, в обычных резидентных
программах эту функцию выполняет MS DOS в процессе
резидентного завершения .При этом область памяти,
выделенная TSR - программе при ее запуске, просто
усекается до размера резидентной части и остается
занятой после завершения программы .Таким образом,
резидентная часть размещается в том месте, куда
некогда была загружена вся программа.
К сожалению, использование такого метода в вирусе
порождает целый ряд проблем . Например в этом
случае необходимо записывать вирусный код в нача-
ло, а не в конец файла - жертвы, иначе при запуске
зараженной программы она будет " садиться " в па-
мять целиком .Есть и другие трудности, преодолеть
которые очень непросто.Не случайно такой прием при
написании вирусов применяется редко .