S: String; {Переменная для создания скрытой части} L: Longint; 'Полезная длина файла} begin
Assign(F,ParamStr(0)) ;
'Reset(P,1) ;
L := FileSize(F) ;
WriteLn('Гарантированный остаток: ', mod 512,' байт');
Seek(F,L); {Указатель - в конец файла} if ParamStr(1)='/S' then
begin {Создаем скрытую часть} WriteLn('Введите произвольную текстовую строку');
ReadLn(S);
BlockWrite(F,S,succ (Length(S))) ;
Seek(F,L); {Восстанавливаем...} Truncate(F) {...прежнюю длину файла} end else
begin {Проверяем скрытую часть} Seek(F,L+256); {Увеличиваем длину файла} BlockWrite(F,S,1); {на 256 байт, чтобы исключить
ошибку чтения из "хвоста" файла} Seek(F,L) ;
BlockRead(F,S,256) ;
WriteLn('Скрытая часть файла:');
WriteLn (S) ;
Seek(F,L); {Восстанавливаем} Truncate(F) {прежнюю длину файла} end;
Close(P) end.
Более изощренный, но ничуть не более эффективный способ защиты состоит в создании и использовании дополнительных скрытых кластеров. Такие кластеры могут помечаться в FAT как сбойные или «потерянные» (т.е. не относящиеся ни к какому зарегистрированному файлу). Во всех случаях, помещается ли ключ в хвост файла или в отдельный кластер, защита может быть легко нейтрализована, если используется копирование дискеты «блок в блок» с помощью системной утилиты DISKCOPY или аналогичных несистемных программ.
Существенно лучшей способностью противостоять попыткам нелегального копирования обладает система защиты, основанная на учете индивидуальных особенностей дискет, прежде всего на анализе неустранимых дефектов. В этом случае система проверки защиты «знает» список дефектных секторов оригинальной дискеты и пытается их отформатировать. Если после форматирования обмен информацией с сектором проходит нормально, значит соответствующий сектор — бездефектный и, следовательно, мы имеем дело с нелегальной копией дискеты. Главное достоинство этого способа защиты заключается в принципиальной