В момент защиты приложения VMProtect запоминает дату, когда это происходило. Эта дата является для системы лицензирования датой сборки приложения. В серийном номере можно прописать максимальную дату сборки, для которой подойдет этот номер. Таким образом, если при создании ключа Вы пропишете в него текущую дату + 1 год, то ключ подойдет ко всем релизам Вашей программы, которые вы выпустите в течение года. К релизу, выпущенному через год и 1 день ключ уже не подойдет и у пользователя будет выбор: пользоваться более старой версией или купить новый ключ, который будет работать еще год.
Пробуем на делеПоместите в ini-файл строчку вида MaxBuildDate=YYYYMMDD - например, такую:
MaxBuildDate=20000101
В тестовом режиме система лицензирования считает датой сборки сегодняшнее число, поэтому важно, чтобы дата, указанная в строке, уже прошла. Т.е. максимум - вчера. Модифицируйте исходный код функции main(), чтобы он выглядел так:
int main(int argc, char **argv) { char *serial = "Xserialnumber"; // зададим номер непосредственно в коде для простоты int res = VMProtectSetSerialNumber(serial); print_state(res); if (res) { VMProtectSerialNumberData sd = {0}; VMProtectGetSerialNumberData(&sd, sizeof(sd)); printf("max. build date: y = %d, m = %d, d = %d\n", sd.dtMaxBuild.wYear, sd.dtMaxBuild.bMonth, sd.dtMaxBuild.bDay); printf("please register!\n"); return 0; } printf("I'm registered\n"); return 0; }
Тогда при запуске программы вы увидите следующее:
state = SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED max. build date: y = 2000, m = 1, d = 1 please register!
Заменив в ini-файле дату на сегодняшнюю или завтрашнюю, мы получим "рабочую" программу:
state = 0 I'm registered
Удалите из ini-файла строку MaxBuildDate=..., чтобы она не мешала нам в дальнейшем.