Delphi → Привязка к железу в Delphi
![]()
Занимаясь разработкой программ для продажи, рано или поздно программист начинает задумываться о защите своих приложений. Учитывая менталитет нашего населения, обычная защита в виде серийного номера здесь не подойдет. Так как это не даст гарантии, что программа в дальнейшем не будет перепродана или выложена в паблик с этими серийными номерами. Решением данной проблемы может стать привязка вашего продукта к определенному компьютеру.
Как это происходит?
Пользователь получает ваш продукт и генератор серийного номера. Затем он запускает генератор, который выводит код текущего компьютера, после чего клиент сообщает его вам. Вы, используя генератор лицензий, создаете уникальный файл на основе полученного кода, и после оплаты передаете его пользователю. В свою очередь, он помещает его в папку с вашей программой и запускает её. Приложение запустится только в том случае, если существует корректный файл лицензии.
Модуль
Для того, чтобы постоянно не переписывать защитный код, я решил создать отдельный модуль - BindEx. С помощью него можно произвести быструю привязку к железу в несколько строк кода. Шифрование/сжатие файла лицензии производится библиотекой Zlib, которая использует комбинацию алгоритма LZ77 и алгоритма Хаффмана. Сам серийный номер преобразуется в хэш через алгоритм MD5.

Описание модуля
Disk
property Disk: char write FDisk;
Свойство, принимающее в качестве значения, букву диска для которой будет формироватся серийный номер (по умолчанию - C).
KeyFile
property KeyFile: string write FKeyFile;
Свойство, принимающее в качестве значения, имя файла лицензии (по умолчанию - key.lic).
Salt
property Salt: string write FSalt;
Свойство, принимающее в качестве значения, добавочное секретное слово (соль) для создания уникального серийного номера (по умолчанию пусто).
CreateKeyFile
procedure CreateKeyFile(ASerial: string);
Процедура создает файл лицензии на основе серийного номера ASerial.
CheckNow
procedure CheckNow;
Процедура проверяет файл лицензии и если он неверный завершает работу.
GetDiskSerial
function GetDiskSerial: string;
Функция возвращает серийный номер текущего компьютера.
В архиве вы также найдете пример реализации типичного приложения с использованием модуля BindEx.
Размер: 662.6 kB – Скачиваний: 918 – Скачан последний раз: 23.02.2012 11:06
Похожие статьи:
Сентябрь 3rd, 2011 at 13:06 #
Проверка на основе серийного номера жесткого диска?
GlooK
Сентябрь 3rd, 2011 at 13:19 #
Да. Предвижу возмущение, но как защита от дурака подходит.
А тем, кому действительно нужна хорошая защита, добавят еще привязку к матплате, сетевухе и т.д.
Сентябрь 3rd, 2011 at 20:01 #
Нет, почему сразу возмущение, на мой взгляд этого достаточно, возможно да привязка к мат. плате и ну к ОС и не более, а то малейший апргрейд компьютера приведет к неработоспособности программы.
Сентябрь 4th, 2011 at 13:33 #
К сожалению, такая защита ломается простым перехватом GetVolumeInformation.
GlooK
Сентябрь 4th, 2011 at 14:28 #
Безумный Программист
Как вариант, можно добавить inline директиву к функциям сравнения и вызову GetVolumeInformation. После чего вызывать CheckNow при каждом действии пользователя. По крайней мере это не даст сделать битхак.
P.S. К сожалению, у мены компилятор какой-то урезанный и не распознает инлай директиву.