Хотел задать Вам вопрос именно по Delphi: Перед покупкой лицензии. Тест провожу на ПК знакомого.
Как организовать привязку по HWID. Что я делаю: 1. Получаю HWID системы вот в таком виде:
procedure TForm1.FormCreate(Sender: TObject);
var pBuf:PAnsiChar;
nSize:Integer;
begin
nSize:=VMProtectGetCurrentHWID(nil,0);
GetMem(pBuf,nSize);
try
VMProtectGetCurrentHWID(pBuf,nSize); //<<<<<<<<
Memo1.Lines.Add(pBuf);
finally
FreeMem(pBuf);
end;
end;
end.
2. А потом привязываю этот HWID вот так:
Но как добавить проверку ключа в саму программу, вот так не работает:
uses
System.SysUtils, Classes, VMProtectSDK;
var
FileName: String;
Lines: TStringList;
I, SerialState: Integer;
Serial: AnsiString;
begin
Serial:='';
FileName:=ExtractFilePath(ParamStr(0))+'serial.key';
if FileExists(FileName) then
begin
Lines:=TStringList.Create;
Lines.LoadFromFile(FileName);
for I:=0 to Lines.Count-1 do
Serial:=Serial+AnsiString(Lines[I]);
Lines.Free;
end;
if (Serial = '') then
begin
Writeln('ERROR: Serial number not foud');
exit;
end;
SerialState := VMProtectSetSerialNumber(PAnsiChar(Serial));
if (SerialState <> SERIAL_STATE_SUCCESS) then
begin
Writeln('ERROR: VMProtectSetSerialNumber returns ' + IntToStr(SerialState));
exit;
end;
Writeln('Hello world!');
end.
Все, разобрался. И если я правильно понял то прокомментируйте мой ответ, всем Ваши клиентам тоже будет полезно.
Получается (К примеру) в настройках программы я делал виртуализацию + мутацию + проверку подходит ли ключ к HWID в процедуре: procedure TForm1.FormCreate(Sender: TObject); То есть привязал саму функцию к ключу. Но исходя из справки VMProtect:Проверку привязки к ключу - нужно проверять до или в ином случаем защищенная программа будет выдавать, в независимости от того правильный ключ или нет, сообщение: This code requires valid serial number to run.Program will be terminated.
То есть, к примеру, сначала нужно сделать проверку:
// И тут в настройках (Ультра (Мутация + Виртуализация))
procedure TForm1.FormCreate(Sender: TObject);
var
FileName: String;
Lines: TStringList;
I, SerialState: Integer;
Serial: AnsiString;
begin
Serial:='';
FileName:=ExtractFilePath(ParamStr(0))+'serial.key';
if FileExists(FileName) then
begin
Lines:=TStringList.Create;
Lines.LoadFromFile(FileName);
for I:=0 to Lines.Count-1 do
Serial:=Serial+AnsiString(Lines[I]);
Lines.Free;
end;
if (Serial = '') then
begin
Writeln('ERROR: Serial number not foud');
exit;
end;
SerialState := VMProtectSetSerialNumber(PAnsiChar(Serial));
if (SerialState <> SERIAL_STATE_SUCCESS) then
begin
Writeln('ERROR: VMProtectSetSerialNumber returns ' + IntToStr(SerialState));
exit;
end;
Writeln('Hello world!');
end;
// А дальше, к примеру, Настройка (Ультра (Мутация + Виртуализация)) + Привязать к серийному номеру:
procedure TForm1.Button1Click(Sender: TObject);
begin
// Тогда, при запуске, программа будет проверять подходит ли ключ к HWID. И по нажатию на кнопку [b][u](Button1)[/u][/b], если верный запускаться а если нет выдавать сообщение [b][u]This code requires valid serial number to run.Program will be terminated.[/u][/b] и закрываться.
end;