Реферат: Система защиты от несанкционированного копирования
Требования к программной реализации:
Как можно меньший объём кода, дописываемого к защищаемому программному продукту.
Как можно меньшее время работы кода защиты перед передачей управления основной (защищаемой) программе.
Для реализации программы автором выбран язык программирования ассемблер (Assembler). Подчеркнём те особенности языка, которые и определили этот выбор:
Ассемблер является языком низкого (машинного) уровня, в отличие от языков высокого уровня (ЯВУ), из которых наиболее часто применяемыми в последнее время являются Бейсик (Basic), Паскаль (Pascal), Си (С). Следовательно язык Ассемблера максимально приближен к аппаратным средствам компьютера и его «натуральным» возможностям, что позволяет организовать непосредственное управление аппаратурой.
Программы на языке ассемблера очень детальны. Язык ассемблера требует планирования буквально каждого шага ЭВМ. Человек, который знаком только с языками высокого уровня, вероятно, отнесёт это обстоятельство к недостатку языка. Его можно понять, так как, во-первых, при большом объёме исходного текста резко возрастает вероятность ошибки, а во-вторых, бесконечное число деталей может помешать добиться оптимальности программы в целом. Однако, максимальная детализация (ведь одна мнемоника языка ассемблера соответствует одной машинной команде) позволяет решать задачи управления аппаратурой максимально эффективно, т.е. при небольшом объёме кода (это не означает маленького размера исходного текста) за минимальное время.
????????? ?????????.
Программа состоит из трёх модулей:
Модуль Frozen - подготавливает ключевую дискету и записывает на неё инсталлятор, в который включает защищаемую программу.
Модуль Install, который проверяет дискету и, если она является ключевой, устанавливает на винчестер пользовательскую программу (Task), защищённую модулем Ind.
Модуль Ind, который при первом запуске определяет характеристики среды и сохраняет их, а при всех последующих запусках сравнивает текущие характеристики среды с определёнными при первом запуске. Если характеристики не изменились, то модуль расшифровывает и запускает Task. После отработки Task удаляется с винчестера.
Рассмотрим эти модули поподробнее.
?????? Frozen.
Модуль Frozen подготавливает ключевую дискету следующим образом. На дискете форматируется дорожка с номером 80 (нумерация дорожек начинается с нуля). Так как DOSом на дискетах объёмом 1.44 мегабайта используются только дорожки с номерами от 0 до 79, это действие никак не повлияет на информацию, хранимую обычным способом. Дорожки, находящиеся за стандартным полем форматирования (в случае дискеты 1.44 мегабайта – это дорожки с номерами не менее 80), называют инженерными цилиндрами. В первый сектор восьмидесятой дорожки (длина сектора – 512 байт, нумерация секторов ведётся с единицы) записывается счётчик копий и сигнатура. Счётчик копий представляет собой байт, который содержит оставшееся число инсталляций защищённой программы. Программа Frozen запрашивает у пользователя количество копий и полученным числом инициализирует счётчик копий. Сигнатурой является строка «Copyright © KES_Company, 1998». После этого на подготовленную дискету записывается модуль Install, включающий защищаемую программу Task.
?????? Install.
Итак, модуль Frozen записывает на ключевую дискету модуль Install.
Модуль Install осуществляет инсталляцию модуля Ind на жёсткий диск только при одновременном выполнении двух условий:
программа Install должна быть запущена с ключевой дискеты – дискеты, подготовленной модулем Frozen;
счётчик копий не должен быть равен нулю.
Следовательно, одной из задач модуля Install является определение факта подлинности ключевой дискеты. Данная задача решается следующим образом. Программа Install читает первый сектор восьмидесятой дорожки и, если он содержит сигнатуру, то делается вывод о подлинности ключевой дискеты. После каждой инсталляции счётчик копий декрементируется. Если значение счётчика окажется равным нулю, то это означает то, что количество инсталляций (заданное при подготовке дискеты программой Frozen) с данной дискеты исчерпано. После записи на жёсткий диск модуля Ind модуль Install запускает его на выполнение. Смысл этого действия будет понятен из нижеследующего описания модуля Ind.
?????? Ind.
При первом запуске программы Ind осуществляется привязка к индивидуальным характеристикам компьютера для предотвращения копирования программы на другой компьютер. Программа запоминает характеристики компьютера, на котором она была запущена в первый раз во внутренних полях и при последующих запусках сравнивает их с текущими. При несовпадении делается вывод о несанкционированном копировании. Для того, чтобы привязаться к конкретному компьютеру не достаточно определения какой-нибудь одной характеристики (например, процессора), т.к. по одному параметру нельзя с достаточной уверенностью идентифицировать компьютер (совершенно очевидно, что в мире очень много компьютеров с одинаковыми процессорами).
Даже, учитывая то, что в мире существует множество компьютеров с совершенно одинаковыми характеристиками, идентификация компьютера множеством его характеристик даёт нам вполне надёжную привязку.
?????????????? ??????????????.
Индивидуальные характеристики, используемые при работе модулем Ind:
FDDCount – число накопителей на гибких магнитных дисках (НГМД);
FDDType – тип накопителей НГМД;
BaseMemory – объём базовой памяти;
ExtMemory – объём расширенной памяти (памяти сверх 1 мегабайта);
BIOSData – дата издания ROM-BIOS;
CPUType – тип центрального процессора;