mirror of
				https://github.com/Obfuscator-Collections/VMProtect.git
				synced 2025-10-30 16:36:32 +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>
 |