Смекни!
smekni.com

Защита программы от нелегального копирования (стр. 3 из 7)

Для создания легальной копии программы должна использоваться особая технология подготовки дискеты. Эта особенность в данном случае заключается в том, что на стандартной дискете диаметром 3,5 дюйма, рассчитанной на емкость 1,44 Мб, создается дополнительная дорожка из нестандартных 256-байтных секторов. Один из секторов этой дорожки используется для записи ключевой информации. В процессе проверки легальности копии программы процедура ProtCheck считывает этот сектор и контролирует его содержимое. Для создания ключа используется программа Diskette. Эта программа на дискете емкостью 1,44 Мб создает 81-ю дорожку с 18-ю секторами размером по 256 байт, причем для нее используется обратный фактор чередования, т. е. секторы на дорожке размещаются в последовательности 18,17,16,…,2,1. Для этого она корректирует таблицу параметров дискеты, которую берет или в ПЗУ или в ОЗУ по определенному адресу [4], [5]. Программа сохраняет копию старой таблицы параметров дискеты и после завершения работы восстанавливает ее. В первый сектор новой дорожки записывается произвольная информация и число установок на жесткий диск защищаемой программы, (это число установок вводится пользователем при создании ключевой дискеты). Затем сектор читается и проверяется правильность операции записи-чтения. В конце программы измеряется время доступа к новой дорожке и стандартной дорожке. Для чтения и записи сектора используется прерывание $13. В случае ошибки чтения или записи сектора, программа выводит сообщение об ошибке и восстанавливает старую таблицу параметров дискеты.

Жесткая привязка программы к дискете создает вполне понятные неудобства пользователю. Эти неудобства можно устранить, если разрешить пользователю осуществлять самостоятельную установку программы на жесткий диск, т. е. создавать легальные стационарные варианты программы. Чтобы процесс тиражирования был контролируем, каждая установка программы на ЖД осуществляется только при наличии ключевой дискеты, при этом программа ведет подсчет общего количества созданных с ее помощью стационарных копий.

Процедура ProtCheck вызывается из защищаемой программы всякий раз, когда требуется установить легальность копии. Ее заголовок имеет следующий вид:

ProcedureProtCheck(varNorma,Alarm;varRes:Integer)

В теле процедуры параметры-переменные Norma и Alarm трактуются как параметры процедурного типа

type

ProcType = Procedure;

т. е. являются адресами двух процедур без параметров. Процедура Alarm вызывается в случае, если программа обнаружила признаки нелегального копирования, а Norma – если эти признаки отсутствуют. В переменной Res возвращается результат работы ProtCheck: 0 – если выполнялась процедура Norma (легальная копия), 1 - выполнялась Alarm (нелегальная копия), 2 – не выполнялась ни та, ни другая процедура, так как программа не обнаружила дискету в приводе ГД и не смогла проверить легальность копии.

Процедура ProtCheck начинает работу с проверки поля Hard в глобальной типизированной константе Key. Это поле используется для анализа стационарности программы: если поле имеет значение 0, реализуется контроль мобильного варианта, в противном случае – стационарного варианта (установка поля Hard и всей константы Key осуществляется с помощью функции SetOnHD, см. ниже).

При контроле мобильного варианта программа пытается прочитать сначала на диске А, а если это не удается – на диске В ключевой сектор (первый сектор на нулевой поверхности дорожки номер 81) размером 256 байт. Этот сектор должен содержать следующую информацию:

1-й байт – ключ для шифровки содержимого сектора с помощью операции XOR;

17-й байт – количество уже созданных стационарных копий;

200-й байт – максимальное количество стационарных копий (если 255 - количество копий не ограничено);

256-й байт – контрольная сумма со 2-го по 255-й байт.

Если поле Hard константы Key содержит нулевое значение, осуществляется контроль стационарного варианта. В этом случае поле Dat содержит эталон даты создания ПЗУ, а поле Hard используется как ключ для шифровки этого поля с помощью операции XOR.

Если контроль стационарного варианта дает отрицательный результат (нелегальная копия), автоматически осуществляется анализ мобильного варианта (контроль дискеты). Таким образом, любая копия программы гарантированно работает, если в распоряжении пользователя есть ключевая дискета. Однако после правильной установки программы на жесткий диск с помощью процедуры SetOnHD программа может работать и без этой дискеты до тех пор, пока она не будет перенесена на новый компьютер, дата создания ПЗУ которого отличается от эталонной.

