else

NotFag:

{Ошибка записи в конце ЕХЕ-файла. Восстанавливаем его:} begin

Seek(fe,0);

BlockWrite(fe,H,SizeOf(H)) ;

Seek(fe,L01d) ;

Truncate(fe) end;

end;

Close(fe) end; {SetVlrFag} /————————————;

begin

CheckParam; {Проверяем параметры обращения}

OpenFag; {Открываем файл-фаг}

while CorrectName do {Получаем имя очередного защищаемого файла}

SetVirFag {Устанавливаем защиту) end.

П8.2. Фаг Fag.asm

Ниже приводится текст фага, устанавливаемого на ЕХБ — файлы для защиты их от вирусов. Для большей наглядности пояснения вкраплены в тело программы, но не выделены обязательным знаком комментария, в качестве которого в ассемблерных программах используется точка с запятой. Поскольку эти пояснения набраны с отступом от левого края листа, я думаю, Вы сможете их легко отличить и при повторении программы либо не включите эти пояснения в ассемблерную программу, либо оформите их надлежащим образом.

CSEG SEGMENT PARA PUBLIC 'CODE'

VirCheck PROC FAR

ASSUME CS:CSEG,DS:CSEG,S3:CSEG

; Следующие 17 слов готовятся программой-инсталлятором:

Head dw 12 dup(?) ;Зашифрованный ключ Starts dw ? Относительный сегмент StartO dw ? и смещение точки запуска Lengi dw ? Эталонная длина минус

24 байта - младшая часть Leng2 dw ? и старшая часть Key dw ? шифр ключа

; Константы и переменные ;

; ————————-—————;

PSP dw ? Сегмент PSP CSO dw ? Сохранение CS SPO dw ? Сохранение SP NameFE db 80 dup(?) ASCIIZ-имя ЕХЕ-файла NameF$ db 80 dup(?) ASCIIZ-имя $У$-файла NameFV db 80 dup(?) ASCIIZ-имя VIR-файла Buffer equ Word ptr NameF$ LName dw ? Длина имени без учета

расширения и нуля HandExe dw 0 Описатель ЕХЕ-файла TxtO db 13,10,'$' EOL Txtl db ^ 'Файл $'

Txt2 db ' заражен вирусом!',13,10,'$' Txt21 db 'Вирус поразил начало файла'

db ' - удаление невозможно!',13,10 Txt20 db 'Нажмите любую клавишу...$' Txt22 db 'Удалять (У/Я,умлч.У) ?$'