О привязке по HWID

Хотел задать Вам вопрос именно по 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 вот так:

  1. Но как добавить проверку ключа в саму программу, вот так не работает:
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;

При таком подходе у меня все сработало…

Я не понимаю что нужно прокомментировать :slight_smile: