Академический Документы
Профессиональный Документы
Культура Документы
Лабораторная работа № 2
Методы и средства привязки программного обеспечения
к аппаратному окружению и физическим носителям
Тула 2015
1. Цель работы
Изучить способы взаимодействия программного обеспечения с
операционной системой и аппаратурой для реализации привязки ПО к
текущей аппаратно-программной конфигурации ЭВМ.
2. Задание на работу
Вариант № 3. Привязка программы к конфигурации системы
(видеокарта).
3. Теоретическая справка
Для защиты программного обеспечения от несанкционированного
копирования и нелегального использования применяется привязка его к
аппаратному окружению. Под привязкой понимается некоторая информация,
позволяющая уникально идентифицировать пользовательское рабочее место.
Под такой информацией обычно понимаются различные параметры системы
в зашифрованном виде.
В процессе установки программа подсчитывает код активации –
контрольное значение, однозначно соответствующее установленным
комплектующим компьютера и параметрам установленной программы. Это
значение передается разработчику программы. На его основе разработчик
генерирует ключ активации, подходящий для активации приложения только
на указанной машине (копирование установленных исполняемых файлов на
другой компьютер приведет к неработоспособности программы).
В качестве привязки используются, в основном, серийный номер BIOS
материнской платы, серийный номер винчестера. В целях сокрытия от
пользователя данные о защите могут располагаться в неразмеченной области
жесткого диска.
2
4. Ход работы
При запуске программы на экран выводится меню: «1 – получение
информации о видеокарте. 2 – генерация ключа. 3 – проверка ключа».
Для получения информации о видеокарте используется структура
Windows API DISPLAY_DEVICE:
typedef struct _DISPLAY_DEVICE
{
DWORD cb;
TCHAR DeviceName[32];
TCHAR DeviceString[128];
DWORD StateFlags;
TCHAR DeviceID[128];
TCHAR DeviceKey[128];
} DISPLAY_DEVICE, *PDISPLAY_DEVICE;
Программа
// pasoib_2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "md5.h"
using namespace std;
DISPLAY_DEVICE lpDisplayDevice;
DWORD dwFlags;
DWORD cc;
3
lpDisplayDevice.cb = sizeof(lpDisplayDevice);
dwFlags = 0;
cc = 0;
//Название видеокарты
wstring wstrValue;
wstrValue = lpDisplayDevice.DeviceString;
string strValue;
strValue.assign(wstrValue.begin(), wstrValue.end()); //перевод wstring в
string
out << strValue << endl;
//Объем видеопамяти
out << lpDisplayDevice.StateFlags/1024/1024 << endl;
//ID видеокарты
wstrValue = lpDisplayDevice.DeviceID;
strValue.assign(wstrValue.begin(), wstrValue.end());
out << strValue << endl;
//Имя устройства
wstrValue = lpDisplayDevice.DeviceName;
strValue.assign(wstrValue.begin(), wstrValue.end());
out << strValue << endl << endl;
}
}
long size;
fseek(file, 0, SEEK_END);
size=ftell(file);
fseek(file, 0, SEEK_SET);
char* mass;
mass=new char[size];
4
fclose(file);
}
DISPLAY_DEVICE lpDisplayDevice;
DWORD dwFlags;
DWORD cc;
lpDisplayDevice.cb = sizeof(lpDisplayDevice);
dwFlags = 0;
cc = 0;
//Название видеокарты
wstring wstrValue;
wstrValue = lpDisplayDevice.DeviceString;
string strValue;
strValue.assign(wstrValue.begin(), wstrValue.end()); //перевод wstring в
string
out << strValue << endl;
//Объем видеопамяти
out << lpDisplayDevice.StateFlags/1024/1024 << endl;
//ID видеокарты
wstrValue = lpDisplayDevice.DeviceID;
strValue.assign(wstrValue.begin(), wstrValue.end());
out << strValue << endl;
//Имя устройства
wstrValue = lpDisplayDevice.DeviceName;
strValue.assign(wstrValue.begin(), wstrValue.end());
out << strValue << endl << endl;
}
long size;
fseek(file, 0, SEEK_END);
size=ftell(file);
fseek(file, 0, SEEK_SET);
char* mass;
mass=new char[size];
5
}
getch();
}
//Меню
cout << "1 - получение информации о видеокарте" << endl;
cout << "2 - генерация ключа" << endl;
cout << "3 - проверка ключа" << endl;
int a;
cin >> a;
cout << endl;
if (a==1) information();
if (a==2) key_generation();
if (a==3) key_verification();
return 0;
}
Инструкция пользователю
Программа, созданная при выполнении данной лабораторной работы,
осуществляет привязку программного продукта к конфигурации системы
(используется информация о видеокарте).
При запуске программы на экран выводится меню: «1 – получение
информации о видеокарте. 2 – генерация ключа. 3 – проверка ключа». При
выборе «1» осуществляется сбор информации о видеокарте пользователя.
Полученная информация выводится в файл inf.txt.
При выборе «2» для файла inf.txt генерируется ключ с помощью
алгоритма md5. Значение ключа выводится в файл hash.txt.
При выборе «3» происходит сбор информации о видеокарте
(аналогично выбору «1»), генерация по полученной информации ключа
6
(аналогично выбору «2»). Затем производится сравнение сгенерированного
ключа со значением ключа из файла hash.txt. Если значения ключей
совпадают, то на экран выводится «Проверка пройдена успешно», иначе
выводится «У Вас нет прав доступа к данному программному продукту».
Инструкция программисту
Программа, созданная при выполнении данной лабораторной работы,
осуществляет привязку программного продукта к конфигурации системы
(используется информация о видеокарте).
Программа содержит следующие функции:
void information() - получение информации о видеокарте;
void key_generation() - генерация ключа на основе полученных данных
о видеокарте;
void key_verification() - проверка ключа для данного компьютера;
string md5(char* in, long size) – вычисление хеш-кода по алгоритму md5
для заданного набора символов. Текст данной функции содержится в файле
md5.h.
7
Рисунок 2 – Содержимое файла inf.txt
5. Вывод
В процессе выполнения лабораторной работы мы изучили способы
взаимодействия программного обеспечения с операционной системой и
аппаратурой для реализации привязки ПО к текущей аппаратно-программной
конфигурации ЭВМ.
8
Привязка программного обеспечения к информации о пользователе /
конфигурации компьютера и последующая активация программного
обеспечения в настоящий момент используется достаточно широко (пример –
операционная система Windows).
Достоинство данного метода защиты заключается в том, что не
требуется никакого специфического аппаратного обеспечения, и программу
можно распространять посредством цифровой дистрибуции (по сети
Интернет).
Основной недостаток заключается в том, что программное обеспечение
становится неработоспособным в случае, если пользователь производит
модернизацию компьютера (если привязка осуществляется к аппаратной
конфигурации компьютера).