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 'Удалять (У/Я,умлч.У) ?$'