Для правильного создания стационарной копии программы используется функция SetOnHD, имеющая следующий заголовок:

FunctionSetOnHD: Integer;

Перед использованием функции SetOnHD необходимо любыми стандартными для ДОС средствами скопировать программу в один из каталогов жесткого диска. Эта функция вызывается в такой «нелегальной» копии, перед этим в любой привод ГД необходимо вставить ключевую дискету со снятой защитой от записи. Результат, возвращаемый функцией, имеет следующий смысл:

1 – в привод ГД не вставлена дискета;

2 – в привод вставлена дискета не эталонного типа (не 1,44 Мб или нет скрытого сектора);

3 – дискета защищена от записи или при записи на нее возникла ошибка;

4 – данный вариант программы не скопирован предварительно на жесткий диск;

5 – ошибка доступа к жесткому диску (программа не может прочитать собственный файл или не может записать в него новое значение константы Key);

6 – исчерпан лимит стационарных копий;

7 – данная программа уже представляет собой стационарный вариант программы, т. е. константа Key в ней уже определена.

Любое неотрицательное значение результата свидетельствует об успешном создании стационарной копии и равно количеству еще не использованных установок программы на жесткий диск.

В ходе установки программа контролирует ключевую дискету, затем определяет характерные признаки данного ПК и заносит эти признаки в константу Key. Поскольку защищается только тот экземпляр программы, в котором вызвана функция SetOnHD, нужно предусмотреть соответствующий вариант запуска программы. Например, можно проанализировать ключи команды запуска с целью проверки специального ключа создания стационарного варианта или предусмотреть соответствующую опцию в диалоговом меню, создаваемом программой в ходе работы.

Функция RemoveFromHD осуществляет обратные действия: уничтожает текущую стационарную копию и соответствующим образом увеличивает запас неизрасходованных установок программы. Она возвращает одно из следующих значений:

1 – в привод ГД не вставлена дискета;

2 – в привод вставлена дискета неэталонного типа (емкостью не 1,44 Мб или нет скрытого сектора);

3 – дискета защищена от записи или при записи на нее возникла ошибка;

4 – данный вариант программы не скопирован предварительно на жесткий диск;

5 – ошибка доступа к жесткому диску (программа не может прочитать собственный файл или не может записать в него новое значение константы Key).

Любое неотрицательное значение свидетельствует об успешном удалении стационарной копии и равно количеству еще не использованных установок программы на жесткий диск.

Также прилагается программа TEST.EXE, которая иллюстрирует приемы работы с модулем F_Prot. Программа анализирует ключи запуска: если используется ключ /SET, осуществляется установка программы на жесткий диск, если ключ /REMOVE, уничтожается стационарная копия программы, если этих ключей нет в команде запуска, программа осуществляет контроль легальности копии. Ключевая дискета должна быть предварительно подготовлена с помощью программы Diskette.

Программа Diskette и модуль F_Prot используют модуль F_Disk, который предназначен для работы с диском на физическом уровне.


Заключение

В результате выполнения данного курсового проекта, был написан модуль для защиты программ от нелегального копирования. Данный модуль позволяет защищать как стационарные и мобильные варианты программ. Этот модуль подключается к программе, которую требуется защитить, и программа использует его функции. Если функция проверки легальности копии возвращает негативный результат, то, на свое усмотрение, программист может сделать так, чтобы программа или не запускалась или выводила предупреждающее сообщение и реализовывала не все свои возможности. Для защиты стационарного варианта программы используется проверка даты создания ПЗУ данного ПК, если она не равна эталонной, то копия считается нелегальной. Для защиты мобильного варианта программы на ключевой дискете была создана дорожка с секторами нестандартного размера. Первый сектор дорожки содержит информацию, о программе, защищаемой от нелегального копирования. Ключевая дискета была подготовлена с помощью программы Diskett. Для тестирования работы модуля была написана программа Test.exe. Она показала, что написанный модуль работает верно.


Список ссылок

1. Фаронов В.В. Турбо Паскаль (в 3-х книгах). Кн.3. Практика программирования. – М.: Учебно-инженерный центр «МВТУ – ФЕСТО ДИДАКТИК», 1993. – 304с.

2. Юров В., Хорошенко С. Ассемблер: учебный курс – СПб: Издательство «Питер», 2000. – 672с.