mirror of
https://github.com/Obfuscator-Collections/VMProtect.git
synced 2024-12-27 08:49:27 +03:00
144 lines
8.8 KiB
HTML
144 lines
8.8 KiB
HTML
|
<!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>Генератор ключей: UNIX-версия</title>
|
|||
|
</head>
|
|||
|
|
|||
|
<body>
|
|||
|
<h1>Генераторы ключей: UNIX-версия</h1>
|
|||
|
|
|||
|
<h3>Описание</h3>
|
|||
|
|
|||
|
<p>UNIX-версия генератора ключей преставляет собой PHP-файл,
|
|||
|
содержащий все необходимое для генерации серийных номеров. Файл
|
|||
|
находится в каталоге <strong>Keygen\PHP</strong>, ниже
|
|||
|
рассмотрены основные моменты его
|
|||
|
использования.</p>
|
|||
|
|
|||
|
<h3>Настройка генератора</h3>
|
|||
|
|
|||
|
<p>В самом начале PHP-файла располагается код настройки
|
|||
|
генератора:</p>
|
|||
|
<pre class="code">//////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
// The following lines should be generated by VMProtect License Manager
|
|||
|
$exported_algorithm = "RSA";
|
|||
|
$exported_bits = 2048;
|
|||
|
$exported_private = "PJvj4kEpoQMIpYK+9wEt......xKeiSZgzdiln8Q==";
|
|||
|
$exported_modulus = "rOlny/3QgZb/VmGr3CmY......I6ESAUmtQ+RBqQ==";
|
|||
|
$exported_product_code = "oLQdGUn8kVk=";
|
|||
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
</pre>
|
|||
|
|
|||
|
<p>Этот код генерируется автоматически в VMProtect (см. <a href=
|
|||
|
"../licenses.htm#export">Экспорт параметров продукта</a>) и
|
|||
|
уникален для каждого конкретного продукта. Очень важно
|
|||
|
скопировать его без ошибок, в противном случае генератор будет
|
|||
|
работать некорректно.</p><strong>Содержимое ключа</strong>
|
|||
|
|
|||
|
<p>Далее в генераторе задается содержимое серийного номера.
|
|||
|
Содержимое задается массивом, ниже задаются все возможные
|
|||
|
параметры ключа, однако в реальных условиях часть из них может
|
|||
|
отсутствовать:</p>
|
|||
|
<pre class="code">$params = <strong>array</strong>(
|
|||
|
user_name => "John Doe", // UTF-8!
|
|||
|
email => "john@doe.com",
|
|||
|
hwid => "vHGMdMRvGCPjWcCQ", // Exactly as returned by VMProtectGetCurrentHWID
|
|||
|
expire_date => <strong>array</strong>(year => 2009, month => 10, day => 1),
|
|||
|
maxbuild_date => <strong>array</strong>(year => 2009, month => 10, day => 1),
|
|||
|
time_limit => 10,
|
|||
|
user_data => <strong>base64_decode</strong>("CGCvRvMWcPHGdMjQ"), // string of bytes
|
|||
|
);
|
|||
|
</pre>
|
|||
|
|
|||
|
<h3>Функция обработки успешной генерации</h3>
|
|||
|
|
|||
|
<p>Ниже расположена простейшая реализация функции, которая
|
|||
|
вызывается при успешной генерации серийного номера. Единственным
|
|||
|
параметром она получает строку с номером. Функция должна передать
|
|||
|
номер вызывающей стороне (регистратору), обычно это делается при
|
|||
|
помощи команды <strong>echo</strong>. Предварительно строка
|
|||
|
разбивается на подстроки длиной 75 символов для удобства. Также
|
|||
|
эта функция может отправлять сгенерированный номер по почте
|
|||
|
производителю программы или заносить его в базу данных.</p>
|
|||
|
<pre class="code">function <strong>OnSerialGenerated</strong>($serial)
|
|||
|
{
|
|||
|
$serial = <strong>wordwrap</strong>($serial, 75, "\n", true);
|
|||
|
<strong>echo</strong> $serial;
|
|||
|
}
|
|||
|
</pre>
|
|||
|
|
|||
|
<h3>Функция обработки ошибок генерации</h3>
|
|||
|
|
|||
|
<p>Последний участок кода, требующий внимания - это функция,
|
|||
|
которая вызывается в случае возникновения проблем. Функция
|
|||
|
получает в виде параметра строку с текстом ошибки, а после ее
|
|||
|
завершения вызывается функция <strong>die()</strong>. Функция
|
|||
|
должна сделать две вещи: вернуть регистратору вместо ключа текст
|
|||
|
о том, что ключ будет выслан вручную, а также выслать
|
|||
|
производителю программы всю необходимую информацию для устранения
|
|||
|
ошибки и ручной генерации ключа.</p>
|
|||
|
<pre class="code">function <strong>OnSerialGenerationFailed</strong>($details)
|
|||
|
{
|
|||
|
<strong>echo</strong> "You will receive serial number in the next 24 hours"; // message to the customer
|
|||
|
// mail("support@vendor.com", "Houston, we have a problem", $details); // message to vendor
|
|||
|
}
|
|||
|
</pre>
|
|||
|
|
|||
|
<p>Причин возникновения ошибки может быть несколько: некорректные
|
|||
|
параметры алгоритма, некорректные параметры ключа, слишком
|
|||
|
длинное имя пользователя или e-mail. Слишком длинный серийный
|
|||
|
номер, который не влезает в количество бит, указанное в
|
|||
|
алгоритме. Поэтому функция
|
|||
|
<strong>OnSerialGenerationFailed</strong> должна отправить
|
|||
|
производителю максимально подробную информацию о случившемся,
|
|||
|
дабы тот мог вручную сгенерировать серийный номер и отправить его
|
|||
|
покупателю.</p>
|
|||
|
|
|||
|
<h3>На что еще следует обратить внимание</h3>
|
|||
|
|
|||
|
<p>Генератор ключей в примерах максимально упрощен. Он не
|
|||
|
учитывает рекомендации по разработке веб-генераторов, данные
|
|||
|
<a href="index.htm">здесь</a>. Он не проверяет IP-адрес
|
|||
|
вызывающей стороны и не анализирует входные параметры. Имейте это
|
|||
|
в виду, когда будете создавать свой собственный генератор на
|
|||
|
основе этого.</p>
|
|||
|
|
|||
|
<p>Имя пользователя и e-mail должны быть переданы в кодировке
|
|||
|
UTF-8. Уточните у вашего регистратора, в какой кодировке он
|
|||
|
передает информацию о покупателе и, при необходимости, проведите
|
|||
|
конвертацию. Неправильная кодировка не приведет к
|
|||
|
неработоспособности серийного номера, однако номер будет
|
|||
|
содержать совершенно другое имя пользователя и он может быть
|
|||
|
удивлен, если вы показываете его, скажем, в окне "О
|
|||
|
Программе".</p>
|
|||
|
|
|||
|
<p>Асимметричное шифрование - достаточно сложный в математическом
|
|||
|
плане процесс. Если он реализован на чистом PHP, без применения
|
|||
|
сторонних библиотек, то генерация серийного номера может занять
|
|||
|
десятки секунд. Генератор использует функции
|
|||
|
<strong>gmp_powm</strong>, <strong>bi_powmod</strong>,
|
|||
|
<strong>bcpowod</strong> в случае их наличия. Все эти функции
|
|||
|
имеют разную скорость. Если генерация ключей на вашем хостинге
|
|||
|
занимает слишком большое время, рекомендуется пообщаться со
|
|||
|
службой поддержки на предмет подключения описаных выше функций. К
|
|||
|
примеру, функция <strong>gmp_powm</strong> работает в десятки раз быстрее
|
|||
|
функции <strong>bcpowmod</strong>.</p><br />
|
|||
|
<br />
|
|||
|
<br />
|
|||
|
<br />
|
|||
|
<br />
|
|||
|
<hr noshade="noshade" size="1" />
|
|||
|
|
|||
|
<div align="center">
|
|||
|
© 2006-2015 Copyright VMProtect Software
|
|||
|
</div>
|
|||
|
</body>
|
|||
|
</html>
|