3f4'_____________ _ _____________.....__.. .„.. ___..„._„ „_ ..„PPM0*81*^
'<FAG> - имя ЕХЕ-файла с коДом фага; если ключ не задан» Код',
' берется из файла FAG.PRG;',
'Ключ /NOBAK блокирует создание резервных копий защищаемых фай-',
'лов (с расширением ВАК).',
'Примеры:',
' eetfag ffiyprog'^
'Файл MYPROG.EXE будет содержать защищенную программу,MYPROG.ВАК',
'- исходную. Код фага будет взят из файла FAG.PRG',
' setfag d:\dir\* /nobak /f:myfag.exe',
•Защищаются все ЕХЕ-файлы из каталога D:\DIR, резервные копии не',
' создаются, код фага берется из MYFAG.EXE.',
' (С) В.В.Фаронов, 1992');
type
HeadType » record case Byte of 1: (
Sign : Word? {Сигнатура 'MZ' - $5A4D)
PartPag: Word; fVaoa'b йвпалного сектора}
PageCnt: Word; {Количество секторов)
ReioCnt: Word; (Количество элементов в таблице перемещения)
HdrSize: Word; {Длина заголовка в параграфах)
MinMem : Word; (Минимальный размер кучи)
MaxMem : Word; {НаксчмальныЯ рааивр кучи)
Re^oSS : Word; {Начальное значение сегмента стека SS}
ExeSP : Word; {Начальное значение указателя стека SP)
ChkSum : Word; {Контрольная сумма всех слов файла)
ExelP : Word; {Смещение точки запуска программы)
ReloCS : Word; (Начальное значение сегмента кода CS)};
2:W: array [1..12] о- Word) end;
ТКеу = record
Head.24: HeadType; {24 байта эталонного заголовка) Starts: Word; (OTHOWt'enlstaM сёТиент} StartO: Word; (и смещение точки запуска программы) Leng24: LongInt; {Длина незараженной программы минус 24 байта) Key : Word; {Клвч гжфрваки) end;
ByteArr = array [l..Max!nt] of Bytey var
H,HFag: HeadType;
HH : TKey;
fe, {ЕХЕ-файл} ft: file; (Файл с кодой фага} LFag: LongInt; {Длина кода фага) CFag: ^ByteArr; (Указатель на код фага} NE: String; (Имя исходного ЕХЕ-файла} NF: String; (Имя файла с кодом фага) S: SearchRec;
d: DirStr;
n: NameStr;
e: ExtStr;
LS: LongInt; {Смещение для фага} const
FagName = 'Fag.pre'; (Имя файла-фага BakFile : Buolean ~ True; (Признак ВАК-файлов} f., —————_-——-——;
Procedure Help;
{Выводит справку об использовании программы и завершает работу) const
Bord = 14;
var