Данную статью я представляю вниманию новичков для обеспечения защиты своего софта. Защита реализуется путем привязки к железу компа + онлайн проверка.
Наша защита будет состоять из нескольких частей:
Итак… с структурой мы разобрались, теперь нужно определиться к каким параметрам мы будем осуществлять привязку.
Мы сделаем это через WIN Api функции:
Что бы облегчить вам жизнь, я приведу готовые функции:
Итак, мы получили всю интересующую нас информацию. Теперь мы склеим эти данные в hex строку, что бы конечный пользователь не знал, какие параметры мы используем.
Берем функцию преобразования в 16ричный вид.
Склеим все параметры —
Вывод полученной строки в TEdit
Мои поздравления, готов модуль получения serial кода.
Генератор регистрационного ключа
Полученый серийник надо шифрануть, что бы жизнь медом не казалась. Используйте любые методы, я приведу пример MD5.
функция шифрации.
Теперь кидаем на форму два Tedit и кнопку.
на онклик ставим
Кейген готов.
Пишем основную программу.
1) Кидаем все функции сбора инфы о компе и генерации серийника из первого модуля.
2) Кидаем функцию шифрации серийника из генератора рег ключа.
Приступим к регистрации программы и онлайн привязки. Кидаем Tedit(для ввода рег ключа) + 2 кнопки
(1 — проверка на валидность рег ключа 2 — коннект к серверу и проверка на наличия записи там)
При валидности рег ключа — RegOk, если нет, то посылает.
В качестве онлайн проверки будем использовать простейший вариант — txt файл.
Алгоритм — на хосте лежит файл серийник.txt, а в нем же рег ключ. Программа сравнивает содержимое текстовика и ключ, сгенереный программой.
Вот и все Осталось вам придумать, куда прописывать то, что программа зарегистрирована.
Я лишь описал наглядный пример, как строятся такие методы защиты… вы можете использовать свои способы привязки, совершенствуя код + верификация через txt самый ненадежный способ. используйте php+mysql и т.д.
Будут вопросы — пишите, но я тут разжевал все до процедур онклика.
Всем удачи в начинаниях.
p.s. Напоминаю, что статья для новичков и является пищей для размышления.
Наша защита будет состоять из нескольких частей:
- Генератор серийного номера по системным характеристикам.
- Генератор ключа авторизации по серийнику
- Защищаемая программа
Итак… с структурой мы разобрались, теперь нужно определиться к каким параметрам мы будем осуществлять привязку.
Мы сделаем это через WIN Api функции:
- GetUserName — Имя текущего пользователя.
- GetComputerName — Имя компутора.
- GetVolumeInformation — Получение информации о носителе.
- GlobalMemoryStatus — Информация о используемой системой памяти.
Что бы облегчить вам жизнь, я приведу готовые функции:
function UserName: string;
var
u: pchar;
i: dword;
begin
i := 1024;
u := StrAlloc(Succ(i));
if GetUserName(u, i) then Result := StrPas(u) else Result := '?';
end;
function ComputerName: string;
var
buffer: array[0..255] of char;
size: dword;
begin
size := 256;
if GetComputerName(buffer, size) then
Result := buffer
else
Result := ''
end;
function GetHard: String;
var
VolumeName, FileSystemName: array [0..MAX_PATH-1] of Char;
VolumeSerialNo: DWord;
MaxComponentLength,FileSystemFlags: Cardinal;
begin
GetVolumeInformation('C:\',VolumeName,MAX_PATH,@VolumeSerialNo,
MaxComponentLength,FileSystemFlags, FileSystemName,MAX_PATH);
Result := IntToHex(VolumeSerialNo,8);
end;
function GetMem: String;
var
MyMem: TMemoryStatus;
begin
MyMem.dwLength:=SizeOf(MyMem);
GlobalMemoryStatus(MyMem);
with MyMem do begin
Result:= IntToStr(dwTotalPhys);
end;
end;
Итак, мы получили всю интересующую нас информацию. Теперь мы склеим эти данные в hex строку, что бы конечный пользователь не знал, какие параметры мы используем.
Берем функцию преобразования в 16ричный вид.
function StringToHex(str1,Separator:String):String;
var
buf:String;
i:Integer;
begin
buf:='';
for i:=1 to Length(str1) do begin
buf:=buf+IntToHex(Byte(str1[i]),2)+Separator;
end;
Result:=buf;
end;
Склеим все параметры —
function getSerial:string;
begin
Result := StringToHex((UserName + ComputerName + GetHard + GetMem));
end;
Вывод полученной строки в TEdit
procedure TForm2.Button1Click(Sender: TObject);
begin
Edit1.Text := getSerial;
end;
Мои поздравления, готов модуль получения serial кода.
Генератор регистрационного ключа
Полученый серийник надо шифрануть, что бы жизнь медом не казалась. Используйте любые методы, я приведу пример MD5.
функция шифрации.
function getKey(Serial: string):string;
begin
Result := MD5DigestToStr(MD5String(Serial+'123'));
end;
Теперь кидаем на форму два Tedit и кнопку.
на онклик ставим
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := getKey(Edit1.Text); / в первый Edit вставляем серийник, во втором будет зашифрованый вариант(очевидно)
end;
Кейген готов.
Пишем основную программу.
1) Кидаем все функции сбора инфы о компе и генерации серийника из первого модуля.
2) Кидаем функцию шифрации серийника из генератора рег ключа.
Приступим к регистрации программы и онлайн привязки. Кидаем Tedit(для ввода рег ключа) + 2 кнопки
(1 — проверка на валидность рег ключа 2 — коннект к серверу и проверка на наличия записи там)
procedure TForm2.Button1Click(Sender: TObject);
begin
if Edit1.Text = getKey(GetSerial) then ShowMessage('RegOk') else ShowMessage('NoFuckinWay');
end;
При валидности рег ключа — RegOk, если нет, то посылает.
В качестве онлайн проверки будем использовать простейший вариант — txt файл.
Алгоритм — на хосте лежит файл серийник.txt, а в нем же рег ключ. Программа сравнивает содержимое текстовика и ключ, сгенереный программой.
procedure TForm2.Button2Click(Sender: TObject);
begin
if getKey(GetSerial)= IdHTTP1.Get('http://zzzzzz.com/reg/'+GetSerial+'.txt') then ShowMessage('RegOk') else ShowMessage('NoFuckinWay');
end;
Вот и все Осталось вам придумать, куда прописывать то, что программа зарегистрирована.
Я лишь описал наглядный пример, как строятся такие методы защиты… вы можете использовать свои способы привязки, совершенствуя код + верификация через txt самый ненадежный способ. используйте php+mysql и т.д.
Будут вопросы — пишите, но я тут разжевал все до процедур онклика.
Всем удачи в начинаниях.
p.s. Напоминаю, что статья для новичков и является пищей для размышления.