Тексты программ ______ ___________ _______ 369

I заражения исполняемого ЕХЕ-файла компьютерным I вирусом. Эталонный заголовок файла и его длина запоминаются при первом запуске программы

в типизированной константе HEAD. Если факт

заражения установлен, программа сообщает об

этом, переносит копию на место испорченного

вирусом заголовка файла и восстанавливает

длину файла. +——————————————————————————„———+^

INTERFACE var

CheckVirusResult: Integer;

{Результат работы программы:

sss 0: вирус не обнаружен;

= 1: установлена защита файла;

—1: вирус удалей с разрешения пользователя/

=-2: вирус удален автоматически;

=-3: контроль блокирован ключом /NOANTI;

sa-4: вирус расположен в начале файла, удаление невозможно}

IMPLEMENTATION Uses DOS, CRT;

var

fff: file;

Procedure CheckFile;

type

{Заголовок ЕХЕ-файла}

HeadExeType = record case Byte of

0:t -• . , - ;

Sign : Word; {Сигнатура 'MZ' = $5A4Df

PartPag: Word; (Часть неполного сектора}

PageCnt: Word; {Количество секторов}^ -

ReloCnt: Word; {Количество элементов в таблице перемещения)

HdrSize: Word; (Длина заголовка в параграфах}

MinMem : Word; {Минимальный размер кучи)

MaxMem : Word; {Максимальный размер кучи)

ReloSS : Word; (Начальное значениесегмента стека SS)

ExeSP : Word; (Начальное значениуказателя стека SP!

ChkSum : Word; (Контрольная суммавсех слов файла)

ExelP : Word; {Смещение точкизапуска программы)

ReloCS : Word; (Начальное значениесегмента кода CS)

TablOff: Word; {Смещение таблицы перемещения}

Overlay: Word; (Номер оверлея (0 для главной программы!));

1: (Нет: array [1..14] of Word) end; (HeadExe)

{Ключ незараженного файла} KeyType = record

НЕ: HeadExeType; (Заголовок файла}

HL: LongInt; (Исходная длина файла}

HF: Boolean; (Флаг установки ключа)

Key: Word (Ключ для шифровки} end;

s8 = String [81;

const

H: KeyType =

(НЕ: (Нет: (0,0,0,0,0,0,0,0,0,0,0,0,0,0));

HL: 0;

HF: False;

Key: 0);

Key: array [1..4] of s8 =

('/NOANTI','/NOQUERY','/NOALARM','/NOCOPY');