VMProtect/help/ru/manager/usage/step19_hwid.htm

124 lines
5.4 KiB
HTML
Raw Permalink Normal View History

2023-05-14 16:21:09 +03:00
<!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.9: Привязка к оборудованию</title>
<style type="text/css">
/*<![CDATA[*/
div.c2 {text-align: center}
p.c1 {color:red;}
/*]]>*/
</style>
</head>
<body>
<h1>Шаг 1.9: Привязка к оборудованию</h1><strong>Получение
идентификатора оборудования</strong>
<p>Прежде чем привязываться к оборудованию, необходимо получить
идентификатор оборудования. Идентификатор помещается в серийный
номер и при передаче этого номера системе лицензирования
происходит проверка соответствия идентификаторов. Поэтому для
начала получим идентификатор нашего оборудования. Сократим
<strong>main()</strong> до самого короткого варианта:</p>
<pre class="code">int main(int argc, char **argv)
{
int nSize = VMProtectGetCurrentHWID(NULL, 0);
char *buf = new char[nSize];
VMProtectGetCurrentHWID(buf, nSize);
printf("HWID: %s\n", buf);
delete [] buf;
return 0;
}
</pre>
<p>Запустив эту программу, мы получим тестовый идентификатор
оборудования, используемый по умолчанию:</p>
<pre class="code">HWID: myhwid
</pre>
<p>Чтобы изменить идентификатор, используемый по умолчанию,
добавьте в ini-файл строку:</p>
<pre class="code">MyHWID=test
</pre>
<p>Запустив программу после этого, мы увидим, что система
лицензирования теперь считает "test" идентификатором
оборудования:</p>
<pre class="code">HWID: test
</pre>
<p class="c1"><strong>Внимание!</strong> реальный идентификатор
оборудования программа будет выдавать только после ее обработки в
VMProtect.</p><br />
<strong>Серийный номер с привязкой к оборудованию</strong>
<p>Чтобы наш тестовый серийный номер был привязан к оборудованию,
добавим в ini-файл еще одну строчку, на этот раз с
идентификатором, "записанным" в номер:</p>
<pre class="code">KeyHWID=test
</pre>
<p>А функцию <strong>main()</strong> слегка усложним, она снова
будет подавать серийный номер и анализировать получаемый
результат:</p>
<pre>
int main(int argc, char **argv)
{
int nSize = VMProtectGetCurrentHWID(NULL, 0);
char *buf = new char[nSize];
VMProtectGetCurrentHWID(buf, nSize);
printf("HWID: %s\n", buf);
delete [] buf;
char *serial = "Xserialnumber";
int res = VMProtectSetSerialNumber(serial);
print_state(res);
return 0;
}
</pre>
<p>Запустив код, получим следующий результат:</p>
<pre class="code">HWID: test
state = 0
</pre>
<p>Система лицензирования сравнила текущий идентификатор
оборудования и тот, который был запиан в серийном номере.
Идентификаторы совпали и функция
<strong>VMProtectSetSerialNumber()</strong> вернула 0 - серийный
номер подходит.</p>
<p>Попробуем теперь "запустить" нашу программу на другом
оборудовании. Для этого поменяем значение "test" параметра MyHWID
в ini-файле на "new test". И снова запустим программу:</p>
<pre class="code">HWID: new test
state = SERIAL_STATE_FLAG_BAD_HWID
</pre>
<p>На этот раз система лицензирования вернула флаг
SERIAL_STATE_FLAG_BAD_HWID, означающий несовпадение реально
идентификатора оборудования с тем, что хранится в серийном
номере. Текущий идентификатор оборудования, выведенный на экран -
"new test", а в серийном номере хранится "test". Поменяв в
ini-файле значение параметра KeyHWID на "new test" можно добиться
работы серийного номера и на этом "оборудовании".</p><br />
<a href="step1A_userdata.htm">Следующий шаг</a>
<br />
<br />
<br />
<br />
<hr noshade="noshade" size="1" />
<div align="center">
© 2006-2015 Copyright VMProtect Software
</div>
</body>
</html>