Защита программы от нелегального копирования

Автор: Пользователь скрыл имя, 28 Ноября 2011 в 22:26, курсовая работа

Краткое описание

В данном курсовом проекте рассматривается проблема создания программы, нелегальное (без ведома официального распространителя) копирование которой приводит к потере программы способности нормально работать.

Оглавление

Введение………………………………………………………………………..3
Описание существующих методов………………………………………..5
Проверка типа ПК и версии ДОС……………………………………..6
Проверка даты изготовления и контрольной суммы ПЗУ…………..6
Проверка места расположения файла на диске………………………7
Проверка состава аппаратных средств………………………………..8
Использование скрытых частей программы и особенностей физических носителей информации…………………………………..............9
Обоснование выбора используемого метода…………………………….11
Описание программы……………………………………………………...12
Заключение…………………………………………………………………….18
Список ссылок……………..…………………………………………………..19
Приложение……………………………………………………………………20

Файлы: 1 файл

Курсовик по КИЗИ.doc

— 344.00 Кб (Скачать)

    Получение сведений о конфигурации ПК может  быть осуществлено посредством чтения данных по определенным адресам КМОП-памяти. Более подробно об этом написано в [1], [4], [5].

    1. Использование скрытых частей программы и особенностей физических носителей информации

    Достаточно  эффективным способом защиты (главным  образом для мобильных программ) может служить создание и использование скрытых частей программы и/или особенностей физических носителей информации [3].

    Скрытые части программы – это участки  дискового носителя, тем или иным способом связанные с программой, но не зафиксированные в качестве файлов ДОС. В подавляющем большинстве случаев программе нет необходимости искусственно создавать такие участки, поскольку они уже имеются в «хвосте» любого файла. Дело в том, что ДОС распределяет дисковое пространство кластерами, имеющими длину от 512 до 4096 и более байтов. Даже если полезная длина файлов составляет всего несколько байт, ДОС выделит такому файлу целый кластер, большая часть которого будет заполнена «мусором» - случайной информацией, сохранившейся от предыдущего использования кластера в составе другого файла. При копировании файлов стандартными средствами ДОС копируется только полезная часть кластера, так что на новом месте «хвост» файла в общем случае будет заполнен другой информацией [1].

    Более изощренный, но ничуть не более эффективный способ защиты состоит в создании и использовании дополнительных скрытых кластеров. Такие кластеры могут помечаться в FAT как сбойные или «потерянные» (т. е. не относящиеся ни к какому зарегистрированному файлу). Во всех случаях, помещается ли ключ в хвост файла или в отдельный кластер, защита может быть легко нейтрализована, если используется копирование дискеты «блок в блок» с помощью утилиты DISKCOPY или аналогичных несистемных программ.

    Существенно лучшей способностью противостоять  попыткам нелегального копирования обладает система защиты, основанная на учете индивидуальных особенностей дискет, прежде всего на анализе неустранимых дефектов. В этом случае система проверки защиты «знает» список дефектных секторов оригинальной дискеты и пытается их отформатировать. Если после форматирования обмен информацией с секторами проходит нормально, значит соответствующий сектор – бездефектный и, следовательно, пользователь имеет дело с нелегальной копией дискеты. Главное достоинство этого способа защиты заключается в принципиальной невозможности создать программными средствами на нормальной дискете неустранимые дефекты.

    Как показывает практика, лишь очень небольшое  число дискет (менее 1%) имеет заводские дефекты изготовления, поэтому при массовом тиражировании коммерческих программ приходится создавать такие дефекты искусственно. Для этого иногда используются лазеры, а чаще – обыкновенная булавка. Однако следует иметь в виду, что царапины и проколы на поверхности дискеты могут повредить считывающие головки накопителя [1].

    Недостатком описанного способа защиты являются относительно большие затраты времени на контроль всей дискеты и потеря работоспособности некоторой ее части. От этих недостатков можно избавится, если на дискете создать программным способом нестандартные для ДОС особенности [1]. Этими способностями могут быть:

    - нестандартная длина секторов  на всей дискете или какой-либо  одной ее дорожке;

    - специальное расположение (фактор  чередования) секторов на дорожке;

    - нестандартное количество дорожек.

    Разумеется, надежность защиты с помощью программно создаваемых особенностей структуры дискеты будет значительно меньше. Тем не менее, следует помнить, что в большинстве случаев «взломщик» программы стремится изменить ее код, а не имитировать особый способ копирования дискет, так что несложная защита, связанная с использованием дополнительной дорожки, может оказаться ничуть не хуже, чем защита с помощью «лазерной дырки».

    Как известно, ДОС может оперировать  только с секторами длиной по 512 байт (исключением является создание утилитой VDISK виртуальных электронных дисков, размер секторов которых может отличаться от 512 байт). В то же время контроллеры ГД способны создавать и использовать секторы другого размера – по 128, 256 или 1024 байт. При обнаружении сектора нестандартного размера ДОС считает этот сектор сбойным, что можно использовать для защиты программы [5].

    Далее, дорожки на дискете располагаются  так, что самой внешней является нулевая дорожка, а самой внутренней – дорожка с максимальным номером. Обычно ДОС использует одинаковое количество секторов на всех дорожках, поэтому угловой размер каждого сектора постоянен, а, следовательно, плотность записи информации растет с ростом номера дорожки. Количество секторов на дорожке и дорожек на дискете ДОС назначается так, чтобы даже для самой внутренней дорожки эта плотность не превысила некоторого значения, еще гарантирующего уверенную работу схем контроллера ГД. На практике оказывается, что подавляющее большинство современных контроллеров способно обслуживать большее количество дорожек, чем принято в ДОС. В целях защиты от копирования программа может создать и использовать одну или несколько дополнительных дорожек, но не вносить их в список «видимых для ДОС», т.е. не изменять поле в загрузочном секторе, указывающее общее количество секторов на диске. Разумеется, возможен и другой вариант: можно «украсть» у ДОС несколько дорожек, уменьшив стандартное значение этого поля, однако нестандартная емкость дискеты легко обнаруживается, что снижает эффективность защиты. Дополнительные дорожки могут отделяться от основной рабочей зоны дискеты неотформатированным интервалом, что может затруднить их обнаружение специальными программами копирования [1],[4].

    Наконец, программа может использовать нестандартный  фактор чередования секторов. Этот фактор влияет на время чтения/записи группы смежных секторов. Если какую-либо дорожку отформатировать с намеренно неоптимальным фактором чередования, время чтения этой дорожки может оказаться заметно больше, чем при чтении любой другой дорожки – это еще один способ защиты. 

  1. ОБОСНОВАНИЕ ВЫБОРА ИСПОЛЬЗУЕМОГО  МЕТОДА
 

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

  1. ОПИСАНИЕ  ПРОГРАММЫ
 

    Защита  программ от нелегального копирования реализована в виде модуля, написанного на языке Turbo Pascal. Выбор этого языка программирования объясняется тем, что этот язык относительно прост, и при этом позволяет делать ассемблерные вставки и напрямую обращаться к памяти. Этот модуль подключается к программам, которые требуется защитить, и в программах используются его функции.

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

    Ниже  описана разница в защите стационарной и мобильной копиях. Стационарная программа учитывает индивидуальные характеристики компьютера и может исполняться только на одном конкретном ПК. Защита таких программ обычно не вызывает серьезных проблем, для этого можно использовать очень большой набор индивидуальных признаков. Наоборот, мобильная программа не может связываться с конкретным ПК и должна учитывать какие-то привносимые признаки, т. е. признаки, которые относительно просто создать на любом ПК на время работы программы. Здесь выбор признаков намного беднее: чаще всего для этих целей используются дополнительные аппаратные устройства (ключевая дискета или аппаратный ключ), которые придаются каждой легальной копии и без которых программа не может работать нормальным образом. Вариант использования ключевой дискеты и реализован в модуле F_Prot.

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

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

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

    Procedure ProtCheck(var Norma,Alarm;var Res: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, имеющая следующий заголовок:

Информация о работе Защита программы от нелегального копирования