Защита DLL

Issues related to VMProtect
Post Reply
rktn
Posts: 5
Joined: Tue Dec 09, 2014 10:24 am

Защита DLL

Post by rktn »

Добрый день, не могу понять нормально ли поведение защищенных функций в DLL, когда функция вызывается из одного потока getserailstate возвращает 0 т.е. все ок.
Как только эту функцию вызываю из нескольких потоков одновременно то второй и последующие getserailstate возвращают что лицензия не верна!
Подскажите на что обратить внимание при изучении данной проблемы, какие рекомендации! Или её решить не получится?
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита DLL

Post by Admin »

Присылайте тестовый проект (EXE+оригинал DLL+MAP файлы), на котором воспроизводится эта проблема.
rktn
Posts: 5
Joined: Tue Dec 09, 2014 10:24 am

Re: Защита DLL

Post by rktn »

исходники + защищенные EXE+DLL здесь(http://rusfolder.com/42596561)
пароль:2212
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита DLL

Post by Admin »

Проблема заключается в том, что текущая реализация VMProtectSetSerialNumber не является потокобезопасной, поэтому вызов этого API нужно завернуть в общую критическую секцию, создаваемую в initialization DLL-ки. В версии 3.0 все API лицензирования будут потокобезопасными.
rktn
Posts: 5
Joined: Tue Dec 09, 2014 10:24 am

Re: Защита DLL

Post by rktn »

3 версия приобретается отдельно?
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита DLL

Post by Admin »

Для зарегистрированных пользователей обновление будет доступно по годовой подписке.
rktn
Posts: 5
Joined: Tue Dec 09, 2014 10:24 am

Re: Защита DLL

Post by rktn »

Критические секции сильно тормозят процесс. Получается что все вызовы API в том числе VMProtectGetSerialNumberState также необходимо заворачивать в критическую секцию, иначе не смог добиться стабильности!
Admin
Site Admin
Posts: 2584
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Защита DLL

Post by Admin »

Если честно, то мне совершенно непонятен вот такой подход:

Code: Select all

function  DllFunc(li:PAnsiChar): Integer; stdcall;
begin
  Result := 0;
  with TDllClass.Create do
  begin
    try

      VMProtectSetSerialNumber(li);
      Result:=GetResult;

    finally
      Free;
    end;
  end;
end;
Зачем потоки постоянно дергают VMProtectSetSerialNumber если можно было бы сделать вызов VMProtectSetSerialNumber всего один раз (я бы вообще это сделал в initialization)?

Code: Select all

function  DllFunc(li:PAnsiChar): Integer; stdcall;
begin
  Result := 0;
  with TDllClass.Create do
  begin
    try

      Result:=GetResult;

    finally
      Free;
    end;
  end;
end;

initialization
// здесь читаем ключ из файла, имя EXE-ника можно получить через GetModuleFileName(0, ...)
VMProtectSetSerialNumber(lic)

Post Reply