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

144 lines
8.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>Генератор ключей: 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 =&gt; "John Doe", // UTF-8!
email =&gt; "john@doe.com",
hwid =&gt; "vHGMdMRvGCPjWcCQ", // Exactly as returned by VMProtectGetCurrentHWID
expire_date =&gt; <strong>array</strong>(year =&gt; 2009, month =&gt; 10, day =&gt; 1),
maxbuild_date =&gt; <strong>array</strong>(year =&gt; 2009, month =&gt; 10, day =&gt; 1),
time_limit =&gt; 10,
user_data =&gt; <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>