Шаг 1.7: Ограничиваем бесплатные обновления

Схема работы

В момент защиты приложения 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=..., чтобы она не мешала нам в дальнейшем.


Следующий шаг




© 2006-2015 Copyright VMProtect Software