Тексты программ ______ ___________ _______ 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');