А вот как правильно распространять ДЕМО версию программы? Я считаю, что её тоже нужно «обрабатывать» VMProtect, а то мало ли, чего люди увидят, копаясь в ней, а может это им поможет во взломе? Еще, где-то читал, что хороший вариант - это исключать из на этапе компиляции некоторые процедуры, тем самым создавая «урезанную версию ДЕМО приложения».
Но у меня почти нет процедур, которые я бы исключил из компиляции, создавая ДЕМО версию. Как делаю я сейчас:
1. Во всех процедурах снимаю галочку «Привязать к серийному номеру», т.к. ни какого серийника в демо-версии нет.
2. Весь код проверки серийника у меня пишется примерно так:
Code: Select all
{$IFDEF DEMO}
{$ELSE}
if VMProtectGetSerialNumberState <> 0 then Halt;
{$ENDIF}
3. Для создания demo я использую условную компиляцию, чтобы вырезать часть кода процедур, например:
Code: Select all
procedure TForm1.Vniz;
begin
{$IFDEF DEMO}
Application.ProcessMessages();
{$ELSE}
k := k + 1;
if k > 100 then
k := 1;
MyProc(k);
Application.ProcessMessages();
{$ENDIF}
end;
procedure TForm1.Vverx;
begin
k := k -1;
if k < 1 then
k := 100;
MyProc(k);
Application.ProcessMessages();
end;
Вот, примерно, таким образом, происходит создание демо-версии. Это нормальный способ?
Меня беспокоит, вот что:
1. Может ли хакер как-бы «дописать» процедуру Vniz? Она же вроде такая простая – просто передает параметр «k» продуре «MyProc»? А как тогда лучше быть?
2. Как-то однотипно у меня «VMProtectGetSerialNumberState <> 0 then Halt» может надо разнообразить, чтобы усложнить взлом? Например «VMProtectGetSerialNumberState <> 0 then k:=k*100» тем самым я испорчу значение переменной, приложение дальше не сможет нормально работать.
3. Как часто нужно проверять VMProtectGetSerialNumberState ? Вот есть у меня блок кода накрытый маркером, скажем 1000 строк, которые выполняются за 300-400 мс. Я думаю 2-3 проверок вполне достаточно?
Пока писал пост возникла идея, а что если распространять demo версию, в которой вырезаны части кода (на примере процедуры «Vniz») с серийным номером, но в этом номере не будет привязки к оборудованию, т.е. запускай программу где хочешь и тестируй. Используя такой способ, мне не придется снимать галочку «Привязать к сейриному номеру», да я варианты проверки кода можно будет упростить:
Code: Select all
{$IFDEF DEMO} // убрать условную компиляцию при проверке кода
{$ELSE}
if VMProtectGetSerialNumberState <> 0 then Halt;
{$ENDIF}