VMProtect/help/ru/manager/usage/step17_maxbuild.htm
VNGhostMans 5ec92ee05e first commit
Version 3.x.x
2023-05-14 20:21:09 +07:00

86 lines
3.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="Stylesheet" type="text/css" href=
"../../default.css" />
<meta http-equiv="Content-Type" content=
"text/html; charset=utf-8" />
<title>Шаг 1.7: Ограничиваем бесплатные обновления</title>
</head>
<body>
<h1>Шаг 1.7: Ограничиваем бесплатные обновления</h1><strong>Схема
работы</strong>
<p>В момент защиты приложения VMProtect запоминает дату, когда это
происходило. Эта дата является для системы лицензирования датой
сборки приложения. В серийном номере можно прописать максимальную
дату сборки, для которой подойдет этот номер. Таким образом, если
при создании ключа Вы пропишете в него текущую дату + 1 год, то
ключ подойдет ко всем релизам Вашей программы, которые вы
выпустите в течение года. К релизу, выпущенному через год и 1
день ключ уже не подойдет и у пользователя будет выбор:
пользоваться более старой версией или купить новый ключ, который
будет работать еще год.</p><strong>Пробуем на деле</strong>
<p>Поместите в ini-файл строчку вида MaxBuildDate=YYYYMMDD -
например, такую:</p>
<pre class="code">MaxBuildDate=20000101
</pre>
<p>В тестовом режиме система лицензирования считает датой сборки
сегодняшнее число, поэтому важно, чтобы дата, указанная в строке,
уже прошла. Т.е. максимум - вчера. Модифицируйте исходный код
функции <strong>main()</strong>, чтобы он выглядел так:</p>
<pre class="code">int main(int argc, char **argv)
{
char *serial = "Xserialnumber"; // зададим номер непосредственно в коде для простоты
int res = VMProtectSetSerialNumber(serial);
print_state(res);
if (res)
{
VMProtectSerialNumberData sd = {0};
VMProtectGetSerialNumberData(&amp;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;
}
</pre>
<p>Тогда при запуске программы вы увидите следующее:</p>
<pre class="code">state = SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED
max. build date: y = 2000, m = 1, d = 1
please register!
</pre>
<p>Заменив в ini-файле дату на сегодняшнюю или завтрашнюю, мы
получим "рабочую" программу:</p>
<pre class="code">state = 0
I'm registered
</pre>
<p>Удалите из ini-файла строку MaxBuildDate=..., чтобы она не
мешала нам в дальнейшем.</p><br />
<a href="step18_blacklist.htm">Следующий шаг</a>
<br />
<br />
<br />
<br />
<hr noshade="noshade" size="1" />
<div align="center">
© 2006-2015 Copyright VMProtect Software
</div>
</body>
</html>