Автор: Пользователь скрыл имя, 28 Ноября 2011 в 22:26, курсовая работа
В данном курсовом проекте рассматривается проблема создания программы, нелегальное (без ведома официального распространителя) копирование которой приводит к потере программы способности нормально работать.
Введение………………………………………………………………………..3
Описание существующих методов………………………………………..5
Проверка типа ПК и версии ДОС……………………………………..6
Проверка даты изготовления и контрольной суммы ПЗУ…………..6
Проверка места расположения файла на диске………………………7
Проверка состава аппаратных средств………………………………..8
Использование скрытых частей программы и особенностей физических носителей информации…………………………………..............9
Обоснование выбора используемого метода…………………………….11
Описание программы……………………………………………………...12
Заключение…………………………………………………………………….18
Список ссылок……………..…………………………………………………..19
Приложение……………………………………………………………………20
Перед использованием функции SetOnHD необходимо любыми стандартными для ДОС средствами скопировать программу в один из каталогов жесткого диска. Эта функция вызывается в такой «нелегальной» копии, перед этим в любой привод ГД необходимо вставить ключевую дискету со снятой защитой от записи. Результат, возвращаемый функцией, имеет следующий смысл:
-1 – в привод ГД не вставлена дискета;
-2 – в привод вставлена дискета не эталонного типа (не 1,44 Мб или нет скрытого сектора);
-3
– дискета защищена от записи
или при записи на нее
-4 – данный вариант программы не скопирован предварительно на жесткий диск;
-5 – ошибка доступа к жесткому диску (программа не может прочитать собственный файл или не может записать в него новое значение константы Key);
-6 – исчерпан лимит стационарных копий;
-7
– данная программа уже
Любое неотрицательное значение результата свидетельствует об успешном создании стационарной копии и равно количеству еще не использованных установок программы на жесткий диск.
В
ходе установки программа
Функция RemoveFromHD осуществляет обратные действия: уничтожает текущую стационарную копию и соответствующим образом увеличивает запас неизрасходованных установок программы. Она возвращает одно из следующих значений:
-1 – в привод ГД не вставлена дискета;
-2 – в привод вставлена дискета неэталонного типа (емкостью не 1,44 Мб или нет скрытого сектора);
-3
– дискета защищена от записи
или при записи на нее
-4 – данный вариант программы не скопирован предварительно на жесткий диск;
-5
– ошибка доступа к жесткому
диску (программа не может
Любое неотрицательное значение свидетельствует об успешном удалении стационарной копии и равно количеству еще не использованных установок программы на жесткий диск.
Также
прилагается программа TEST.
Программа
Diskette и модуль F_Prot используют модуль F_Disk,
который предназначен для работы с диском
на физическом уровне.
На рисунке 3.1 представлена структурная схема алгоритма основной части программы Test.exe.
Указатели на процедуры
обработки результата
проверки
Если параметр
вызова
равен '/SET'
В зависимости от результата
Рисунок 3.1 – Структурная схема алгоритма основной части
программы
Test.exe
ЗАКЛЮЧЕНИЕ
В
результате выполнения данного курсового
проекта, был написан модуль для
защиты программ от нелегального копирования.
Данный модуль позволяет защищать как
стационарные и мобильные варианты программ.
Этот модуль подключается к программе,
которую требуется защитить, и программа
использует его функции. Если функция
проверки легальности копии возвращает
негативный результат, то, на свое усмотрение,
программист может сделать так, чтобы
программа или не запускалась или выводила
предупреждающее сообщение и реализовывала
не все свои возможности. Для защиты стационарного
варианта программы используется проверка
даты создания ПЗУ данного ПК, если она
не равна эталонной, то копия считается
нелегальной. Для защиты мобильного варианта
программы на ключевой дискете была создана
дорожка с секторами нестандартного размера.
Первый сектор дорожки содержит информацию,
о программе, защищаемой от нелегального
копирования. Ключевая дискета была подготовлена
с помощью программы Diskett. Для тестирования
работы модуля была написана программа
Test.exe. Она показала, что написанный модуль
работает верно.
СПИСОК
ССЫЛОК
СОДЕРЖАНИЕ
1 Текст модуля F_Disk……………………………………………………..22
2 Текст
модуля F_Prot……………………………………………………...
3 Текст
программы Diskett…………………………………
4 Текст
программы Test.exe………………………………
КУРСОВОЙ ПРОЕКТ | ||||||||||
Изм | Лист | N докум. | Подп. | Дата | ||||||
Разраб. | Ефимов Д. В. |
ТЕКСТЫ ПРОГРАММ |
Лит | |||||||
Провер. | Заикина Е. Н. | |||||||||
Н.Контр | Кафедра
ИС
Гр. И -31д | |||||||||
Утв. |
1
ТЕКСТ МОДУЛЯ F_DISK
{===================} UNIT F_Disk; {=====================}
{
+-----------------------------
| Модуль содержит подпрограммы для гибкой работы с дисками. |
| Во всех подпрограммах параметр DISK относится к логическим |
| дискам: 0=А, 1=В, 2=С, 3=D и т. д. Параметр SEC - относи- |
| тельный номер сектора; 0 = загрузочный сектор, далее по |
| секторам до конца дорожки, по головкам, по цилиндрам. |
+-----------------------------
}
INTERFACE
type
{Информация из BPD загрузочного сектора:}
BPB_Type=record
SectSiz: Word; {Количество байт в секторе}
ClustSiz: Byte; {Количество секторов в кластере}
ResSecs: Word;
{Количество секторов перед
FatCnt: Byte; {Количество FAT}
RootSiz:Word;
{Количество элементов
TotSecs:Word; {Количество секторов на диске}
Media:Byte; {Дескриптор носителя}
FatSize:Word {Количество секторов в FAT}
end; {BPB_Type}
{Доплнительная
информация из загрузочного
Add_BPB_Type=record
TrkSecs:Word; {Количество секторов на дорожке
для разделов меньше 32 Мбайт или 0}
HeadCnt:Word; {Количество головок}
HidnSecLo:Word;
{Количество спрятанных
разделов меньше 32 Мбайт}
HidnSecHi:Word; {Вместе с HidnSecLo дает количество
спрятанных секторов для
LargSectors:LongInt; {Общее количество секторов для
разделов больше 32 Мбайт}
end; {Add_BPB_Type}
{Элемент дискового каталога:}
Dir_Type=record case Byte of
1:(
Name:array[1..8] of Char; {Имя файла или каталога}
Ext:array[1..3] of Char; {Расширение}
FAttr:Byte;
Reserv:array[1..10] of Byte; {Резервное поле}
Time:Word;
Date:Word;
FirstC:Word;
Size:LongInt
2:(NameExt:array[1..11] of Char)
end; {Dir_Type}
{Описатель логического раздела}
PartType=record
Act:Boolean; {Флаг активности раздела}
BegHead:Byte; {Головка начала раздела}
Информация о работе Защита программы от нелегального копирования