TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

7.2.3. Проверка места расположения файла на диске

Хорошей индивидуальностью обладает физический номер кластера, начиная с которого на жестком диске располагается файл с защищенной программой. Действительно, вряд ли что-либо другое в аппаратно— программной среде ПК (кроме, разумеется, содержимого оперативной памяти) меняется столь же динамично, как файловая структура жесткого диска. При создании легальной копии номер начального кластера для файла программы на жестком диске в общем случае совершенно случаен. Если в момент запуска программа проверит этот номер, то в подавляющем большинстве случаев она легко обнаружит факт нелегального копирования

Я сам довольно долго использовал эту характеристику для защиты одной из своих программ. Насколько мне известно, десятки попыток нелегального переноса этой программы окончились неудачей. Тем не менее такой способ защиты нельзя считать идеальным по многим причинам. Проверка номера кластера выполняется далеко не так просто, как проверка типа ПК или даты изготовления ПЗУ, поскольку в стандартном Турбо Паскале нет средств для работы с дисками на физическом уровне. Однако главный недостаток заключается в другом: любое изменение местоположения файла даже в пределах одного каталога приводит к тому, что ранее установленная копия становится нелегальной. Это крайне неудобно для пользователя, в особенности если он часто прибегает к процедуре переупорядочения файловой структуры с помощью утилиты типа программы П.Нортона Speed Disk.

Для проверки номера кластера можно использовать модуль F_Disk, описанный в гл.3. В него входит процедура GetDirItem, возвращающая элемент каталога для заданного имени файла. Параметр FirstC этого элемента содержит интересующий нас номер.

Следующая программа выведет номер кластера для «своего» файла (т.е. ЕХЕ— файлйг в котором она расположена). Для нормальной работы программы в среде Турбо Паскаль она должна компилироваться на диск.

Uses F_Disk;

var

DI: Dir_Type;

begin

GetDirItem(ParamStr(0),DI) ;

WriteLn('Файл ',ParamStr(0),

' начинается с кластера ',DI.FirstC) end.

Если Вы считаете, что номер единственного кластера не обладает необходимой степенью индивидуальности, Вы можете проверять цепочку кластеров по таблице FAT или начальные кластеры нескольких файлов.

Разумеется, такая проверка может использоваться для защиты только стационарных программ.

 

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz