aboutsummaryrefslogtreecommitdiff
path: root/help/ru
diff options
context:
space:
mode:
Diffstat (limited to 'help/ru')
-rw-r--r--help/ru/about_vmprotect.htm234
-rw-r--r--help/ru/contacts.htm41
-rw-r--r--help/ru/create_project.htm137
-rw-r--r--help/ru/default.css55
-rw-r--r--help/ru/dictionary.htm107
-rw-r--r--help/ru/faq.htm139
-rw-r--r--help/ru/functions.htm31
-rw-r--r--help/ru/history.htm1021
-rw-r--r--help/ru/images/activation_setup.pngbin0 -> 35093 bytes
-rw-r--r--help/ru/images/button_action.pngbin0 -> 17953 bytes
-rw-r--r--help/ru/images/button_compilation.pngbin0 -> 299 bytes
-rw-r--r--help/ru/images/button_execute.pngbin0 -> 362 bytes
-rw-r--r--help/ru/images/button_open.pngbin0 -> 387 bytes
-rw-r--r--help/ru/images/button_project.pngbin0 -> 5670 bytes
-rw-r--r--help/ru/images/button_save.pngbin0 -> 297 bytes
-rw-r--r--help/ru/images/button_search.pngbin0 -> 18095 bytes
-rw-r--r--help/ru/images/codelock_error.pngbin0 -> 39457 bytes
-rw-r--r--help/ru/images/delphi_map.pngbin0 -> 10503 bytes
-rw-r--r--help/ru/images/delphi_project.pngbin0 -> 2410 bytes
-rw-r--r--help/ru/images/depends.pngbin0 -> 73636 bytes
-rw-r--r--help/ru/images/expert_find.pngbin0 -> 8153 bytes
-rw-r--r--help/ru/images/export_keys.pngbin0 -> 16826 bytes
-rw-r--r--help/ru/images/functions.pngbin0 -> 40166 bytes
-rw-r--r--help/ru/images/import_key.pngbin0 -> 5200 bytes
-rw-r--r--help/ru/images/licenses1.pngbin0 -> 33568 bytes
-rw-r--r--help/ru/images/lock_to_serial.pngbin0 -> 40726 bytes
-rw-r--r--help/ru/images/main_window.pngbin0 -> 33534 bytes
-rw-r--r--help/ru/images/menu_edit.pngbin0 -> 14066 bytes
-rw-r--r--help/ru/images/menu_file.pngbin0 -> 16872 bytes
-rw-r--r--help/ru/images/menu_help.pngbin0 -> 19193 bytes
-rw-r--r--help/ru/images/menu_project.pngbin0 -> 11822 bytes
-rw-r--r--help/ru/images/menu_project_import.pngbin0 -> 12750 bytes
-rw-r--r--help/ru/images/menu_tools.pngbin0 -> 5670 bytes
-rw-r--r--help/ru/images/preferences.pngbin0 -> 19810 bytes
-rw-r--r--help/ru/images/project_add_folder.pngbin0 -> 7541 bytes
-rw-r--r--help/ru/images/project_add_function.pngbin0 -> 23667 bytes
-rw-r--r--help/ru/images/project_add_license.pngbin0 -> 27265 bytes
-rw-r--r--help/ru/images/project_file_delete.pngbin0 -> 5003 bytes
-rw-r--r--help/ru/images/project_file_menu.pngbin0 -> 27552 bytes
-rw-r--r--help/ru/images/project_file_protection.pngbin0 -> 26002 bytes
-rw-r--r--help/ru/images/project_file_settings.pngbin0 -> 28857 bytes
-rw-r--r--help/ru/images/project_functions.pngbin0 -> 30339 bytes
-rw-r--r--help/ru/images/project_functions_content.pngbin0 -> 34353 bytes
-rw-r--r--help/ru/images/project_functions_content2.pngbin0 -> 28536 bytes
-rw-r--r--help/ru/images/project_functions_menu.pngbin0 -> 7123 bytes
-rw-r--r--help/ru/images/project_functions_menu2.pngbin0 -> 10257 bytes
-rw-r--r--help/ru/images/project_functions_menu3.pngbin0 -> 5844 bytes
-rw-r--r--help/ru/images/project_functions_search.pngbin0 -> 10796 bytes
-rw-r--r--help/ru/images/project_generate_keys.pngbin0 -> 29235 bytes
-rw-r--r--help/ru/images/project_options.pngbin0 -> 31094 bytes
-rw-r--r--help/ru/images/project_script.pngbin0 -> 34409 bytes
-rw-r--r--help/ru/images/properties_calc.pngbin0 -> 34704 bytes
-rw-r--r--help/ru/images/properties_directory.pngbin0 -> 37420 bytes
-rw-r--r--help/ru/images/properties_dump.pngbin0 -> 41236 bytes
-rw-r--r--help/ru/images/properties_dump_goto.pngbin0 -> 18054 bytes
-rw-r--r--help/ru/images/properties_export.pngbin0 -> 45332 bytes
-rw-r--r--help/ru/images/properties_import.pngbin0 -> 41886 bytes
-rw-r--r--help/ru/images/properties_resources.pngbin0 -> 40135 bytes
-rw-r--r--help/ru/images/properties_segments.pngbin0 -> 42248 bytes
-rw-r--r--help/ru/images/visual_studio_map.pngbin0 -> 13962 bytes
-rw-r--r--help/ru/images/watermarks_add.pngbin0 -> 11383 bytes
-rw-r--r--help/ru/images/watermarks_menu.pngbin0 -> 7179 bytes
-rw-r--r--help/ru/images/watermarks_search.pngbin0 -> 24663 bytes
-rw-r--r--help/ru/images/watermarks_setup.pngbin0 -> 22109 bytes
-rw-r--r--help/ru/images/weblm_1.pngbin0 -> 210804 bytes
-rw-r--r--help/ru/images/weblm_2.pngbin0 -> 321651 bytes
-rw-r--r--help/ru/info.htm38
-rw-r--r--help/ru/info_calc.htm31
-rw-r--r--help/ru/info_directories.htm30
-rw-r--r--help/ru/info_dump.htm35
-rw-r--r--help/ru/info_exports.htm28
-rw-r--r--help/ru/info_imports.htm28
-rw-r--r--help/ru/info_resources.htm31
-rw-r--r--help/ru/info_segments.htm32
-rw-r--r--help/ru/main_menu.htm41
-rw-r--r--help/ru/main_window.htm42
-rw-r--r--help/ru/manager/activation.htm89
-rw-r--r--help/ru/manager/activation/api.htm223
-rw-r--r--help/ru/manager/activation/vmprotect.htm38
-rw-r--r--help/ru/manager/activation/weblm.htm55
-rw-r--r--help/ru/manager/features.htm138
-rw-r--r--help/ru/manager/howitworks.htm61
-rw-r--r--help/ru/manager/index.htm43
-rw-r--r--help/ru/manager/keygen/algorithms.htm79
-rw-r--r--help/ru/manager/keygen/index.htm121
-rw-r--r--help/ru/manager/keygen/keygen_dll.htm284
-rw-r--r--help/ru/manager/keygen/keygen_net.htm115
-rw-r--r--help/ru/manager/keygen/keygen_php.htm143
-rw-r--r--help/ru/manager/keygen/serial_format.htm260
-rw-r--r--help/ru/manager/licenses.htm112
-rw-r--r--help/ru/manager/usage/api.htm312
-rw-r--r--help/ru/manager/usage/index.htm127
-rw-r--r--help/ru/manager/usage/step11_app.htm62
-rw-r--r--help/ru/manager/usage/step12_code.htm105
-rw-r--r--help/ru/manager/usage/step13_flags.htm96
-rw-r--r--help/ru/manager/usage/step14_name.htm53
-rw-r--r--help/ru/manager/usage/step15_exp.htm59
-rw-r--r--help/ru/manager/usage/step16_time.htm79
-rw-r--r--help/ru/manager/usage/step17_maxbuild.htm85
-rw-r--r--help/ru/manager/usage/step18_blacklist.htm64
-rw-r--r--help/ru/manager/usage/step19_hwid.htm123
-rw-r--r--help/ru/manager/usage/step1A_userdata.htm76
-rw-r--r--help/ru/manager/usage/step21_src.htm109
-rw-r--r--help/ru/manager/usage/step22_vmp.htm42
-rw-r--r--help/ru/manager/usage/step23_product.htm70
-rw-r--r--help/ru/manager/usage/step24_test.htm90
-rw-r--r--help/ru/manager/usage/step25_codelock.htm144
-rw-r--r--help/ru/menu_edit.htm61
-rw-r--r--help/ru/menu_file.htm58
-rw-r--r--help/ru/menu_help.htm38
-rw-r--r--help/ru/menu_project.htm66
-rw-r--r--help/ru/menu_tools.htm41
-rw-r--r--help/ru/mode_console.htm71
-rw-r--r--help/ru/project.htm34
-rw-r--r--help/ru/project_files.htm43
-rw-r--r--help/ru/project_functions.htm134
-rw-r--r--help/ru/project_options.htm125
-rw-r--r--help/ru/project_options_external_addresses.htm80
-rw-r--r--help/ru/project_script.htm34
-rw-r--r--help/ru/recommendations.htm233
-rw-r--r--help/ru/ru.qhcp14
-rw-r--r--help/ru/ru.qhp260
-rw-r--r--help/ru/script.htm37
-rw-r--r--help/ru/script_classes.htm1188
-rw-r--r--help/ru/script_events.htm91
-rw-r--r--help/ru/script_functions.htm53
-rw-r--r--help/ru/sdk_functions.htm205
-rw-r--r--help/ru/software_protection.htm126
-rw-r--r--help/ru/terms.htm70
-rw-r--r--help/ru/toolbar.htm39
-rw-r--r--help/ru/use_map_file.htm55
-rw-r--r--help/ru/use_markers.htm134
-rw-r--r--help/ru/watermarks.htm45
-rw-r--r--help/ru/watermarks_search.htm65
-rw-r--r--help/ru/watermarks_setup.htm49
-rw-r--r--help/ru/work.htm35
136 files changed, 9042 insertions, 0 deletions
diff --git a/help/ru/about_vmprotect.htm b/help/ru/about_vmprotect.htm
new file mode 100644
index 0000000..e0718fc
--- /dev/null
+++ b/help/ru/about_vmprotect.htm
@@ -0,0 +1,234 @@
+<!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>Что такое VMProtect?</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Что такое VMProtect?</h1>
+
+ <p>Программа VMProtect относится к новому поколению средств
+ защиты программного обеспечения. VMProtect поддерживает
+ компиляторы Delphi, Borland C Builder, Visual C/C++, Visual Basic
+ (native), Virtual Pascal, XCode, при этом VMProtect содержит встроенный
+ дизассемблер, позволяющий работать с исполняемыми файлами для операционных систем Windows и Mac OS X,
+ а также подключать MAP-файл, создаваемый компилятором,
+ для быстрого выбора участков кода, которые следует защитить. Для
+ автоматизации операций по защите приложения в VMProtect
+ реализован встроенный скриптовый язык. VMProtect обладает полной
+ поддержкой 32/64-разрядных операционных систем семейства Windows
+ (начиная с версии Win2k) и Mac OS X (начиная с версии 10.6),
+ при этом независимо от платформы VMProtect поддерживает весь спектр
+ исполняемых файлов (Windows версия может работать с файлами от Mac OS X и наоборот).</p>
+
+ <p>Базовым принципом, на основе которого построен VMProtect,
+ является обеспечение эффективной защиты кода приложения от
+ изучения, так как именно максимальное усложнение понимания логики
+ работы внутренних механизмов защиты приложения создает
+ максимальные трудности при взломе программы. Основными методами
+ защиты программного кода, применяемыми VMProtect, являются
+ виртуализация, мутация и смешанный метод защиты, сочетающий
+ мутацию кода приложения с его последующей виртуализацией.</p>
+
+ <p>Одним из достоинств реализации метода виртуализации в
+ программе VMProtect является то, что виртуальная машина, на
+ которой выполняются виртуализированные фрагменты кода,
+ встраивается в результирующий код защищаемого приложения.
+ Следовательно, для функционирования приложения, защищенного с
+ помощью VMProtect, нет необходимости использовать какие-либо
+ дополнительные библиотеки или модули. VMProtect позволяет
+ использовать несколько отличных друг от друга виртуальных машин
+ для защиты разных участков кода одного приложения, что еще больше
+ усложняет процесс взлома защиты, так как взломщику будет
+ необходимо анализировать архитектуру уже нескольких виртуальных
+ машин.</p>
+
+ <p>Метод мутации кода приложения, реализованный в VMProtect,
+ основан на обфускации, в процессе которой в код приложения
+ добавляются "мусорные" команды, "мертвый" код, случайные условные
+ переходы, выполняется мутация оригинальных команд, а также
+ переносится в стек выполнение ряда операций.</p>
+
+ <p>Ключевым отличием программы VMProtect от других протекторов
+ является то, что с ее помощью можно защитить различные участки
+ кода разными методами: часть кода виртуализировать, часть
+ обфусцировать, а для самых критичных участков применить смешанный
+ метод защиты.</p>
+
+ <p>Для предотвращения ложных срабатываний со стороны антивирусов зарегистрированная
+ версия VMProtect использует библиотеку <a href="http://standards.ieee.org/develop/indconn/icsg/taggant.pdf">Taggant</a>, которая подписывает
+ защищаемый файл сертификатом владельца лицензии.</p>
+
+ <p>Еще одной уникальной возможностью программы VMProtect является
+ включение в код приложения <a href=
+ "dictionary.htm#Watermarks">водяных знаков</a>, позволяющих
+ однозначно идентифицировать официального владельца взломанного
+ экземпляра программы, а следовательно, принять к нему
+ соответствующие меры.</p>
+
+ <p>Программа VMProtect доступна в 3-х версиях:</p>
+
+ <ul>
+ <li>Lite (облегченная версия);</li>
+ <li>Professional (базовая версия);</li>
+ <li>Ultimate (максимальная версия);</li>
+ </ul>
+
+ <p>Отличия функциональных возможностей разных версий VMProtect
+ приведены в таблице:</p>
+
+ <table border="1" cellspacing="0" cellpadding="2">
+ <tr align="center">
+ <td rowspan="2" align="center">
+ <strong>Возможности</strong></td>
+
+ <td colspan="3" align="center"><strong>Версия
+ VMProtect</strong></td>
+ </tr>
+
+ <tr align="center">
+ <td width="12%" align="center">Lite</td>
+ <td width="12%" align="center">Professional</td>
+ <td width="12%" align="center">Ultimate</td>
+ </tr>
+
+ <tr bgcolor="#E0E0E0">
+ <td align="left" colspan="4" class="c1"><strong>Методы
+ защиты</strong></td>
+ </tr>
+
+ <tr>
+ <td>Мутация</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Виртуализация</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Ультра (мутация+виртуализация)</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Консольная версия</td>
+ <td align="center">-</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr bgcolor="#E0E0E0">
+ <td align="left" colspan="4"><strong>Опции
+ защиты</strong></td>
+ </tr>
+
+ <tr>
+ <td>Защита памяти</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Защита импорта</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Защита ресурсов</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Упаковка</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Определение отладчика</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Определение средств виртуализации</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr bgcolor="#E0E0E0">
+ <td align="left" colspan="4"><strong>Сервисные
+ функции</strong></td>
+ </tr>
+
+ <tr>
+ <td>Водяные знаки</td>
+ <td align="center">-</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Скриптовый язык</td>
+ <td align="center">-</td>
+ <td align="center">+</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Система лицензирования</td>
+ <td align="center">-</td>
+ <td align="center">-</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Менеджер лицензий</td>
+ <td align="center">-</td>
+ <td align="center">-</td>
+ <td align="center">+</td>
+ </tr>
+
+ <tr>
+ <td>Защита файлов</td>
+ <td align="center">-</td>
+ <td align="center">-</td>
+ <td align="center">+</td>
+ </tr>
+ </table>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/contacts.htm b/help/ru/contacts.htm
new file mode 100644
index 0000000..59de03f
--- /dev/null
+++ b/help/ru/contacts.htm
@@ -0,0 +1,41 @@
+<!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>Контактная информация</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Контактная информация</h1>
+
+ <p>По всем вопросам, связанным с работой программы или её
+ приобретением, обращайтесь к нам по адресу:<br />
+ www: <a href=
+ "http://www.vmpsoft.com">http://www.vmpsoft.com</a><br />
+ e-mail: <a href=
+ "mailto:info@vmpsoft.com">info@vmpsoft.com</a><br />
+ icq uin: <a href=
+ "http://wwp.icq.com/scripts/search.dll?to=65107137">65107137</a><br />
+ </p><a href="http://www.vmpsoft.com/news.php" target=
+ "_blank">Новости</a> | <a href="http://www.vmpsoft.com/buy.php"
+ target="_blank">Купить</a> | <a href=
+ "http://www.vmpsoft.com/forum/index.php" target=
+ "_blank">Форум</a><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/create_project.htm b/help/ru/create_project.htm
new file mode 100644
index 0000000..02cf380
--- /dev/null
+++ b/help/ru/create_project.htm
@@ -0,0 +1,137 @@
+<!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>Подготовка проекта</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Подготовка проекта</h1>
+
+ <p>Для примера рассмотрим простейшее приложение, состоящее из
+ одной формы (Form1), элемента ввода текста (Edit1) и кнопки
+ (Button1). Работа приложения заключается в следующем: при нажатии
+ на кнопку Button1 проверяется корректность введенного пароля и
+ при этом выдается соответствующее сообщение.</p><br />
+ <img src="images/delphi_project.png" />
+
+ <p>Пароль проверяется по простейшему алгоритму: сначала он
+ преобразуется в число, после чего определяется остаток от деления
+ данного числа на 17. Пароль считается правильным, если остаток от
+ деления числового представления пароля на 17 равен 13. Процедура
+ проверки пароля на языке программирования Delphi реализуется
+ следующим образом:</p>
+ <pre class="code">function TForm1.CheckPassword: Boolean;
+begin
+ Result:=(StrToIntDef(Edit1.Text, 0) mod 17=13);
+end;
+
+procedure TForm1.Button1Click(Sender: TObject);
+begin
+ if CheckPassword then
+ MessageDlg('Correct password', mtInformation, [mbOK], 0)
+ else
+ begin
+ MessageDlg('Incorrect password', mtError, [mbOK], 0);
+ Edit1.SetFocus;
+ end;
+end;
+</pre>
+
+ <p>Выбор защищаемых процедур и функций может осуществляться тремя
+ способами:</p>
+
+ <ul>
+ <li>С <a href="use_map_file.htm">использованием MAP-файла</a>,
+ который формируется компилятором при создании исполняемого
+ модуля программы. В MAP-файле содержится вся необходимая
+ информация об именах и адресах всех процедур и функций
+ приложения. В случае использования MAP-файла при работе с
+ VMProtect выбор защищаемых процедур и функций может
+ осуществляться по имени. Используя МАР-файл, после
+ перекомпиляции проекта VMProtect автоматически определит новые
+ адреса процедур и функций.</li>
+
+ <li>С <a href="use_markers.htm">использованием маркеров</a>,
+ которые вставляются в исходный код приложения. Маркеры
+ представляют собой специальные метки, по которым VMProtect
+ определяет границы защищаемого блока. Также VMProtect
+ поддерживает маркеры с предустановленным типом компиляции.
+ Использование маркеров целесообразно, если следует защитить
+ только часть процедуры или функции. При использовании маркеров
+ можно указать части кода, в которых в дальнейшем можно будет
+ защитить строковые константы.</li>
+
+ <li>По адресам защищаемых процедур в исполняемом файле. По
+ сравнению с предыдущими данный способ менее удобен в
+ использовании, так как при любой доработке программы и,
+ соответственно, ее перекомпиляции будет необходимо определять
+ все адреса повторно. Данный способ рекомендуется лишь для
+ защиты программных продуктов, для которых отсутствуют исходные
+ тексты.</li>
+ </ul>
+
+ <p>Использование MAP-файла для определения границ защищаемого
+ кода имеет еще один важный плюс, который требует отдельного
+ рассмотрения. Почти любая процедура или функция, обладающая
+ локальными переменными или использующая стек для хранения
+ регистров и/или промежуточных результатов вычислений, имеет так
+ называемые пролог и эпилог, находящиеся соответственно в начале и
+ в конце скомпилированной процедуры или функции:</p>
+ <pre class="code">push ebp \
+mov ebp, esp \ пролог
+push 00 /
+push ebx /
+
+...
+
+pop ebx \
+pop ecx \ эпилог
+pop ebp /
+ret /
+</pre>
+
+ <p>Из-за особенностей реализации современных компиляторов маркеры
+ кода никогда не охватывают пролог и эпилог (даже если маркерами
+ будет охвачен весь текст функции CheckPassword, находящийся между
+ begin и end). Для взлома будет достаточно откорректировать пролог
+ функции таким образом, чтобы виртуалированный код не был
+ выполнен. Для функции CheckPassword это можно сделать следующим
+ образом:</p>
+ <pre class="code">mov eax, 1
+ret
+</pre>
+
+ <p><strong>Важно:</strong><br />
+ Если для выбора виртуализированных участков кода используется
+ MAP-файл, то пролог и эпилог будут тоже завиртуализированы, что
+ повысит защищенность программы. Более того, если одна
+ виртуализированная функция вызывается из другой
+ виртуализированной функции, то передача управления между ними
+ будет осуществлена без перехода на адрес вызываемой функции
+ (вызов будет представлять собой простой переход на другой адрес
+ байт-кода внутри исполнителя виртуальной машины), что также
+ повысит степень защищенности программы, так как внесенные
+ взломщиком в точку входа корректировки окажутся бесполезными. При
+ работе с виртуализированными функциями передача управления точке
+ входа в завиртуализированную функцию будет осуществлена лишь в
+ случае вызова защищенной функции из незащищенного или
+ промутированного участка кода.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/default.css b/help/ru/default.css
new file mode 100644
index 0000000..2aed7c2
--- /dev/null
+++ b/help/ru/default.css
@@ -0,0 +1,55 @@
+body,td,th
+{
+ font-family: Tahoma, Arial, Helvetica, sans-serif;
+ font-size: 1em;
+}
+
+tt
+{
+ font-family: "Courier new";
+ font-size: 1.1em;
+}
+
+tr
+{
+ vertical-align: top;
+}
+
+pre
+{
+ font-family: "Courier new", monospace;
+ font-size: 1.1em;
+}
+
+.indent
+{
+ margin-left: 2em;
+}
+
+.code
+{
+ font-family: "Courier new";
+ background: #f8f8f8;
+ color: black;
+ padding: 4px;
+ border-style: solid;
+ border-color: #e0e0e0;
+ overflow: auto;
+ border-width: 1px;
+}
+
+td, th
+{
+ border-style: solid;
+ border-color: black;
+}
+
+table
+{
+ border-collapse: collapse;
+}
+
+div.unhide_if_no_site
+{
+ visibility: visible !important;
+}
diff --git a/help/ru/dictionary.htm b/help/ru/dictionary.htm
new file mode 100644
index 0000000..3914277
--- /dev/null
+++ b/help/ru/dictionary.htm
@@ -0,0 +1,107 @@
+<!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>Словарь терминов</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Словарь терминов</h1>
+
+ <p>Эффективное использование любого инструмента невозможно без
+ понимания терминологии, специфичной для соответствующей
+ предметной области. В данном глоссарии дана расшифровка
+ терминологии, применяемой в разрезе использования программы
+ VMProtect. Глоссарий не претендует на универсальность и
+ всеохватность, предложенное в нем толкование терминов может
+ отличаться от классического.</p>
+
+ <p><a name="ByteCode" id="ByteCode"><strong>Байт-код</strong></a> - код, полученный после
+ преобразования машинных команд реального процессора в команды
+ виртуальной машины.</p>
+
+ <p><a name="Virtualization" id="Virtualization"><strong>Виртуализация</strong></a> - процесс преобразования части
+ исполняемого кода приложения в команды виртуальной машины,
+ обладающей неизвестной потенциальному взломщику системой команд,
+ архитектурой и логикой работы. Виртуализированные участки кода
+ выполняются интерпретатором (исполнителем виртуальной машины) без
+ предварительного преобразования в машинные коды процессора. В
+ общем случае задача реинжиниринга виртуализированных фрагментов
+ сводится к изучению архитектуры виртуальной машины, созданию
+ дизассемблера, соответствующего архитектуре имитируемого
+ виртуальной машиной процессора, и анализу дизассемблированного
+ кода.</p>
+
+ <p><a name="VirtualMachine" id="VirtualMachine"><strong>Виртуальная машина</strong></a> - программный код,
+ непосредственно выполняющий байт-код в защищенной программе.</p>
+
+ <p><a name="Watermarks" id="Watermarks"><strong>Водяные
+ знаки</strong></a> - уникальный для каждого пользователя массив
+ байт, позволяющий однозначно идентифицировать легального
+ владельца взломанной копии программы.</p>
+
+ <p><a name="Mutation" id="Mutation"><strong>Мутация</strong></a> - замена исходной команды аналогом
+ или определенной последовательностью команд, обеспечивающей тот
+ же результат, что и исходная команда.</p>
+
+ <p><a name="Obfuscation" id="Obfuscation"><strong>Обфускация</strong></a> - совокупность методик и средств,
+ направленных на затруднение анализа программного кода. В
+ зависимости от языка программирования, на котором написана
+ защищаемая программа, используются различные типы
+ программ-обфускаторов. При обфускации приложений, написанных на
+ интерпретируемых языках (Perl, PHP и др.), изменения вносятся в
+ исходные тексты: удаляются комментарии, переменным присваиваются
+ бессмысленные имена, выполняется шифрация строковых констант и
+ т.д. При обфускации программ, написанных на Java / .NET,
+ выполняют преобразования байт-кода, обрабатываемого виртуальной
+ машиной. При обфускации скомпилированных программ модифицируют
+ машинный код: в него вносятся "мусорные" команды, "мертвый код",
+ случайные переходы, выполняется мутация исходных команд, часть
+ операций переносится в стек, а также выполняются различные
+ структурные (реже математические) преобразования. При
+ реинжиниринге обфусцированых участков кода их пытаются привести в
+ исходный вид, что при определенном подходе к обфускации
+ становится очень трудоемкой задачей.</p>
+
+ <p><a name="Protector" id="Protector"><strong>Программа-протектор</strong></a> - программа,
+ предназначенная для защиты других программных продуктов от
+ взлома. Подавляющее большинство современных протекторов не
+ модифицируют исходный код приложения, а выполняют его
+ упаковку/шифрацию, при этом основной упор сделан на защиту
+ программы (процедуры) распаковки/расшифровки.</p>
+
+ <p><a name="EntryPoint" id="EntryPoint"><strong>Точка входа в
+ программу (EntryPoint)</strong></a> - представляет собой
+ начальный адрес, с которого начинается исполнение загруженной в память программы.</p>
+
+ <p><a name="Pack" id="Pack"><strong>Упаковка</strong></a> - метод
+ защиты кода приложения, при котором производится сжатие
+ исполняемого файла программы и/или используемых библиотек с
+ помощью нестандартных алгоритмов. При использовании упаковки
+ защищаемый программный код сжимается упаковщиком, а при запуске
+ приложения у конечного пользователя производится его полная или
+ частичная распаковка.</p>
+
+ <p><a name="Crypt" id="Crypt"><strong>Шифрация</strong></a> - защита части кода приложения с
+ помощью криптостойких алгоритмов. Программное обеспечение,
+ защищенное с помощью шифрации, требует от конечного пользователя
+ ввода кода активации, который снимает установленные разработчиком
+ ограничения незарегистрированной версии.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/faq.htm b/help/ru/faq.htm
new file mode 100644
index 0000000..21af990
--- /dev/null
+++ b/help/ru/faq.htm
@@ -0,0 +1,139 @@
+<!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>Ответы на вопросы</title>
+</head>
+
+<body>
+ <h1>Ответы на вопросы</h1>
+
+ <h3>Приобретение VMProtect</h3>
+
+ <p><strong>Приобретая VMProtect, смогу ли я использовать его на
+ разных компьютерах?</strong><br />
+ Вы можете установить и использовать VMProtect на любом количестве
+ компьютеров, которые необходимы вам для работы.</p>
+
+ <p><strong>В чем заключается разница между Personal и Company
+ лицензиями и какую лицензию мне нужно выбрать при
+ покупке?</strong><br />
+ Эти лицензии отличаются только типом владельца. Если Вы являетесь
+ частным разработчиком, то выберите Personal лицензию. Если Вы
+ являетесь руководителем организации или планируете использовать
+ продукт в своей организации, то выберите Company лицензию.</p>
+
+ <p><strong>Каким образом осуществляется доставка полной версии
+ VMProtect после покупки?</strong><br />
+ Доставка полной версии (и всех последующих обновлений VMProtect,
+ входящих в ежегодную подписку) осуществляется с помощью
+ электронной почты. В письме отправляется ссылка на архив, содержащий установочный файл с полной версией VMProtect.
+ Поэтому перед покупкой VMProtect рекомендуется отключить все спам фильтры в настройках своего почтового
+ ящика.</p>
+
+ <p><strong>После покупки VMProtect смогу ли я бесплатно получать
+ новые версии или нужно будет их оплачивать
+ дополнительно?</strong><br />
+ После покупки Вы будете бесплатно получать новые версии в течение
+ года. По истечении этого срока Вы можете <a href=
+ "http://www.vmpsoft.com/buy.php">продлить ежегодную подписку</a>
+ либо использовать текущую версию VMProtect без ограничений по
+ времени.</p>
+
+ <p><strong>Возможно ли приобрести VMProtect с помощью кредитной
+ карты или PayPal?</strong><br />
+ Вы можете приобрести VMProtect с помощью кредитной карты или
+ PayPal. Для этого необходимо на <a href=
+ "http://www.vmpsoft.com/buy.php">странице покупки</a> выбрать необходимую версию VMProtect
+ и на следующей странице в качестве метода оплаты выбрать кредитную карту или PayPal.</p>
+
+ <h3>Общие вопросы</h3>
+
+ <p><strong>Есть ли возможность автоматически зашифровать строки и
+ массивы данных?</strong><br />
+ В VMProtect существует возможность скрывать <a href=
+ "sdk_functions.htm#VMProtectDecryptStringA">ANSI константы</a> и
+ <a href="sdk_functions.htm#VMProtectDecryptStringW">Unicode
+ константы</a>. Все остальные данные, с которыми работает
+ обрабатываемый код, остаются в оригинальном виде. Рекомендуется
+ всю конфиденциальную информацию хранить в зашифрованном виде и
+ расшифровывать непосредственно перед использованием. Сам
+ расшифровщик можно <a href=
+ "project_functions.htm#CompilationTypes">завиртуализировать</a>.</p>
+
+ <p><strong>Есть ли возможность защищать процедуры, которые
+ вызываются из разных потоков моего приложения?</strong><br />
+ VMProtect полностью поддерживает многопоточные приложения и для
+ защиты этих процедур не существует никаких дополнительных
+ ограничений.</p>
+
+ <p><strong>Возможно ли совместное использование VMProtect с
+ другим протектором (упаковщиком)?</strong><br />
+ Использование каких-либо упаковщиков (протекторов) после защиты
+ файла с помощью VMProtect может привести к неработоспособности
+ защищенного приложения.</p>
+
+ <p><strong>Необходимо ли включать
+ VMProtectSDK32.dll/VMProtectSDK64.dll в дистрибутив
+ программы?</strong><br />
+ Данные библиотеки используются только на этапе отладки программы
+ (до её защиты). После защиты программы с помощью VMProtect вся
+ информация об использовании этих DLL полностью удаляется и
+ поэтому нет необходимости включать данные библиотеки в
+ дистрибутив программы.</p>
+
+ <h3>Сообщения компилятора</h3>
+
+ <p><strong>Что означает данная ошибка: VMProtectMarker
+ "ToolButton1Click.1".0044327D: Адрес используется процедурой
+ "TForm1.ToolButton1Click"?</strong><br />
+ Данная ошибка означает, что одна и таже команда с адресом
+ 0044327D используется в двух процедурах, которые в данный момент
+ включены в список защищаемых объектов. Для решения этой проблемы
+ необходимо исключить одну из процедур (в данном случае это
+ VMProtectMarker "ToolButton1Click.1" и TForm1.ToolButton1Click)
+ из списка защищаемых объектов.</p>
+
+ <p><strong>Что означает данная ошибка: [Ошибка]
+ TForm1.Test.004433F4: Минимальный размер процедуры для компиляции
+ 5 байт?</strong><br />
+ Данная ошибка означает, что процедура TForm1.Test слишком мала и
+ не может быть защищена. Для решения этой проблемы необходимо
+ исключить эту процедуру из списка защищаемых объектов.</p>
+
+ <p><strong>Что означает данное предупреждение:
+ TForm1.ToolButton1Click.00443368: Переход на внутренний адрес:
+ 00443337?</strong><br />
+ Данное предупреждение означает, что возможен переход из
+ незащищенного кода внутрь защищенного (этот переход может
+ привести к неработоспособности защищенной программы). Для решения
+ этой проблемы необходимо пометить адрес 00443337 как <a href=
+ "project_functions.htm#ExtAddress">внешний</a>.</p>
+
+ <p><strong>Что означает данная ошибка: Секция ".text" находится в
+ области создания новой секции?</strong><br />
+ Данная ошибка обычно возникает при защите драйверов и означает,
+ что свободное место между первой секций файла и служебной
+ информацией, расположенной в заголовке файла, слишком мало для
+ создания новой секции. Для решения этой проблемы необходимо
+ увеличить величину выравнивания для секций в исходных текстах
+ драйвера и полностью его пересобрать (например: если драйвер
+ собирается с помощью WDK/DDK, то необходимо добавить строку
+ DRIVER_ALIGNMENT=0x200 в файл SOURCES).</p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/functions.htm b/help/ru/functions.htm
new file mode 100644
index 0000000..9f28fc8
--- /dev/null
+++ b/help/ru/functions.htm
@@ -0,0 +1,31 @@
+<!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>Раздел "Функции"</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Раздел "Функции"</h1>
+
+ <p>Раздел "Функции" отображает список всех доступных для защиты функций:</p>
+ <p><img src="images/functions.png" /></p>
+ <p>При выборе функции, ее свойства и опции защиты отображаются в основной панели. Для каждой функции можно выбрать <a href="project_functions.htm#CompilationTypes">тип компиляции</a> и установить <a href="manager/features.htm#lock">привязку к серийному номеру</a>.</p>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/history.htm b/help/ru/history.htm
new file mode 100644
index 0000000..d8340b5
--- /dev/null
+++ b/help/ru/history.htm
@@ -0,0 +1,1021 @@
+<!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>История изменений</title>
+</head>
+
+<body>
+ <h1>История изменений</h1>
+
+ <h3>Версия 3.5</h3>
+ <p>[!] .NET: Исправлено множество ошибок<br />
+ [!] ELF: Исправлена ошибка, возникающая в VMProtectGetCurrentHWID при получении информацуии о HDD<br />
+ [+] .NET: Добавлена поддержка .NET Core (3.0+) и .NET Standard (2.1+)<br />
+ [+] .NET: Добавлена защита импорта<br />
+ [+] .NET: Добавлена защита ресурсов<br />
+ [+] .NET: Добавлена поддержка mixed assemblies<br />
+ [*] Mach-O: Улучшена поддержка секций с типом S_THREAD_LOCAL_VARIABLES и S_THREAD_LOCAL_REGULAR<br />
+ [*] Mach-O: Улучшена поддержка Objective-C<br />
+ [*] ELF: Улучшена поддержка релокейшенов с типом R_386_PC32<br />
+ [*] PE: Улучшена антиотладка<br />
+ </p>
+
+ <h3>Версия 3.4</h3>
+ <p>[!] Исправлена ошибка возникающая при виртуализации команд BT [m16], POP [m64]<br />
+ [+] Добавлена поддержка .NET приложений<br />
+ [+] Добавлено дизассемблирование команды PMULLD<br />
+ [+] PE: Добавлена поддержка COFF символом<br />
+ [*] ELF: Улучшено дизассемблирование of SWITCH<br />
+ [*] ELF: Улучшена поддержка настраиваемых элементов с типом R_386_PC32<br />
+ [*] PE: Улучшена обработка исключений<br />
+ [*] PE: Улучшена поддержка Windows Server 2016 Datacenter<br />
+ </p>
+
+ <h3>Версия 3.3</h3>
+ <p>[+] PE: Added support of "Control Flow Guard"<br />
+ [+] PE: Added support of PDB files for loading symbols<br />
+ [+] Mach-O: Added support of OS X 10.13 and later<br />
+ [+] ELF: Added support of statically linked libstdc++.so<br />
+ [+] ELF: Added support of CentOS 5 and CentOS 6<br />
+ [+] ELF: Added support of TLS segments<br />
+ [+] ELF: Added support of HTTPS for VMProtectActivateLicense<br />
+ [*] PE: Improved exception handling for x64 applications<br />
+ [*] PE: Improved detection of virtualization tools under the Hyper-V role<br />
+ [*] PE: Improved demagling of MSVC symbols<br />
+ [*] Mach-O: Improved exception handling<br />
+ [*] Mach-O: Improved support of Objective-C<br />
+ [*] ELF: Fixed a bug that occurred when the "Pack the Output File" option was used<br />
+ </p>
+
+ <h3>Версия 3.2</h3>
+ <p>[!] PE: Исправлена ошибка возникающая при вызове VMProtectIsValidImageCRC внутри защищенного драйвера<br />
+ [!] Исправлена ошибка возникающая при виртуализации команд XOR, имеющей настраиваемые элементы<br />
+ [*] PE: Добавлена упаковка секций, содержащих TLS директорию<br />
+ [*] PE: Улучшено обнаружение отладчиков<br />
+ [*] PE: Taggant System больше не поддерживается<br />
+ [*] Значительно ускорена распаковка при использовании опции "<a href=
+ "project_options.htm#PackOutputFile">Упаковать файл</a>"<br />
+ [+] Добавлена поддержка ELF формата<br />
+ [+] Добавлено дизассемблирование AVX команд<br />
+ </p>
+
+ <h3>Версия 3.1</h3>
+
+ <p>[!] Исправлена ошибка возникающая при дизассемлировании команды MOVUPS с REX префиксом 0x41<br />
+ [!] Исправлена ошибка возникающая при виртуализации команд XLAT, FSIN и POPAD<br />
+ [*] Улучшена поддержка исключений<br />
+ [*] Улучшена архитектура ВМ<br />
+ [*] Улучшена проверка целостности файла на диске при использовании опции "<a href=
+ "project_options.htm#MemoryProtection">Защита памяти</a>"<br />
+ [*] Улучшена виртуализация команд FSTENV, FSTCW, FSAVE и FSTSW<br />
+ [*] PE: VMProtectActivateLicense теперь работает через WinHTTP и использует настройки прокси из IE<br />
+ [*] PE: Улучшена работа VMProtectGetCurrentHWID для драйверов<br />
+ [*] PE: Улучшена поддержка Delphi 6 при использовании опции "<a href=
+ "project_options.htm#ImportProtection">Защита импорта</a>"<br />
+ [*] PE: Улучшено обнаружение отладчиков<br />
+ [+] Добавлена виртуализация команд ADD, AND, SUB, XOR, OR с префиксом LOCK<br />
+ [+] Добавлена виртуализация команды CQO<br />
+ [+] Добавлено дизассемблирование команд PINSRB, PINSRD, PINSRQ, PMINSD, PMINUW, PMINUD, PMAXSB, PMAXSD, PMAXUW и PMAXUD<br />
+ [+] Mach-O: Добавлена поддержка секции "__unwind_info"<br />
+ [+] Mach-O: Добавлена поддержка LC_LOAD_WEAK_DYLIB<br />
+ [+] Mach-O: Добавлена поддержка Delphi Berlin<br />
+ [+] PE: Для драйверов добавлена поддержка Windows 10<br />
+ [+] PE: При использовании опции "<a href=
+ "project_options.htm#Additional">Удалять отладочную информацию</a>" теперь затирается "Rich Header"<br />
+ [+] Ultimate: В секции "<a href="project_files.htm">Файлы</a>" теперь можно создавать папки и использовать символы ".." для перехода в вышестоящий каталог<br />
+ [+] GUI: При отображении защищаемых ANSI строк теперь используется кодовая страница из настроек Windows<br />
+ [+] LUA: Добавлена возможность вызова функций из DLL<br />
+ </p>
+
+ <h3>Версия 3.0</h3>
+
+ <p>[*] PE: Добавлена поддержка исключений в x64 коде<br />
+ [*] Mach-O: Добавлена поддержка <a href="sdk_functions.htm">функций SDK</a><br />
+ [*] Ultimate: Добавлена поддержка <a href="manager/usage/api.htm">функции лицензирования</a> для драйверов и приложений на VB6<br />
+ [*] Ultimate: Улучшена функциональность <a href="project_files.htm">DLL Box</a> - теперь в защищаемое приложение можно включать любые файлы, в том числе и ActiveX серверы с опцией их автоматической регистрации в виртуальном реестре<br />
+ [*] Улучшено обнаружение Virtual Box<br />
+ [*] Скриптовый движок заменен на LUA<br />
+ [*] Новая архитектура ВМ<br />
+ [+] В SDK добавлена новая функция <a href="sdk_functions.htm#VMProtectIsProtected">VMProtectIsProtected</a><br />
+ </p>
+
+ <h3>Версия 2.13</h3>
+
+ <p>[!] PE: Добавлена поддержка Delay Import<br />
+ [!] PE: Улучшена совместимость с VS2012<br />
+ [!] PE: Улучшена совместимость с Embarcadero RAD Studio XE3<br />
+ [!] PE: Улучшена совместимость с MinGW<br />
+ [!] Ultimate: Улучшена совместимость DLL Box с Windows 8<br />
+ [+] WebLM: Добавлена поддержка mbstring.func_overload = 2<br />
+ [+] WebLM: В коде активации добавлено поле "Дата окончания"
+ (VMProtectActivateLicense теперь может возвращать
+ ACTIVATION_EXPIRED если текущая дата больше даты окончания)<br />
+ [+] WebLM: В моде для полей "Дата окончания" и "Максимальная дата
+ сборки" добавлено значение "дней с даты покупки"<br /></p>
+
+ <h3>Версия 2.12</h3>
+
+ <p>[!] PE: Исправлены ошибки, возникающие в x64 приложениях<br />
+ [!] PE: Исправлена ошибка, возникающая при наличии у приложения
+ флага IMAGE_DLLCHARACTERISTICS_NX_COMPAT<br />
+ [+] PE: Добавлена поддержка Windows 8<br />
+ [+] WebLM: Добавлен русский и китайский язык<br /></p>
+
+ <h3>Версия 2.11</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при использовании <a href=
+ "project_options.htm#PackOutputFile">упаковки</a> в х64
+ приложениях<br />
+ [!] PE: Исправлена ошибка, возникающая при использовании опции
+ "<a href="project_options.htm#ImportProtection">Защита
+ импорта</a>"<br />
+ [!] PE: Исправлена ошибка, возникающая при обработке TLS секции,
+ имеющей релоки<br />
+ [+] Ultimate: Добавлена <a href=
+ "manager/activation.htm">активация/деактивация</a><br />
+ [+] Mach-O: Добавлена <a href=
+ "project_options.htm#PackOutputFile">упаковка</a><br />
+ [*] PE: Поддержка DriverVerifier<br />
+ [*] PE: Улучшена поддержка SEH для MSVC<br />
+ [*] Mach-O: Улучшена поддержка IndirectSymbols<br /></p>
+
+ <h3>Версия 2.10</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при использовании опции
+ "<a href="project_options.htm#ResourceProtection">Защита
+ ресурсов</a>"<br />
+ [!] Исправлена ошибка, возникающая при использовании опции
+ "<a href="project_options.htm#ImportProtection">Защита
+ импорта</a>"<br />
+ [!] Исправлена ошибка, возникающая при защите x64 драйверов, не
+ имеющих релоков<br />
+ [+] Добавлена поддержка исполняемых файлов от Mac OS X (Mach-O
+ формат)<br />
+ [+] Добавлена поддержка команды HLT<br />
+ [+] В SDK добавлено новое API - <a href=
+ "sdk_functions.htm#VMProtectFreeString">VMProtectFreeString</a><br />
+ [*] Улучшено опеределение имен маркеров и строк, помеченных с
+ помощью <a href=
+ "sdk_functions.htm#VMProtectDecryptStringA">VMProtectDecryptStringA</a>/<a href="sdk_functions.htm#VMProtectDecryptStringW">VMProtectDecryptStringW</a><br />
+ [*] В имени выходного файла и параметрах лицензирования теперь
+ можно использовать относительные пути<br />
+ [*] Улучшена поддержка SEH для Delphi<br />
+ [*] SenseLock Edition: Добавлена опция "<a href=
+ "project_options.htm#ResourceProtection">Защита
+ ресурсов</a>"<br />
+ [*] SenseLock Edition: В GUI версии добавлен <a href=
+ "manager/licenses.htm">менеджер лицензий</a><br />
+ [*] SenseLock Edition: В GUI версии добавлено программирование ключей<br />
+ [*] Лицензии в менеджере лицензий теперь можно копировать и
+ вставлять из буфера обмена<br /></p>
+
+ <h3>Версия 2.09</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при <a href=
+ "project_options.htm#DebuggerDetection">обнаружении отладчика</a>
+ под Windows 2000<br />
+ [!] Исправлена ошибка, возникающая при дизассемблировании команд
+ PMULHUW и LDMXCSR<br />
+ [!] Исправлена ошибка, возникающая при использовании <a href=
+ "project_options.htm#MemoryProtection">защиты памяти</a> (не
+ проверялась целостность файла на диске)<br />
+ [!] Ultimate: Исправлена ошибка, возникающая при запуске
+ защищенных файлов под Windows 2000 (требовалось наличие
+ EncodePointer/DecodePointer из kernel32.dll)<br />
+ [*] Улучшена виртуализация обработчиков исключений для Visual
+ C<br />
+ [*] <a href="project_options.htm#ResourceProtection">Защита
+ ресурсов</a> теперь доступна в Lite и Professional версиях<br />
+ [*] При использовании <a href=
+ "project_options.htm#ResourceProtection">защиты ресурсов</a>
+ добавлена поддержка EnumResourceTypes, EnumResourceNames и
+ EnumResourceLanguages (доступно только при вызове из главного
+ модуля)<br />
+ [+] Добавлена поддержка исключений для Borland C Builder<br />
+ [+] Ultimate: Ускорена работа <a href=
+ "manager/usage/api.htm#VMProtectGetSerialNumberState">VMProtectGetSerialNumberState</a>
+ и <a href=
+ "manager/usage/api.htm#VMProtectGetSerialNumberData">VMProtectGetSerialNumberData</a><br />
+
+ [+] В скрипт для <a href=
+ "script_classes.htm#TLicenseManager">TLicenseManager</a> добавлен
+ метод <a href=
+ "script_classes.htm#TLicenseManager.Save">Save</a><br />
+ [-] Убрана опция "Перемещать ресурсы в конец файла" - теперь
+ секция ресурсов всегда размещается последней<br /></p>
+
+ <h3>Версия 2.08</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при ассемблировании команды
+ TEST [XXXX], REG<br />
+ [!] Исправлена ошибка, возникающая при диассемблировании х64
+ команд с префиксом 0x67<br />
+ [*] Улучшена поддержка файлов, имеющих небольшие занчения для
+ SectionAlignment<br />
+ [*] Улучшено опеределение имен маркеров и строк для Intel
+ Compiler 12 и Lazarus<br />
+ [*] Улучшена <a href="project_options.htm#ImportProtection">защита
+ импорта</a><br />
+ [*] Ultimate: Теперь можно загружать файлы проекта с параметрами
+ лицензирования<br />
+ [+] Ultimate: Добавлена <a href=
+ "project_options.htm#ResourceProtection">защита ресурсов</a><br />
+ [+] Ultimate: В скрипт добавлены классы <a href=
+ "script_classes.htm#TLicense">TLicense</a> и <a href=
+ "script_classes.htm#TLicenseManager">TLicenseManager</a><br /></p>
+
+ <h3>Версия 2.07</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при работе с <a href=
+ "manager/licenses.htm">менеджером лицензий</a> если в настройках
+ Windows установлен язык отличный от английского<br />
+ [+] В режиме эксперта в опциях теперь можно изменять стандартные
+ сообщения "Обнаружен отладчик", "Обнаружены инструменты
+ виртуализации", "Файл поврежден" и "Необходим серийный
+ номер"<br />
+ [+] В скрипт для <a href=
+ "script_classes.htm#TVMProtector">TVMProtector</a> добавлено
+ свойство <a href=
+ "script_classes.htm#TVMProtector.Messages">Messages</a><br />
+ [*] Улучшена совместимость <a href=
+ "project_options.htm#MemoryProtection">защиты памяти</a> с
+ некоторыми антивирусами<br /></p>
+
+ <h3>Версия 2.06</h3>
+
+ <p>[!] Исправлена ошибка с определением имен маркеров для
+ MinGW<br />
+ [!] Исправлена ошибка, возникающая при <a href=
+ "project_options.htm#ImportProtection">защите импорта</a> в х64
+ файлах<br />
+ [!] Исправлена ошибка, возникающая при виртуализации FILD WORD
+ PTR [XXXX]<br />
+ [!] Исправлена ошибка, возникающая при дизассемблировании
+ PSRLW<br />
+ [!] Исправлена ошибка, возникающая в <a href=
+ "project_files.htm">DLL Box</a> при активном антивирусе<br />
+ [*] Файл проекта теперь сохраняется в XML формате<br />
+ [*] Скрипт теперь хранится в файле проекта<br />
+ [*] Ultimate: <a href="manager/licenses.htm">Менеджер
+ лицензий</a> теперь находится в GUI версии<br />
+ [*] Ultimate: Значительно ускорено выполнение кода, <a href=
+ "project_functions.htm#LockToKey">привязанного к серийному
+ номеру</a><br />
+ [+] Добавлена поддержка МАР файлов для MinGW<br />
+ [+] Добавлена поддержка JCLDEBUG<br />
+ [+] В скрипт для <a href=
+ "script_classes.htm#TPEDirectory">TPEDirectory</a> добавлен метод
+ Clear<br />
+ [+] В скрипт для <a href=
+ "script_classes.htm#TVMProcedure">TVMProcedure</a> добавлены
+ свойства <a href=
+ "script_classes.htm#TVMProcedure.InputSize">InputSize</a> и
+ <a href=
+ "script_classes.htm#TVMProcedure.OutputSize">OutputSize</a><br />
+ [+] Ultimate: В SDK добавлены новые API - <a href=
+ "sdk_functions.htm#VMProtectBeginVirtualizationLockByKey">VMProtectBeginVirtualizationLockByKey</a>
+ и <a href=
+ "sdk_functions.htm#VMProtectBeginUltraLockByKey">VMProtectBeginUltraLockByKey</a><br />
+ </p>
+
+ <h3>Версия 2.05</h3>
+
+ <p>[!] Исправлены ошибки с определением строк для программ на
+ MinGW<br />
+ [!] Исправлены ошибка "Out of system resources", возникающая при
+ добавлении большого количества процедур в проект<br />
+ [!] Исправлены ошибка, возникающая при выводе строк в консольной
+ версии<br />
+ [*] Дата MAP файла теперь берется из содержимого файла<br />
+ [+] Ultimate: Добавлены примеры по работе с <a href=
+ "manager/index.htm">системой лицензирования</a> (на MSVC и
+ Delphi)<br />
+ [+] Ultimate: Добавлены исходные коды <a href=
+ "manager/keygen/keygen_dll.htm">генератора серийных номеров</a>
+ на MSVC<br />
+ [+] Ultimate: Добавлен <a href="project_files.htm">DLL Box</a>
+ (доступен только для EXE файлов)<br />
+ [+] Ultimate: В скрипт добавлен класс <a href=
+ "script_classes.htm#TInternalDLLs">TInternalDLLs</a><br />
+ [+] Ultimate: В скрипт для класса <a href=
+ "script_classes.htm#TVMProtector">TVMProtector</a> добавлено
+ свойство <a href=
+ "script_classes.htm#TVMProtector.InternalDlls">InternalDlls</a><br />
+
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TMapRecord">TMapRecord</a> добавлено свойство
+ <a href=
+ "script_classes.htm#TMapRecord.SegmentName">SegmentName</a><br />
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TIntelRecord">TIntelRecord</a> добавлено
+ свойство <a href=
+ "script_classes.htm#TIntelRecord.Operands">Operands</a><br />
+ [+] Добавлен чешский язык<br /></p>
+
+ <h3>Версия 2.04</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при обфускации FDIVR
+ [ESP+XXXX]<br />
+ [!] Исправлена ошибка, возникающая при обфускации SWITCH в x64
+ приложениях<br />
+ [*] При использовании опции "<a href=
+ "project_options.htm#MemoryProtection">Защита памяти</a>" теперь
+ проверяется целостность файла на диске<br />
+ [*] Ultimate: Улучшена интеграция модуля лицензирования с
+ защищаемой программой<br />
+ [+] Добавлена поддержка файлов, имеющих оверлей<br />
+ [+] Ultimate: Добавлен <a href=
+ "manager/keygen/keygen_net.htm">пример генератора серийных
+ номеров на C#</a><br />
+ [+] Ultimate: В <a href="manager/licenses.htm">менеджере
+ лицензий</a> добавлен экспорт параметров продукта для генератора
+ на C#<br />
+ [+] Ultimate: В <a href="mode_console.htm">консольную версию</a>
+ добавлен параметр "-lf", с помощью которого можно указать имя
+ файла с параметрами лицензирования<br />
+ [+] Добавлен французский файл помощи<br /></p>
+
+ <h3>Версия 2.03</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при использовании <a href=
+ "project_options.htm#ImportProtection">защиты импорта</a> в SYS
+ файлах (под Windows 7 не определялся базовый адрес hal.dll)<br />
+ [!] Исправлена ошибка, возникающая при обфускации команд с
+ использованием CRx регистров в SYS файлах<br />
+ [!] Исправлены мелкие ошибки<br />
+ [*] Улучшения в <a href="manager/index.htm">системе
+ лицензирования</a> Ultimate версии<br />
+ [+] Добавлен французский язык<br /></p>
+
+ <h3>Версия 2.02</h3>
+
+ <p>[!] В SenseLock Edition исправлена ошибка, возникающая при
+ одновременной работе нескольких программ, которые используют
+ разные лицензии в ключе (пользователям SenseLock Edition
+ необходимо обновить прошивку в мастер ключе)<br />
+ [!] Исправлена ошибка при дизассемблировани EntryPoint у программ
+ на Delphi<br />
+ [!] Исправлены мелкие ошибки<br />
+ [*] Важные улучшения в <a href="manager/index.htm">системе
+ лицензирования</a> Ultimate версии<br />
+ [*] SenseLock Edition теперь использует систему лицензирования
+ Ultimate версии (пользователям SenseLock Edition необходимо
+ обновить лицензию в мастер ключе)<br />
+ [*] Улучшено определение строк, помеченных с помощью <a href=
+ "sdk_functions.htm#VMProtectDecryptStringA">VMProtectDecryptStringA</a>/<a href="sdk_functions.htm#VMProtectDecryptStringW">VMProtectDecryptStringW</a><br />
+
+ [+] В GUI добавлена поддержка Unicode<br />
+ [+] Добавлен традиционный китайский язык<br /></p>
+
+ <h3>Версия 2.01</h3>
+
+ <p>[!] Исправлены мелкие ошибки в инсталляторе, <a href=
+ "manager/licenses.htm">менеджере лицензий</a> и <a href=
+ "sdk_functions.htm">SDK</a><br />
+ [*] Для регистрации VMProtect сейчас используется собственная
+ <a href="manager/index.htm">система лицензирования</a><br />
+ [+] Добавлен упрощенный китайский язык<br /></p>
+
+ <h3>Версия 2.0</h3>
+
+ <p>[!] Исправлены ошибки при дизассемблировании и виртуализации
+ команд CALL FWORD PTR [XXXX] и JMP FWORD PTR [XXXX]<br />
+ [!] В версии SenseLock Edition исправлена ошибка, возникающая при
+ запрое серийного номер ключа после смены стандартного PIN
+ пользователя<br />
+ [!] Исправлена ошибка, возникающая при виртуализации SWITCH в х64
+ приложениях<br />
+ [!] Исправлена ошибка, возникающая при дизассемблировании команд
+ ROL, ROR, RCL, RCR, SHL, SHR, SAL и SAR, имеющих REX преффикс в
+ х64 приложениях<br />
+ [!] Исправлена ошибка, возникающая при виртуализации команды
+ CMOVxx<br />
+ [!] Исправлены мелкие ошибки<br />
+ [*] Обновлен файл помощи на русском<br />
+ [*] Обновлен файл помощи на английском<br />
+ [+] Добавлена <a href="manager/index.htm">система
+ лицензирования</a> (доступна только в Ultimate версии)<br />
+ [+] В SDK добавлены новые API - <a href=
+ "sdk_functions.htm#VMProtectDecryptStringA">VMProtectDecryptStringA</a>
+ и <a href=
+ "sdk_functions.htm#VMProtectDecryptStringW">VMProtectDecryptStringW</a><br />
+
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TVMProcedure">TVMProcedure</a> добавлено
+ свойство <a href=
+ "script_classes.htm#TVMProcedure.CompilationOptions">CompilationOptions</a><br />
+
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TVMProcedure">TVMProcedure</a> добавлены
+ свойства <a href=
+ "script_classes.htm#TVMProcedure.SELicense">SELicense</a> и
+ <a href="script_classes.htm#TVMProcedure.SEVersion">SEVersion</a>
+ (доступны только в SenseLock Edition)<br />
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TVMProtector">TVMProtector</a> добавлены
+ свойства <a href=
+ "script_classes.htm#TVMProtector.VMSectionName">VMSectionName</a>
+ и <a href=
+ "script_classes.htm#TVMProtector.VMExecutorCount">VMExecutorCount</a><br />
+
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TVMProtector">TVMProtector</a> добавлены
+ свойства <a href=
+ "script_classes.htm#TVMProtector.SEMasterPassword">SEMasterPassword</a>,
+ <a href=
+ "script_classes.htm#TVMProtector.SEUserPIN">SEUserPIN</a>,
+ <a href="script_classes.htm#TVMProtector.SEKeyID">SEKeyID</a>,
+ <a href="script_classes.htm#TVMProtector.SELicense">SELicense</a>
+ и <a href=
+ "script_classes.htm#TVMProtector.SEVersion">SEVersion</a>
+ (доступны только в SenseLock Edition)<br />
+ [-] Убрана опция "Динамическое создание онлайн команд"<br /></p>
+
+ <h3>Версия 1.81</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при исполнении
+ промутированного кода на процессорах Pentium 4<br />
+ [!] Исправлена ошибка, возникающая при исполнении
+ завиртуализированного кода на некоторых процессорах Athlon<br />
+ [!] Исправлены ошибки, возникающие при дизассемблировании и
+ виртуализации структур, описывающих обработчики исключений с
+ фильтром на класс исключения (для программ на Delphi и Borland
+ C++ Builder)<br />
+ [!] Исправленa ошибкa, возникающая при использовании <a href=
+ "project_options.htm#VirtualMachines">нескольких ВМ</a> в
+ 64-битных файлах<br />
+ [!] Исправлены мелкие ошибки<br />
+ [*] Улучшено определение имен <a href=
+ "use_markers.htm">маркеров</a> (для программ на Visual C)<br />
+ [*] Значительно снижено потребление памяти в процессе
+ компиляции<br />
+ [*] Ресурс "HTML" теперь не упаковывается<br />
+ [*] Обновлен файл помощи на русском<br />
+ [+] В режиме "Мастер" добавлен
+ поиск процедур по маске<br />
+ [+] Добавлен <a href="project_options.htm#PackOutputFile">новый
+ режим упаковки</a> с более высокой степенью сжатия<br />
+ [+] Добавлена поддержка файлов, имеющих TLS-калбеки<br />
+ [+] В SDK добавлено новое API - <a href=
+ "sdk_functions.htm#VMProtectIsValidImageCRC">VMProtectIsValidImageCRC</a><br />
+ </p>
+
+ <h3>Версия 1.8</h3>
+
+ <p>[!] Исправлены ошибки, возникающие при <a href=
+ "project_options.htm#ImportProtection">защите импорта</a> в
+ SYS-файлах<br />
+ [!] Исправлены ошибки, возникающие при <a href=
+ "project_options.htm#MemoryProtection">защите памяти</a> в
+ DLL/SYS-файлах<br />
+ [!] Исправлены ошибки, возникающие при использовании <a href=
+ "project_options.htm#VirtualMachines">нескольких ВМ</a> в
+ DLL/SYS-файлах<br />
+ [!] Исправлена ошибка, возникающая при мутации кода, имеющего
+ обработчики исключений<br />
+ [!] Исправлена ошибка, возникающая при одновременном
+ использовании <a href=
+ "project_options.htm#MemoryProtection">защиты памяти</a> и
+ <a href="project_options.htm#Watermarks">водяных знаков</a><br />
+ [!] Исправлены мелкие ошибки<br />
+ [*] Улучшено определение ссылок на строки, помеченных <a href=
+ "use_markers.htm">маркерами</a> (теперь не нужно помечать
+ маркерами все ссылки на защищаемую строку)<br />
+ [*] Улучшена <a href="project_options.htm#ImportProtection">защита
+ импорта</a><br />
+ [*] Улучшено <a href=
+ "project_options.htm#DebuggerDetection">определение
+ отладчика</a><br />
+ [*] Обновлен файл помощи на русском<br />
+ [+] В GUI-версии теперь можно сохранять файлы проекта под
+ разными именами<br />
+ [+] Теперь можно открывать файлы
+ проекта<br />
+ [+] Добавлено <a href=
+ "project_options.htm#VirtualizationToolsDetection">обнаружение
+ Sandboxie</a><br />
+ [+] Добавлена поддержка файлов, скомпилированных с ключем
+ /SAFESEH<br />
+ [+] Добавлена поддержка CodeGear 2009<br />
+ [+] Теперь можно задавать имена маркерам (при использовании
+ <a href=
+ "sdk_functions.htm#VMProtectBegin">VMProtectBegin</a>/<a href=
+ "sdk_functions.htm#VMProtectBeginMutation">VMProtectBeginMutation</a>/<a href="sdk_functions.htm#VMProtectBeginVirtualization">VMProtectBeginVirtualization</a>/<a href="sdk_functions.htm#VMProtectBeginUltra">VMProtectBeginUltra</a>
+ из VMProtectSDKxx.dll/VMProtectDDKxx.sys)<br />
+ [+] В SDK добавлены новые API (<a href=
+ "sdk_functions.htm#VMProtectIsDebuggerPresent">VMProtectIsDebuggerPresent</a>
+ и <a href=
+ "sdk_functions.htm#VMProtectIsVirtualMachinePresent">VMProtectIsVirtualMachinePresent</a>)<br />
+
+ [+] Для версии SenseLock Edition добавлена утилита "Система
+ удаленного обновления и лицензирования"<br />
+ [+] Для версии SenseLock Edition добавлена привязка к
+ идентификатору ключа<br /></p>
+
+ <h3>Версия 1.7</h3>
+
+ <p>[!] Секции, имеющие флаги SHAREABLE+WRITABLE, теперь не
+ упаковываются<br />
+ [!] Исправлены мелкие ошибки<br />
+ [*] Улучшена <a href="project_options.htm#ImportProtection">защита
+ импорта</a> для SYS-файлов<br />
+ [*] Улучшена <a href=
+ "project_options.htm#PackOutputFile">упаковка</a> SYS-файлов
+ (упакованным секциям больше не устанавливается флаг
+ WRITABLE)<br />
+ [*] Улучшено <a href=
+ "project_options.htm#DebuggerDetection">определение
+ отладчика</a><br />
+ [+] Добавлена опция "<a href=
+ "project_options.htm#MemoryProtection">Защита памяти</a>" (данная
+ опция защищает память от изменений во время работы
+ приложения)<br />
+ [+] Добавлена опция "<a href=
+ "project_options.htm#VirtualizationToolsDetection">Определение
+ инструментов виртуализации (VMware/Virtual PC)</a>"<br />
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TPEFile">TPEFile</a> добавлено свойство
+ <a href=
+ "script_classes.htm#TPEFile.EntryPoint">EntryPoint</a><br /></p>
+
+ <h3>Версия 1.65</h3>
+
+ <p>[!] Исправлены мелкие ошибки<br />
+ [*] Улучшена <a href="project_options.htm#ImportProtection">защита
+ импорта</a><br />
+ [*] Улучшено <a href=
+ "project_options.htm#DebuggerDetection">определение
+ отладчика</a><br />
+ [+] Добавлено определение непарных <a href=
+ "use_markers.htm">маркеров</a> (непарные маркеры доступны в общем
+ списке объектов)<br />
+ [+] Добавлены маркеры с предустановленным типом компиляции:
+ VMProtectBeginVirtualization, VMProtectBeginMutation и
+ VMProtectBeginUltra<br />
+ [+] Добавлен традиционный китайский язык<br /></p>
+
+ <h3>Версия 1.64</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при работе <a href=
+ "project_options.htm#PackOutputFile">упакованного файла</a>,
+ имеющего ресурсы "TYPELIB", "REGISTRY" и "MUI"<br />
+ [!] Исправлена ошибка R6002, возникающая при работе упакованного
+ файла (для программ на Visual C)<br />
+ [!] Исправлены ошибка, возникающая при использовании опции
+ "<a href="project_options.htm#ImportProtection">Защита
+ импорта</a>" в 64-битных SYS-файлах<br />
+ [!] Исправлены мелкие ошибки<br />
+ [*] Файл настроек теперь сохраняется в каталог
+ %APPDATA%/PolyTech/VMProtect<br />
+ [*] Улучшена <a href="project_options.htm#ImportProtection">защита
+ импорта</a><br />
+ [+] Добавлена опция "<a href=
+ "project_options.htm#VirtualMachines">Виртуальные Машины</a>"
+ (разные завиртуализированные участки кода будут выполняться на
+ разных виртуальных машинах с разной архитектурой)<br />
+ [+] Добавлена опция "<a href=
+ "project_options.htm#DebuggerDetection">Определение отладчика</a>"
+ (при обнаружении отладчика защищенное приложение будет показывать
+ соответствующее сообщение и закрываться)<br />
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TPESection">TPESection</a> добавлено свойство
+ <a href=
+ "script_classes.htm#TPESection.IncludedInPacking">IncludedInPacking</a><br />
+
+ [+] Добавлена поддержка команды IRETD<br />
+ [+] Добавлен пример c использованием маркеров в Lazarus<br /></p>
+
+ <h3>Версия 1.63</h3>
+
+ <p>[!] Исправлены ошибки, возникающие при использовании опции
+ "<a href="project_options.htm#ImportProtection">Защита
+ импорта</a>"<br />
+ [!] Исправлены мелкие ошибки<br />
+ [+] В скрипт добавлено событие <a href=
+ "script_events.htm#OnBeforePackFile">OnBeforePackFile</a><br />
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TPEFile">TPEFile</a> добавлено свойство
+ <a href="script_classes.htm#TPEFile.Handle">Handle</a><br />
+ [+] Добавлен пример c использованием <a href=
+ "use_markers.htm">маркеров</a> в Free Pascal<br />
+ [*] Улучшен контроль целостности ВМ объектов<br /></p>
+
+ <h3>Версия 1.62</h3>
+
+ <p>[!] Исправлены ошибки, возникающие при использовании опции
+ "<a href="project_options.htm#ImportProtection">Защита
+ импорта</a>"<br />
+ [!] Исправлена ошибка, возникающая при обработке исключения в
+ TRY/EXCEPT/END блоке в режиме "Ультра" (для программ на Delphi и
+ Borland C++ Builder)<br />
+ [*] Улучшена <a href="project_options.htm#ImportProtection">защита
+ импорта</a> для SYS-файлов<br />
+ [+] Каждый объект из проекта теперь может иметь свои опции
+ компиляции для более тонкой настройки быстродействия
+ (индивидуальные опции настраиваются в дереве проекта)<br />
+ [+] Добавлена опция "Перемещать ресурсы в конец файла"<br />
+ [+] Добавлен пример использования расширенных маркеров (папка
+ Examples\Scripts\UseExtMarkers)<br /></p>
+
+ <h3>Версия 1.61</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при запуске упакованных
+ файлов под управлением Windows 95/98<br />
+ [!] Исправлены мелкие ошибки<br />
+ [+] В Lite-версии добавлена возможность передачи имени файла
+ через командную строку<br />
+ [+] В режиме "Мастер" добавлена
+ история<br />
+ [+] В режиме "Мастер" добавлен
+ выбор языка<br />
+ [+] Добавлена опция "<a href=
+ "project_options.htm#ImportProtection">Защита импорта</a>"
+ (рекомендуется использовать совместно с упаковкой выходного
+ файла)<br />
+ [+] В <a href="mode_console.htm">консольной версии</a> добавлен
+ параметр "-we" (при использовании этого параметра все
+ предупреждения будут отображаться как ошибки)<br />
+ [+] В скрипт добавлен класс <a href=
+ "script_classes.htm#TPEResourceRecords">TPEResourceRecords</a><br />
+
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TPEFile">TPEFile</a> добавлено свойство
+ <a href=
+ "script_classes.htm#TPEFile.ResourceRecords">ResourceRecords</a><br />
+ </p>
+
+ <h3>Версия 1.6</h3>
+
+ <p>[!] Исправлены мелкие ошибки<br />
+ [*] Улучшена работа с одинаковыми строками (теперь одинаковые
+ строки отображаются как один объект, содержащий несколько
+ записей)<br />
+ [+] Добавлена возможность упаковки выходного файла<br />
+ [+] В скрипт добавлен класс <a href=
+ "script_classes.htm#TPEExportRecords">TPEExportRecords</a><br />
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TPEFile">TPEFile</a> добавлено свойство
+ <a href=
+ "script_classes.htm#TPEFile.ExportRecords">ExportRecords</a><br />
+
+ [+] В скрипт добавлено событие <a href=
+ "script_events.htm#OnBeforeSaveFile">OnBeforeSaveFile</a><br />
+ [+] Добавлен файл помощи на китайском языке (перевод Wang
+ Xiaopeng)<br />
+ [+] При загрузке MAP-файла добавлена проверка даты и времени
+ модификации (если дата и время модификации MAP-файла отличается
+ от даты и времени модификации защищаемого файла, то MAP-файл не
+ будет загружен)<br /></p>
+
+ <h3>Версия 1.56</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при виртуализации команд
+ BT, BTC, BTR и BTS<br />
+ [!] Исправлены мелкие ошибки<br />
+ [*] Список опций защиты отсортирован в порядке убывания
+ приоритета<br />
+ [*] Улучшена поддержка SEH для VC8<br />
+ [*] Улучшено динамическое создание онлайн-команд<br />
+ [*] Улучшен контроль целостности объектов ВМ<br />
+ [+] Добавлена поддержка команд PREFETCH и PREFETCHW<br />
+ [+] В скрипт добавлены функции CompareText и
+ AnsiCompareText<br />
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TPEFile">TPEFile</a> добавлено свойство
+ <a href="script_classes.htm#TPEFile.Size">Size</a><br />
+ [+] Добавлен пример c использованием <a href=
+ "use_markers.htm">маркеров</a> в MinGW<br />
+ [+] Добавлен китайский язык (перевод Wang Xiaopeng)<br />
+ [+] В окне добавления процедуры добавлен <a href=
+ "project_functions.htm#Search">поиск по маске</a> с
+ использованием символов "*" и "?"<br />
+ [+] В сообщения компилятора теперь выводится информация о размере
+ выходного файла<br /></p>
+
+ <h3>Версия 1.55</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при работе с файлом,
+ имеющим "невыровненное" значение ImageSize<br />
+ [!] Исправлена ошибка, возникающая при определении начала блока
+ TRY для программ на Delphi<br />
+ [!] Исправлена ошибка, возникающая при обработке "смешанного"
+ кода из Discardable и NonDiscardable секций в SYS-файлах<br />
+ [!] Исправлена ошибка, возникающая при виртуализации 64-битных
+ DLL/SYS-файлов<br />
+ [*] Восстановлена опция "Шифрация регистров при выходе из
+ ВМ"<br />
+ [+] В скрипт добавлен класс <a href=
+ "script_classes.htm#TIniFile">TIniFile</a><br />
+ [+] В скрипт для класса <a href=
+ "script_classes.htm#TPEFile">TPEFile</a> добавлены дополнительные
+ свойства и методы<br />
+ [+] В GUI-версию добавлен калькулятор для расчета смещений в
+ файле по адресам<br />
+ [+] Добавлен итальянский язык (перевод Gabriele Lanza)<br /></p>
+
+ <h3>Версия 1.54</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при мутации команды PUSH
+ ESP<br />
+ [!] Исправлена ошибка, возникающая при виртуализации команды
+ FLDCW [ESP+xxxx]<br />
+ [!] Исправлена ошибка, возникающая при обфускации байт-кода<br />
+ [*] Улучшения в GUI<br />
+ [+] Добавлены немецкий и испанский языки<br />
+ [+] Добавлена поддержка <a href="script.htm">скриптов</a><br />
+ [+] В <a href="mode_console.htm">консольной версии</a> добавлен
+ параметр, с помощью которого можно указать имя файла со
+ скриптом<br /></p>
+
+ <h3>Версия 1.53</h3>
+
+ <p>[!] Исправлены ошибки, возникающие при виртуализации кода в
+ DLL/SYS-файлах<br />
+ [*] Улучшения в виртуализации кода<br />
+ [*] В <a href="mode_console.htm">консольной версии</a> при
+ перенаправлении вывода текста в файл убраны бегущие
+ проценты<br />
+ [+] Добавлена возможность вставки маркеров для x86-64<br />
+ [+] Добавлена возможность создавать папки в проекте<br />
+ [+] В <a href="mode_console.htm">консольной версии</a> добавлен
+ параметр, с помощью которого можно указать имя файла
+ проекта<br /></p>
+
+ <h3>Версия 1.52</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при мутации команд CMOVxx,
+ CMPXCHG и CMPXCHG8B<br />
+ [!] Исправлена ошибка, возникающая при мутации команды LEA
+ ESP,[ESP+xxxx]<br />
+ [*] Команды RCL и RCR добавлены в базовую логику ВМ<br />
+ [+] Добавлена поддержка x86-64<br />
+ [+] В GUI-версии на закладке "<a href=
+ "project_options.htm">Опции</a>" теперь можно указать имя
+ выходного файла<br />
+ [+] Добавлена справка на русском и английском языках<br /></p>
+
+ <h3>Версия 1.51</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при создании "Relocation
+ Table" нулевой длины<br />
+ [!] Исправлена ошибка, возникающая при мутации команды CALL
+ [xxxx] в режиме "Мутация" в DLL/SYS-файлах<br />
+ [!] В примере на Delphi в определение VMProtectBegin добавлена
+ команда, препятствующая оптимизации VMProtectBegin (оптимизация
+ VMProtectBegin могла приводить к неработоспособности защищенного
+ файла)<br />
+ [+] Добавлена опция "Автосохранение проекта после
+ компиляции"<br /></p>
+
+ <h3>Версия 1.5</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при перетаскивании файлов в
+ главное окно<br />
+ [!] Исправлена ошибка, возникающая при работе с файлами, имеющими
+ атрибут "Read only"<br />
+ [!] Исправлены мелкие недочеты при компиляции в режиме
+ "Ультра"<br />
+ [*] Защищенный файл теперь имеет точно такие же атрибуты как
+ оригинальный файл<br />
+ [+] В список защищаемых процедур теперь можно включать строки
+ (присвоение строк необходимо отмечать маркерами)<br />
+ [+] В дистрибутив добавлены примеры c использованием маркеров в
+ Borland C++ Builder, Delphi, MASM, Visual Basic и Visual
+ C++<br />
+ [+] Добавлена опция "Интегрировать в оболочку"<br /></p>
+
+ <h3>Версия 1.4</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при мутации команд IMUL,
+ MUL, IDIV, DIV<br />
+ [!] Исправлена ошибка, возникающая при виртуализации нескольких
+ CASE таблиц, идущих друг за другом<br />
+ [!] Исправлена ошибка, возникающая при виртуализации команд POP
+ word/dword ptr [esp+xxxx] и IMUL reg8<br />
+ [!] Исправлена ошибка, возникающая при дизассемблировании команд
+ MOVNTPS и MOVNTPD<br />
+ [+] Добавлен новый тип компиляции "Ультра (мутация +
+ виртуализация)"<br />
+ [+] Добавлен выбор типа компиляции в окне добавления/изменения
+ процедуры<br />
+ [+] Добавлен поиск водяных знаков в процессах (используется для
+ поиска водяных знаков в упакованных файлах)<br />
+ [*] Улучшена совместимость с ASM компиляторами (TASM, MASM и
+ т.п.)<br /></p>
+
+ <h3>Версия 1.3</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при эмуляции команды FILD
+ word ptr [xxxx]<br />
+ [+] Для каждой процедуры можно указать тип компиляции ("Мутация"
+ или "Виртуализация")<br /></p>
+
+ <h3>Версия 1.25</h3>
+
+ <p>[+] Добавлена поддержка SEH для VC7-8<br />
+ [+] Добавлена поддержка маркеров в Visual Basic (начало и конец
+ участка маркируются вставками на бейсике - Call VarPtr("VMProtect
+ begin") и Call VarPtr("VMProtect end"))<br />
+ [*] В зарегистрированной версии программы исполнитель ВМ теперь
+ полностью видоизменяется (препятствует автоматическому
+ определению защиты сигнатурными сканерами PEiD, RDG Packer
+ Detector и т.п.)<br /></p>
+
+ <h3>Версия 1.24</h3>
+
+ <p>[+] Добавлена возможность вставлять в защищаемый файл водяные
+ знаки<br />
+ [*] Исполнитель ВМ теперь полностью поддерживает многопоточные
+ приложения (теперь нет необходимости создавать процедуру
+ выделения памяти для нужд исполнителя)<br />
+ [-] Убрана опция с выбором функции выделения памяти для нужд
+ исполнителя<br /></p>
+
+ <h3>Версия 1.23</h3>
+
+ <p>[!] Исправлены мелкие недочеты [+] Добавлен режим работы
+ "Мастер" [+] В дереве процедур добавлен показ ссылок [*] Опции
+ "Скрывать константы", "Динамическое создание онлайн-команд",
+ "Шифрация регистров при переходах", "Контроль целостности
+ объектов ВМ" и многое другое теперь доступны только для
+ зарегистрированных пользователей</p>
+
+ <h3>Версия 1.22.2</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при компиляции проектов с
+ включенной опцией "Выделение памяти в исполнителе"<br /></p>
+
+ <h3>Версия 1.22</h3>
+
+ <p>[!] Исправлены мелкие ошибки<br />
+ [+] Добавлена возможность контроля целостности байт-кода (при
+ включенной опции "Контроль целостности объектов ВМ")<br /></p>
+
+ <h3>Версия 1.21</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при эмуляции CMPXCHG8b,
+ если в операндах участвуют регистры EAX и EDX<br />
+ [+] В исполнителе присутствуют только те команды, которые будут
+ участвовать при исполнении байт-кода<br />
+ [-] Из базовой логики ВМ убраны некоторые команды (затрудняет
+ анализ и декомпиляцию байт-кода)<br /></p>
+
+ <h3>Версия 1.2</h3>
+
+ <p>[!] Исправлена ошибка, возникающая при перемещении директории
+ Bound Import<br />
+ [+] Добавлена возможность включения в проект участков кода,
+ помеченных маркерами (начало и конец участка маркируются
+ вставками на ассемблере - "db $EB,$10,'VMProtect begin',0" и "db
+ $EB,$0E,'VMProtect end',0")<br />
+ [+] Добавлена возможность включать в проект экспортируемые
+ функции<br />
+ [-] Убрана опция "Шифрация байт-кода" (шифрация байт-кода теперь
+ всегда включена)<br /></p>
+
+ <h3>Версия 1.1</h3>
+
+ <p>[!] Исправлены ошибки, возникающие при: эмуляции SBB
+ (неправильное состояние некоторых флагов); эмуляции CMOVxx,
+ CMPXCHG и CMPXCHG8b (в случаях, когда в качестве второго
+ аргумента использовалась адресация с применением регистра ESP или
+ DWORD значения)<br />
+ [+] Добавлена поддержка SEH в VB6 (native)<br />
+ [+] Добавлена поддержка MAP-файлов, генерируемых IDA<br />
+ [+] Добавлена возможность пакетного добавления процедур<br />
+ [+] Добавлен показ ссылок на команды прямо в листинге
+ процедур<br />
+ [+] Добавлена новая опция "Шифрация регистров при
+ переходах"<br /></p>
+
+ <h3>Версия 1.09</h3>
+
+ <p>[*] Доработан процесс определения конца процедуры при
+ дизассемблировании циклов<br />
+ [+] Для совместимости с UPX добавлена очистка флага Sharable у
+ Writable-секций (в случаях, когда старая таблица релоков
+ используется для нужд ВМ)<br /></p>
+
+ <h3>Версия 1.08</h3>
+
+ <p>[*] Ускорен процесс дизассемблирования больших участков
+ кода<br />
+ [*] Доработан механизм метаморфизма исполнителя
+ байт-кода<br /></p>
+
+ <h3>Версия 1.07</h3>
+
+ <p>[!] Исправлены ошибки, возникающие при работе с PE файлами (в
+ случаях, когда виртуальный размер секций кода равен нулю);
+ обфускации FPU команд (ошибки приводили к неправильному
+ результату); дизассемблировании (вместо CWDE распознавалась
+ команда CWD); эмуляции команд ROL и ROR (если аргумент имел
+ размер в 1 байт)<br />
+ [+] Добавлена поддержка группы команд SSE2<br /></p>
+
+ <h3>Версия 1.06</h3>
+
+ <p>[!] Исправлены ошибки, приводящие к неправильному состоянию A
+ флага после эмуляции команд SUB, CMP, DEC, NEG, CMPXCHG, SCAS и
+ CMPS.<br />
+ [!] Исправлена ошибка, возникающая при работе с "невыровненным"
+ файлом<br />
+ [+] Добавлена поддержка инструкций BSF, BSR и CMPXCHG8b<br />
+ [+] Для многопоточных приложений теперь можно указать процедуру
+ выделения памяти для исполнителя ВМ (процедура выделения памяти
+ должна быть определена как fastcall)<br /></p>
+
+ <h3>Версия 1.05</h3>
+
+ <p>[+] Добавлена поддержка инструкций FUCOMPP и FCMOVxx<br />
+ [+] При просмотре участков кода добавлен показ типов строк
+ (ANSI/Unicode/Pascal) и комментарии для полей структур,
+ создаваемых компиляторами<br />
+ [+] Добавлена процедура метаморфизма исполнителя байт-кода<br />
+ [+] Добавлены новые опции компиляции: "Шифрация байт-кода" и
+ "Удаление настраиваемых элементов (только для EXE файлов)"<br />
+ [-] Убрана опция "Обфускация байт-кода" (обфускация байт-кода
+ теперь всегда включена)<br /></p>
+
+ <h3>Версия 1.04</h3>
+
+ <p>[!] Исправлена ошибка при определении обработчиков SEH для
+ С++<br />
+ [*] Полностью переработан обфускатор байт-кода<br />
+ [+] Добавлена подцветка настраиваемых элементов при просмотре
+ участков кода<br /></p>
+
+ <h3>Версия 1.03</h3>
+
+ <p>[+] Использование "свободного места" из-под оригинальных
+ участков кода для хранения байт-кода<br />
+ [+] Добавлено распознавание "коротких" строк в pascal-формате
+ (первый байт - длина строки)<br /></p>
+
+ <h3>Версия 1.02</h3>
+
+ <p>[!] Исправлены ошибки с выполнением онлайн-команд в
+ DLL/SYS<br />
+ [*] Изменён алгоритм подсчёта контрольной суммы байт-кода<br />
+ [+] Добавлена опция "Контроль целостности исполнителя ВМ" (также
+ работает как противоотладочный приём при отладке исполнителя если
+ отладчик использует в качестве точек остановки INT 03).<br />
+ [+] Использование "старой" таблицы настраиваемых элементов для
+ хранения байт-кода<br /></p>
+
+ <h3>Версия 1.01</h3>
+
+ <p>[!] Исправлена ошибка при создании файлов с настраиваемыми
+ элементами (ошибка возникала при работе DLL/SYS-файлов в
+ операционных системах Windows 95/98/Me)<br />
+ [!] Исправлены мелкие ошибки в дизассемблере<br />
+ [+] Добавлена поддержка инструкций F2XM1, FABS, FCLEX, FCOS,
+ FDECSTP, FINCSTP, FINIT, FLDCW, FLDLN2, FLDLG2, FPREM, FREM1,
+ FPTAN, FRNDINT, FSIN, FSTCW, FTST, FYL2X, FPATAN, FLDZ,
+ FISTP<br />
+ [+] Добавлена поддержка MAP-файлов от Borland C Builder<br />
+ [+] В настройках программы теперь можно выбирать язык интерфейса
+ и сообщений (доступны русский и английский языки)<br /></p>
+
+ <h3>Версия 1.0</h3>
+
+ <p>[!] Исправлены мелкие ошибки, связанные с интерфейсом<br />
+ [+] Добавлена поддержка инструкций CMOV и CMPXCHG<br /></p>
+
+ <h3>Версия 0.97</h3>
+
+ <p>[!] Исправлены мелкие ошибки, связанные с интерфейсом<br />
+ [+] Добавлена поддержка Virtual Pascal<br /></p>
+
+ <h3>Версия 0.96</h3>
+
+ <p>[!] Исправлены ошибки в компиляторе (некорректная работа с C
+ флагом при компиляции инструкций NEG и SBB; более корректная
+ обработка POPF; неправильная проверка CRC байт-кода при обработке
+ внешних условных переходов)<br />
+ [!] Исправлены ошибки в исполнителе ВМ, связанные с обфускацией
+ байт-кода<br />
+ [+] Улучшена обработка MAP-файла, генерируемого C/C++
+ компиляторами (имена процедур содержат информацию об
+ аргументах)<br /></p>
+
+ <h3>Версия 0.94</h3>
+
+ <p>[!] Исправлено множество ошибок<br /></p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/images/activation_setup.png b/help/ru/images/activation_setup.png
new file mode 100644
index 0000000..4ca4618
--- /dev/null
+++ b/help/ru/images/activation_setup.png
Binary files differ
diff --git a/help/ru/images/button_action.png b/help/ru/images/button_action.png
new file mode 100644
index 0000000..8309595
--- /dev/null
+++ b/help/ru/images/button_action.png
Binary files differ
diff --git a/help/ru/images/button_compilation.png b/help/ru/images/button_compilation.png
new file mode 100644
index 0000000..bd2cc6e
--- /dev/null
+++ b/help/ru/images/button_compilation.png
Binary files differ
diff --git a/help/ru/images/button_execute.png b/help/ru/images/button_execute.png
new file mode 100644
index 0000000..82f3c9f
--- /dev/null
+++ b/help/ru/images/button_execute.png
Binary files differ
diff --git a/help/ru/images/button_open.png b/help/ru/images/button_open.png
new file mode 100644
index 0000000..b6b5bcb
--- /dev/null
+++ b/help/ru/images/button_open.png
Binary files differ
diff --git a/help/ru/images/button_project.png b/help/ru/images/button_project.png
new file mode 100644
index 0000000..19a37af
--- /dev/null
+++ b/help/ru/images/button_project.png
Binary files differ
diff --git a/help/ru/images/button_save.png b/help/ru/images/button_save.png
new file mode 100644
index 0000000..5df92e5
--- /dev/null
+++ b/help/ru/images/button_save.png
Binary files differ
diff --git a/help/ru/images/button_search.png b/help/ru/images/button_search.png
new file mode 100644
index 0000000..c660ad6
--- /dev/null
+++ b/help/ru/images/button_search.png
Binary files differ
diff --git a/help/ru/images/codelock_error.png b/help/ru/images/codelock_error.png
new file mode 100644
index 0000000..cc89c01
--- /dev/null
+++ b/help/ru/images/codelock_error.png
Binary files differ
diff --git a/help/ru/images/delphi_map.png b/help/ru/images/delphi_map.png
new file mode 100644
index 0000000..c50db71
--- /dev/null
+++ b/help/ru/images/delphi_map.png
Binary files differ
diff --git a/help/ru/images/delphi_project.png b/help/ru/images/delphi_project.png
new file mode 100644
index 0000000..f208ba5
--- /dev/null
+++ b/help/ru/images/delphi_project.png
Binary files differ
diff --git a/help/ru/images/depends.png b/help/ru/images/depends.png
new file mode 100644
index 0000000..b9dd025
--- /dev/null
+++ b/help/ru/images/depends.png
Binary files differ
diff --git a/help/ru/images/expert_find.png b/help/ru/images/expert_find.png
new file mode 100644
index 0000000..9941871
--- /dev/null
+++ b/help/ru/images/expert_find.png
Binary files differ
diff --git a/help/ru/images/export_keys.png b/help/ru/images/export_keys.png
new file mode 100644
index 0000000..780c5ed
--- /dev/null
+++ b/help/ru/images/export_keys.png
Binary files differ
diff --git a/help/ru/images/functions.png b/help/ru/images/functions.png
new file mode 100644
index 0000000..2d2d234
--- /dev/null
+++ b/help/ru/images/functions.png
Binary files differ
diff --git a/help/ru/images/import_key.png b/help/ru/images/import_key.png
new file mode 100644
index 0000000..8753423
--- /dev/null
+++ b/help/ru/images/import_key.png
Binary files differ
diff --git a/help/ru/images/licenses1.png b/help/ru/images/licenses1.png
new file mode 100644
index 0000000..6b13b78
--- /dev/null
+++ b/help/ru/images/licenses1.png
Binary files differ
diff --git a/help/ru/images/lock_to_serial.png b/help/ru/images/lock_to_serial.png
new file mode 100644
index 0000000..80d1cad
--- /dev/null
+++ b/help/ru/images/lock_to_serial.png
Binary files differ
diff --git a/help/ru/images/main_window.png b/help/ru/images/main_window.png
new file mode 100644
index 0000000..af06caa
--- /dev/null
+++ b/help/ru/images/main_window.png
Binary files differ
diff --git a/help/ru/images/menu_edit.png b/help/ru/images/menu_edit.png
new file mode 100644
index 0000000..93435aa
--- /dev/null
+++ b/help/ru/images/menu_edit.png
Binary files differ
diff --git a/help/ru/images/menu_file.png b/help/ru/images/menu_file.png
new file mode 100644
index 0000000..464b177
--- /dev/null
+++ b/help/ru/images/menu_file.png
Binary files differ
diff --git a/help/ru/images/menu_help.png b/help/ru/images/menu_help.png
new file mode 100644
index 0000000..b15596d
--- /dev/null
+++ b/help/ru/images/menu_help.png
Binary files differ
diff --git a/help/ru/images/menu_project.png b/help/ru/images/menu_project.png
new file mode 100644
index 0000000..5277978
--- /dev/null
+++ b/help/ru/images/menu_project.png
Binary files differ
diff --git a/help/ru/images/menu_project_import.png b/help/ru/images/menu_project_import.png
new file mode 100644
index 0000000..1c3991f
--- /dev/null
+++ b/help/ru/images/menu_project_import.png
Binary files differ
diff --git a/help/ru/images/menu_tools.png b/help/ru/images/menu_tools.png
new file mode 100644
index 0000000..66dd6ba
--- /dev/null
+++ b/help/ru/images/menu_tools.png
Binary files differ
diff --git a/help/ru/images/preferences.png b/help/ru/images/preferences.png
new file mode 100644
index 0000000..e4505de
--- /dev/null
+++ b/help/ru/images/preferences.png
Binary files differ
diff --git a/help/ru/images/project_add_folder.png b/help/ru/images/project_add_folder.png
new file mode 100644
index 0000000..7cb1844
--- /dev/null
+++ b/help/ru/images/project_add_folder.png
Binary files differ
diff --git a/help/ru/images/project_add_function.png b/help/ru/images/project_add_function.png
new file mode 100644
index 0000000..a8ffe5b
--- /dev/null
+++ b/help/ru/images/project_add_function.png
Binary files differ
diff --git a/help/ru/images/project_add_license.png b/help/ru/images/project_add_license.png
new file mode 100644
index 0000000..52a9153
--- /dev/null
+++ b/help/ru/images/project_add_license.png
Binary files differ
diff --git a/help/ru/images/project_file_delete.png b/help/ru/images/project_file_delete.png
new file mode 100644
index 0000000..90dae90
--- /dev/null
+++ b/help/ru/images/project_file_delete.png
Binary files differ
diff --git a/help/ru/images/project_file_menu.png b/help/ru/images/project_file_menu.png
new file mode 100644
index 0000000..de181ae
--- /dev/null
+++ b/help/ru/images/project_file_menu.png
Binary files differ
diff --git a/help/ru/images/project_file_protection.png b/help/ru/images/project_file_protection.png
new file mode 100644
index 0000000..340a2f4
--- /dev/null
+++ b/help/ru/images/project_file_protection.png
Binary files differ
diff --git a/help/ru/images/project_file_settings.png b/help/ru/images/project_file_settings.png
new file mode 100644
index 0000000..df1ef35
--- /dev/null
+++ b/help/ru/images/project_file_settings.png
Binary files differ
diff --git a/help/ru/images/project_functions.png b/help/ru/images/project_functions.png
new file mode 100644
index 0000000..c25b336
--- /dev/null
+++ b/help/ru/images/project_functions.png
Binary files differ
diff --git a/help/ru/images/project_functions_content.png b/help/ru/images/project_functions_content.png
new file mode 100644
index 0000000..799e9d9
--- /dev/null
+++ b/help/ru/images/project_functions_content.png
Binary files differ
diff --git a/help/ru/images/project_functions_content2.png b/help/ru/images/project_functions_content2.png
new file mode 100644
index 0000000..ac06908
--- /dev/null
+++ b/help/ru/images/project_functions_content2.png
Binary files differ
diff --git a/help/ru/images/project_functions_menu.png b/help/ru/images/project_functions_menu.png
new file mode 100644
index 0000000..e5f8217
--- /dev/null
+++ b/help/ru/images/project_functions_menu.png
Binary files differ
diff --git a/help/ru/images/project_functions_menu2.png b/help/ru/images/project_functions_menu2.png
new file mode 100644
index 0000000..55c9d5a
--- /dev/null
+++ b/help/ru/images/project_functions_menu2.png
Binary files differ
diff --git a/help/ru/images/project_functions_menu3.png b/help/ru/images/project_functions_menu3.png
new file mode 100644
index 0000000..ec1a35b
--- /dev/null
+++ b/help/ru/images/project_functions_menu3.png
Binary files differ
diff --git a/help/ru/images/project_functions_search.png b/help/ru/images/project_functions_search.png
new file mode 100644
index 0000000..2d87f3f
--- /dev/null
+++ b/help/ru/images/project_functions_search.png
Binary files differ
diff --git a/help/ru/images/project_generate_keys.png b/help/ru/images/project_generate_keys.png
new file mode 100644
index 0000000..fd7d3cc
--- /dev/null
+++ b/help/ru/images/project_generate_keys.png
Binary files differ
diff --git a/help/ru/images/project_options.png b/help/ru/images/project_options.png
new file mode 100644
index 0000000..8cd9ba5
--- /dev/null
+++ b/help/ru/images/project_options.png
Binary files differ
diff --git a/help/ru/images/project_script.png b/help/ru/images/project_script.png
new file mode 100644
index 0000000..4f875b2
--- /dev/null
+++ b/help/ru/images/project_script.png
Binary files differ
diff --git a/help/ru/images/properties_calc.png b/help/ru/images/properties_calc.png
new file mode 100644
index 0000000..dba30ea
--- /dev/null
+++ b/help/ru/images/properties_calc.png
Binary files differ
diff --git a/help/ru/images/properties_directory.png b/help/ru/images/properties_directory.png
new file mode 100644
index 0000000..3dbcbf2
--- /dev/null
+++ b/help/ru/images/properties_directory.png
Binary files differ
diff --git a/help/ru/images/properties_dump.png b/help/ru/images/properties_dump.png
new file mode 100644
index 0000000..0344e9c
--- /dev/null
+++ b/help/ru/images/properties_dump.png
Binary files differ
diff --git a/help/ru/images/properties_dump_goto.png b/help/ru/images/properties_dump_goto.png
new file mode 100644
index 0000000..febef55
--- /dev/null
+++ b/help/ru/images/properties_dump_goto.png
Binary files differ
diff --git a/help/ru/images/properties_export.png b/help/ru/images/properties_export.png
new file mode 100644
index 0000000..feb4b92
--- /dev/null
+++ b/help/ru/images/properties_export.png
Binary files differ
diff --git a/help/ru/images/properties_import.png b/help/ru/images/properties_import.png
new file mode 100644
index 0000000..aca775c
--- /dev/null
+++ b/help/ru/images/properties_import.png
Binary files differ
diff --git a/help/ru/images/properties_resources.png b/help/ru/images/properties_resources.png
new file mode 100644
index 0000000..a8fa472
--- /dev/null
+++ b/help/ru/images/properties_resources.png
Binary files differ
diff --git a/help/ru/images/properties_segments.png b/help/ru/images/properties_segments.png
new file mode 100644
index 0000000..e705ded
--- /dev/null
+++ b/help/ru/images/properties_segments.png
Binary files differ
diff --git a/help/ru/images/visual_studio_map.png b/help/ru/images/visual_studio_map.png
new file mode 100644
index 0000000..b04bd53
--- /dev/null
+++ b/help/ru/images/visual_studio_map.png
Binary files differ
diff --git a/help/ru/images/watermarks_add.png b/help/ru/images/watermarks_add.png
new file mode 100644
index 0000000..7211f06
--- /dev/null
+++ b/help/ru/images/watermarks_add.png
Binary files differ
diff --git a/help/ru/images/watermarks_menu.png b/help/ru/images/watermarks_menu.png
new file mode 100644
index 0000000..5c20745
--- /dev/null
+++ b/help/ru/images/watermarks_menu.png
Binary files differ
diff --git a/help/ru/images/watermarks_search.png b/help/ru/images/watermarks_search.png
new file mode 100644
index 0000000..2e48de3
--- /dev/null
+++ b/help/ru/images/watermarks_search.png
Binary files differ
diff --git a/help/ru/images/watermarks_setup.png b/help/ru/images/watermarks_setup.png
new file mode 100644
index 0000000..9f04d8e
--- /dev/null
+++ b/help/ru/images/watermarks_setup.png
Binary files differ
diff --git a/help/ru/images/weblm_1.png b/help/ru/images/weblm_1.png
new file mode 100644
index 0000000..26bdaee
--- /dev/null
+++ b/help/ru/images/weblm_1.png
Binary files differ
diff --git a/help/ru/images/weblm_2.png b/help/ru/images/weblm_2.png
new file mode 100644
index 0000000..6791edc
--- /dev/null
+++ b/help/ru/images/weblm_2.png
Binary files differ
diff --git a/help/ru/info.htm b/help/ru/info.htm
new file mode 100644
index 0000000..6219ddb
--- /dev/null
+++ b/help/ru/info.htm
@@ -0,0 +1,38 @@
+<!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>Раздел "Свойства"</title>
+</head>
+
+<body>
+ <h1>Раздел "Свойства"</h1>
+ <p>Раздел "Свойства" отображает различную информацию о защищаемом приложении, а также позволяет исключить из упаковки те или иные сегменты данных и ресурсов.
+ Изменения, произведенные в этой секции, сохраняются в файл проекта.</p>
+ <p><img src="images/properties_directory.png" /></p>
+ <p>Раздел "Свойства" содержит следующие секции:</p>
+ <ul>
+ <li><a href="info_directories.htm">Директории</a></li>
+ <li><a href="info_segments.htm">Сегменты</a></li>
+ <li><a href="info_imports.htm">Импорты</a></li>
+ <li><a href="info_exports.htm">Экспорты</a></li>
+ <li><a href="info_resources.htm">Ресурсы</a></li>
+ <li><a href="info_calc.htm">Калькулятор</a></li>
+ <li><a href="info_dump.htm">Дамп</a></li>
+ </ul>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/info_calc.htm b/help/ru/info_calc.htm
new file mode 100644
index 0000000..66a835e
--- /dev/null
+++ b/help/ru/info_calc.htm
@@ -0,0 +1,31 @@
+<!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>Секция "Калькулятор"</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Секция "Калькулятор"</h1>
+
+ <p>Позволяет определить файловое смещение по виртуальному адресу и наоборот:</p>
+ <p><img src="images/properties_calc.png" /></p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/info_directories.htm b/help/ru/info_directories.htm
new file mode 100644
index 0000000..79d1401
--- /dev/null
+++ b/help/ru/info_directories.htm
@@ -0,0 +1,30 @@
+<!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>Секция "Директории"</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Секция "Директории"</h1>
+
+ <p>Отображает информацию о директориях файла:</p>
+ <p><img src="images/properties_directory.png" /></p>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/info_dump.htm b/help/ru/info_dump.htm
new file mode 100644
index 0000000..2fe28e8
--- /dev/null
+++ b/help/ru/info_dump.htm
@@ -0,0 +1,35 @@
+<!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>Секция "Дамп"</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Секция "Дамп"</h1>
+
+ <p>Отображает дамп памяти защищаемого приложения в виде машинных кодов и ассемблерных команд:</p>
+ <p><img src="images/properties_dump.png" /></p>
+
+ <p>Кнопка "Перейти на адрес" на панели инструментов позволяет перейти на заданный адрес защищаемого приложения:</p>
+ <p><img src="images/properties_dump_goto.png" /></p>
+ <p>Для быстрого перехода к нужной функции начните вводить ее имя в строке быстрого поиска. Также можно ввести точный адрес.</p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/info_exports.htm b/help/ru/info_exports.htm
new file mode 100644
index 0000000..d081124
--- /dev/null
+++ b/help/ru/info_exports.htm
@@ -0,0 +1,28 @@
+<!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>Секция "Экспорты"</title>
+</head>
+
+<body>
+ <h1>Секция "Экспорты"</h1>
+
+ <p>Отображает информацию об экспортах файла:</p>
+ <p><img src="images/properties_export.png" /></p>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/info_imports.htm b/help/ru/info_imports.htm
new file mode 100644
index 0000000..2cea11d
--- /dev/null
+++ b/help/ru/info_imports.htm
@@ -0,0 +1,28 @@
+<!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>Секция "Импорты"</title>
+</head>
+
+<body>
+ <h1>Секция "Импорты"</h1>
+
+ <p>Отображает информацию об импортируемых функциях и библиотеках:</p>
+ <p><img src="images/properties_import.png" /></p>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/info_resources.htm b/help/ru/info_resources.htm
new file mode 100644
index 0000000..503460a
--- /dev/null
+++ b/help/ru/info_resources.htm
@@ -0,0 +1,31 @@
+<!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>Секция "Ресурсы"</title>
+</head>
+
+<body>
+ <h1>Секция "Ресурсы"</h1>
+
+ <p>Отображает информацию о ресурсах:</p>
+ <p><img src="images/properties_resources.png" /></p>
+ <ul>
+ <li><strong> Исключить из упаковки</strong> - Ресурс можно исключить из <a href="project_options.htm#PackOutputFile">упаковки</a>.</li>
+ </ul>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/info_segments.htm b/help/ru/info_segments.htm
new file mode 100644
index 0000000..e2a4494
--- /dev/null
+++ b/help/ru/info_segments.htm
@@ -0,0 +1,32 @@
+<!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>Раздел "Свойства"</title>
+</head>
+
+<body>
+ <h1>Секция "Сегменты"</h1>
+
+ <p>Отображает информацию о сегментах:<p></p>
+ <p><img src="images/properties_segments.png" /></p>
+ <ul>
+ <li><strong>Исключить из защиты памяти</strong> - Сегмент можно исключить из <a href="project_options.htm#MemoryProtection">защиты памяти</a>.</li>
+ <li><strong> Исключить из упаковки</strong> - Сегмент можно исключить из <a href="project_options.htm#PackOutputFile">упаковки</a>.</li>
+ </ul>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/help/ru/main_menu.htm b/help/ru/main_menu.htm
new file mode 100644
index 0000000..36b181d
--- /dev/null
+++ b/help/ru/main_menu.htm
@@ -0,0 +1,41 @@
+<!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>Главное меню</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ div.c2 {text-align: center}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Главное меню</h1>
+
+ <p>Главное меню состоит из следующих пунктов:</p>
+
+ <ul>
+ <li><a href="menu_file.htm">Файл</a></li>
+ <li><a href="menu_edit.htm">Правка</a></li>
+ <li><a href="menu_project.htm">Проект</a></li>
+ <li><a href="menu_tools.htm">Инструменты</a></li>
+ <li><a href="menu_help.htm">Справка</a></li>
+ </ul>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/main_window.htm b/help/ru/main_window.htm
new file mode 100644
index 0000000..76f2e15
--- /dev/null
+++ b/help/ru/main_window.htm
@@ -0,0 +1,42 @@
+<!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>Главное окно</title>
+</head>
+
+<body>
+ <h1>Главное окно</h1>
+
+ <p>Главное окно состоит из следующих элементов:</p>
+
+ <ul>
+ <li><a href="main_menu.htm">Главное меню</a></li>
+ <li><a href="toolbar.htm">Панель инструментов</a></li>
+ <li>Панель управления, состоящая из трех разделов:
+ <ul>
+ <li><a href="project.htm">Раздел "Проект"</a></li>
+ <li><a href="functions.htm">Раздел "Функции"</a></li>
+ <li><a href="info.htm">Раздел "Свойства"</a></li>
+ </ul>
+ </li>
+ <li>Лог компиляции</li>
+ </ul>
+ <p><img src="images/main_window.png" /></p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/activation.htm b/help/ru/manager/activation.htm
new file mode 100644
index 0000000..302a559
--- /dev/null
+++ b/help/ru/manager/activation.htm
@@ -0,0 +1,89 @@
+<!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>Система Активации</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Система Активации</h1>
+
+ <h3>Что Это?</h3>
+
+ <p>Активация - это двухэтапный процесс регистрации приложения. На
+ первом этапе (обычно после покупки) покупатель получает код
+ активации (выглядит как XXXX-YYYY-ZZZZ). На втором этапе
+ покупатель вводит этот код в приложение, приложение соединяется
+ через Интернет с сервером производителя ПО, сервер проверяет код
+ активации и выдает приложению серийный номер, связанный с этим
+ кодом активации и обычно привязанный к оборудованию
+ пользователя.</p>
+
+ <p>Такой подход позволяет контролировать использование лицензий
+ покупателями, предотвращать утечки лицензий, а также многое
+ другое, например демо-лицензии или надежные триальные
+ периоды.</p>
+
+ <h3>Зачем Она Мне Нужна?</h3>
+
+ <p>Система активации дает производителю ПО достаточно широкие
+ возможности, например:</p>
+
+ <ul>
+ <li><strong>Короткие серийные номера</strong> - длинные
+ серийные номера хороши всем, кроме длины. Пользователи могут
+ ошибиться при вводе, почтовые программы иногда портят некоторые
+ символы, однако только длинные серийные номера позволяют хранить
+ достаточный объем дополнительной информации. Коды активации
+ позволяют решить все проблемы длинных серийных номеров, не
+ влияя на их положительные стороны.</li>
+
+ <li><strong>Контроль количества инсталляций</strong> - все
+ активации доступны производителю онлайн в реальном времени. Их
+ можно отслеживать, анализировать, блокировать, оказывать
+ поддержку пользователям и т.д.</li>
+
+ <li><strong>Триалы</strong> - можно создавать серийные номера,
+ ограниченные по времени, используя "режимы" продуктов -
+ "modes".</li>
+
+ <li><strong>Подписки</strong> - подписки похожи на триалы,
+ однако стоят денег. Вы можете продавать пользователю право
+ работать с программой в течение определенного времени, как это
+ делают производители антивирусов - просто продавайте коды
+ активации на очередной год обслуживания.</li>
+ </ul>
+
+ <p>Более подробная информация о системе активации доступна в
+ соответствующем <a href=
+ "http://vmpsoft.com/products/web-license-manager/" target=
+ "_blank">разделе</a> нашего сайта.</p>
+
+ <h3>Что Потребуется Сделать?</h3>
+
+ <p>VMProtect Ultimate дополнен несколькими <a href=
+ "activation/api.htm">функциями</a>, которые позволяют
+ сравнительно легко реализовать как онлайн, так и оффлайн
+ активацию. Вам также потребуется установленный на сервере
+ <a href="activation/weblm.htm">Web License Manager</a>. Наконец,
+ потребуется <a href="activation/vmprotect.htm">настроить</a>
+ проект защиты в VMProtect, чтобы модуль активации знал адрес
+ сервера WebLM.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/activation/api.htm b/help/ru/manager/activation/api.htm
new file mode 100644
index 0000000..8a22254
--- /dev/null
+++ b/help/ru/manager/activation/api.htm
@@ -0,0 +1,223 @@
+<!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>API Активации</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ th {text-align:left;}
+ table {border-collapse:collapse; margin-top: 4px;}
+ td,th {border: 1px solid #B0B0B0; padding-left:10;padding-right:10;}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>API Активации</h1>
+
+ <p>API Активации содержит всего 4 функции. Две предназначены для
+ онлайн-активации и две для оффлайн, когда на компьютере
+ отсутствует доступ в Интернет. API Активации предназначено для
+ взаимодействия с Web License Manager, так что разработчику все
+ равно необходимо вызывать API системы лицензирования, чтобы
+ использовать серийные номера, полученные от WebLM.</p><strong id=
+ "VMProtectActivateLicense">VMProtectActivateLicense</strong>
+
+ <p>Функция передает код активации на сервер и возвращает серийный
+ номер, подходящий для этого конкретного компьютера. В противном
+ случае возвращается <a href="#codes">код ошибки</a>.</p>
+ <pre class="code">int VMProtectActivateLicense(const char *code, char *serial, int size);
+</pre>
+
+ <p>Параметр <strong>code</strong> содержит код активации, который
+ получен от Web License Manager в процессе покупки лицензии.
+ Параметр <strong>serial</strong> указывает на блок памяти размера
+ <strong>size</strong>, в который будет помещен сгенерированный
+ WebLM серийный номер.</p><strong id=
+ "VMProtectDeactivateLicense">VMProtectDeactivateLicense</strong>
+
+ <p>Функция передает серийный номер на сервер для деактивации.
+ Возможные коды возврата перечислены <a href=
+ "#codes">ниже</a>.</p>
+ <pre class="code">int VMProtectDeactivateLicense(const char *serial);
+</pre>
+
+ <p>Параметр <strong>serial</strong> содержит серийный номер (не
+ код активации), полученный ранее от WebLM в процессе
+ активации.</p><strong id=
+ "VMProtectGetOfflineActivationString">VMProtectGetOfflineActivationString</strong><br />
+
+ <strong id=
+ "VMProtectGetOfflineDeactivationString">VMProtectGetOfflineDeactivationString</strong>
+
+ <p>Эти две функции работают практически аналогично двум
+ предыдущим с той лишь разницей, что они не пытаются подключиться
+ к серверу WebLM. Вместо этого они возвращают блок текста, который
+ необходимо скопировать на компьютер где есть доступ в Интернет,
+ открыть там форму оффлайн-активации WebLM и вставить туда этот
+ текст.</p>
+ <pre class="code">int VMProtectGetOfflineActivationString(const char *code, char *buf, int size);
+int VMProtectGetOfflineDeactivationString(const char *serial, char *buf, int size);
+</pre>
+
+ <p>Параметры <strong>code</strong> и <strong>serial</strong>
+ аналогичны параметрам онлайн-версий функций, параметр
+ <strong>buf</strong> должен указывать на буфер размером 1000 байт
+ или больше, туда будет скопирован текстовый блок для формы
+ оффлайн-активации. Возможные коды ошибок перечислены <a href=
+ "#codes">ниже</a>.</p>
+
+ <h3 id="codes">Возможные Коды Ошибок</h3>
+
+ <table border="1" cellspacing="0" cellpadding="2">
+ <tr>
+ <th>Код</th>
+
+ <th>Значение</th>
+
+ <th>Описание</th>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_OK</td>
+
+ <td>0</td>
+
+ <td>Активация прошла успешно, переменная
+ <strong>serial</strong> содержит серийный номер.</td>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_SMALL_BUFFER</td>
+
+ <td>1</td>
+
+ <td>Буфер для серийного номера слишком маленький. Минимальный
+ размер буфера вычисляется по формуле: bits / 8 * 3 / 2 + N,
+ где bits - длина RSA ключа в битах, а N - "константа
+ безопасности" - дополнительное количество байт на случай
+ переносов строк и прочих спец-символов. Рекомендуется
+ использовать как минимум 10.</td>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_NO_CONNECTION</td>
+
+ <td>2</td>
+
+ <td>Модуль активации не смог подключиться к Web License
+ Manager.</td>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_BAD_REPLY</td>
+
+ <td>3</td>
+
+ <td>Сервер активации вернул неожиданный результат. Это
+ означает проблемы конфигурации сервера, неправильный url
+ сервера активации или попытку взлома.</td>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_BANNED</td>
+
+ <td>4</td>
+
+ <td>Этот код активации заблокирован на сервере производителем
+ ПО через интерфейс WebLM (например, из-за
+ утечки кода активации с пиратской копией). Не путать с ACTIVATION_ALREADY_USED.</td>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_CORRUPTED</td>
+
+ <td>5</td>
+
+ <td>Что-то пошло совсем не так. Ошибка выдается системой
+ самопроверки модуля активации и с высокой вероятностью
+ означает попытку взлома. В случае получения этой ошибки
+ дальнейшие операции с серийными номерами и активацией не
+ могут считаться безопасными.</td>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_BAD_CODE</td>
+
+ <td>6</td>
+
+ <td>Данный код не найден в базе данных сервера активаций.
+ Возможно пользователь ошибся при вводе кода, так что можно
+ попросить его проверить правильность ввода данных.</td>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_ALREADY_USED</td>
+
+ <td>7</td>
+
+ <td>Счетчик активаций этого кода дошел до нуля и дальнейшие
+ активации невозможны. Это не обозначает, что код плохой или
+ заблокирован - код хороший. Пользователю нужно связаться с
+ производителем ПО и докупить необходимое количество лицензий
+ или же деинсталлировать программу на других компьютерах,
+ чтобы увеличить значение счетчика в базе данных.</td>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_SERIAL_UNKNOWN</td>
+
+ <td>8</td>
+
+ <td>Ошибка деактивации. Означает, что данный серийный
+ номер не найден в базе данных сервера. Соответственно,
+ деактивация не может быть проведена успешно.</td>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_EXPIRED</td>
+
+ <td>9</td>
+
+ <td>Ошибка активации. Означает, что период действия кода активации истек.</td>
+ </tr>
+
+ <tr>
+ <td>ACTIVATION_NOT_AVAILABLE</td>
+
+ <td>10</td>
+
+ <td>Ошибка означает, что активация/деактивация недоступна.</td>
+ </tr>
+
+ </table>
+
+ <h3>Маленькие хитрости</h3>
+
+ <p>API Активации достаточно простое, так что с ним не должно
+ возникнуть сложностей. Не забудьте предоставить пользователям
+ интерфейс для оффлайн-активации, если онлайн-активация
+ завершилась неудачей из-за проблем с доступом в интернет. Также
+ не забывайте, что API Активации не сохраняет полученный серийный
+ номер и не передает его модулю лицензирования - это задача
+ разработчика. Нет необходимости вызывать API Активации при каждом
+ запуске приложения - достаточно вызвать его один раз, получить
+ серийный номер от WebLM, сохранить его в удобном месте и в
+ дальнейшем использовать только его.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/activation/vmprotect.htm b/help/ru/manager/activation/vmprotect.htm
new file mode 100644
index 0000000..f0a3440
--- /dev/null
+++ b/help/ru/manager/activation/vmprotect.htm
@@ -0,0 +1,38 @@
+<!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>Настройка Активации в VMProtect</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Настройка Активации в VMProtect</h1>
+
+ <p>Для работы <a href="api.htm">API Активации</a> требуется адрес
+ сервера WebLM, так что необходимо задать его в настройках проекта
+ VMProtect. Чтобы сделать это, запустите VMProtect и перейдите в
+ раздел настроек:</p><br /><img src="../../images/activation_setup.png" alt="Настройка сервера активации" />
+
+ <p>Введите адрес в поле "Сервер активации". Адрес должен
+ выглядеть так: http://<em>yourserver</em>/<em>weblm
+ path</em>/activate.php. Это первое место, которое следует проверить, если в дальнейшем Вы столкнетесь
+ с ошибками в процессе онлайн-активации.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/activation/weblm.htm b/help/ru/manager/activation/weblm.htm
new file mode 100644
index 0000000..35cf308
--- /dev/null
+++ b/help/ru/manager/activation/weblm.htm
@@ -0,0 +1,55 @@
+<!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>Поддержка Активации в Web License Manager</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Поддержка Активации в Web License Manager</h1>
+
+ <p>Подробно Web License Manager описан <a href=
+ "http://vmpsoft.com/products/web-license-manager/" target=
+ "_blank">на сайте</a>, здесь даны минимальные инструкции по
+ созданию кода активации для последующего использования с API
+ Активации.</p>
+
+ <p>Для начала войдите в Web License Manager (можно использовать
+ демо-версию на нашем сайте) и создайте продукт. Затем
+ экспортируйте продукт как проект VMProtect, чтобы иметь
+ возможность использовать его для настроек лицензирования и
+ активации. После того как проект настроен, необходимые проверки
+ добавлены в код и исполняемый файл защищен, нажмите ссылку "Add
+ New Code" в левой панели WebLM:</p>
+ <p><img src="../../images/weblm_1.png" /></p>
+
+ <p>Выберите нужный продукт в верхнем выпадающем списке и
+ заполните остальные поля формы данными, которые Вы хотите
+ поместить в серийный номер. Затем нажмите кнопку "Save". Вы
+ увидите код активации, который можно использовать для отладки API
+ Активации.</p>
+ <p><img src="../../images/weblm_2.png" /></p>
+
+ <p>Множество других возможностей Web License Manager (таких, как интеграция с регистраторами или
+ автоматическая генерация кодов активации) можно подробно изучить в <a href=
+ "http://vmpsoft.com/products/web-license-manager/" target=
+ "_blank">онлайн-версии руководства пользователя</a>.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/features.htm b/help/ru/manager/features.htm
new file mode 100644
index 0000000..c717767
--- /dev/null
+++ b/help/ru/manager/features.htm
@@ -0,0 +1,138 @@
+<!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>Возможности системы лицензирования VMProtect</title>
+</head>
+
+<body>
+ <h1>Возможности системы лицензирования VMProtect</h1>
+
+ <h3>Надежные серийные номера</h3>
+
+ <p>Система лицензирования использует асимметричные алгоритмы для
+ шифрования серийных номеров. Номер шифруется приватным ключом,
+ который хранится только у разработчика продукта. Защищаемый
+ продукт расшифровывает номер публичным ключом и проверяет его. В
+ силу длины используемых ключей (от 1024 бит для RSA) практически
+ невозможно подобрать закрытый ключ и создать генератор ключей для
+ продукта.</p>
+
+ <h3 id="lock">Привязка кода к серийному номеру</h3>
+
+ <p>VMProtect позволяет исполнять часть кода программы на
+ виртуальной машине. Набор команд виртуальной машины меняется при
+ каждой сборке защищаемой программы. Система лицензирования
+ позволяет зашифровать часть команд виртуальной машины ключом,
+ который хранится в серийном номере. Таким образом, даже если
+ хакер исправит условный переход в программе, код все равно не
+ будет работать без корректного серийного номера. А так как
+ расшифровка кода также происходит под управлением виртуальной
+ машины, то даже наличие серийного номера не дает возможности
+ легко проанализировать алгоритм
+ расшифровки.</p>
+
+ <h3>Ограничение периода бесплатных обновлений</h3>
+
+ <p>Система лицензирования позволяет записать в ключ такую дату,
+ что версии приложения, собранные после этой даты, не будут
+ работать с этим ключом. Это позволяет ограничивать период
+ бесплатных обновлений продукта. Например при продаже в ключ
+ записывается текущая дата плюс один год и пользователь может
+ скачивать с сайта новые версии в течение года. Ключ будет
+ работать в этих версиях. По истечение года у пользователя будет
+ выбор: пользоваться последней "рабочей" версией программы или
+ купить обновление еще на один год.</p>
+
+ <h3>Срок годности ключа</h3>
+
+ <p>Система лицензирования позволяет записать в ключ дату, после
+ которой ключ перестает работать. Это удобно для продажи
+ продуктов, требующих периодического обновления. Например при
+ продаже в серийный номер помещается текущая дата плюс год и
+ программа будет работать у пользователя в течение года. В отличие
+ от ограничения периода бесплатных обновлений, в этом случае у
+ пользователя нет выбора - ему придется купить новую лицензию,
+ если он хочет продолжать пользоваться
+ программой.</p>
+
+ <h3>Ограничение времени работы программы</h3>
+
+ <p>Система лицензирования позволяет ограничить время работы
+ экземпляра программы. Это бывает полезно для демонстрационных
+ задач. Например покупатель хочет получить для тестирования
+ полноценную копию программы. В этом случае можно передать ему
+ серийный номер, который ограничит время работы программы, скажем,
+ десятью минутами. По истечение этого времени программа прекратит
+ свою работу. Такая схема подходит для демонстрационных версий
+ различных серверных приложений, где простой перезапуск приложения
+ будет неудобен.</p>
+
+ <h3>Привязка к оборудованию</h3>
+
+ <p>Система лицензирования позволяет получить идентификатор
+ оборудования пользователя на основе процессора, сетевых плат и
+ информации операционной системы. Серийный номер может быть создан
+ так, что он будет работать только на оборудовании с этим
+ идентификатором. Это позволяет ограничить использование одной
+ лицензии на нескольких компьютерах.</p>
+
+ <h3>Черный список</h3>
+
+ <p>В случае дискредитации серийного номера, система
+ лицензирования позволяет занести такой номер в черный список,
+ после чего номер не будет работать в следующих версиях
+ приложения.</p>
+
+ <h3>Хранение данных</h3>
+
+ <p>Система лицензирования позволяет хранить в серийном номере и
+ выдавать защищаемой программе следующие данные: имя пользователя,
+ e-mail, а также до 255 байт произвольных данных (т.н. "данные
+ пользователя"). Это может быть использовано для показа в диалоге
+ "О Программе", для реализации дополнительных проверок серийного
+ номера, для хранения констант, доступных только в
+ зарегистрированной версии продукта и т.п.</p>
+
+ <h3>Ограниченние работы демо-версии по времени</h3>
+
+ <p>Используя систему <a href="activation.htm">активации</a>
+ производитель ПО может автоматически создавать ограниченные по времени и привязанные к оборудованию
+ пользователя серийные номера. Это позволяет организовать надежно защищенный
+ демо-период для приложения, так как VMProtect не прячет триальные
+ метки на компьютере пользователя, а вместо этого генерирует
+ полноценный, но ограниченный по времени серийный номер. Активация
+ обычно производится непосредственно через интернет, но в API активации предусмотрен
+ и оффлайновый режим.</p><br />
+ <hr noshade="noshade" size="1" />
+
+ <h1>Чего система лицензирования не умеет и
+ почему?</h1>
+
+ <h3>100%-но надежная привязка к оборудованию</h3>
+
+ <p>Несмотря на то, что система лицензирования позволяет
+ привязаться к идентификатору оборудования, следует понимать, что
+ большинство данных об оборудовании получается средствами
+ операционной системы, которые могут быть перехвачены хакером с
+ целью изменения данных. Система лицензирования применяет ряд
+ схем, позволяющих минимизировать такие риски, однако если вам
+ требуется 100%-но надежная привязка к оборудованию, мы
+ рекомендуем воспользоваться решением на базе USB-ключей, с
+ которыми также может работать VMProtect.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/howitworks.htm b/help/ru/manager/howitworks.htm
new file mode 100644
index 0000000..0ebb8c6
--- /dev/null
+++ b/help/ru/manager/howitworks.htm
@@ -0,0 +1,61 @@
+<!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>Как работает система лицензирования?</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Как работает система лицензирования?</h1>
+
+ <h3>Защита приложения</h3>
+
+ <p>VMProtect в процессе защиты приложения интегрирует в него код
+ проверки серийных номеров. При этом используется информация,
+ указанная в секции "Лицензии" раздела "Проект". В приложение помещается
+ публичный ключ продукта, при помощи которого будет осуществляться
+ расшифровка серийных номеров. Также в приложение помещается дата
+ защиты и ряд дополнительных данных, необходимых для работы
+ системы лицензирования.</p>
+
+ <h3>Создание серийных номеров</h3>
+
+ <p>Серийные номера могут быть созданы в секции <a href=
+ "licenses.htm">"Лицензии"</a> раздела "Проект" или при помощи отдельных приложений
+ - <a href="keygen/index.htm">генераторов ключей</a>. Серийный
+ номер - это набор данных о покупателе, зашифрованный асимметричным
+ алгоритмом. Серийный номер передается покупателю, тот вводит его
+ в программу, после чего он проверяется модулем
+ лицензирования.</p>
+
+ <h3>Проверка серийного номера в программе</h3>
+
+ <p>Модуль лицензирования предоставляет защищаемой программе
+ <a href="usage/api.htm">несколько функций</a> для работы с
+ серийными номерами. Программа передает модулю лицензирования
+ серийный номер и запрашивает информацию о нем. Модуль
+ лицензирования выдает краткое состояние серийного номера
+ (рабочий/нерабочий и почему), а также может выдать подробную
+ информацию о серийном номере, такую как имя пользователя, e-mail,
+ срок действия номера и т.д. Защищаемая программа анализирует
+ информацию о серийном номере и принимает решение о продолжении
+ или завершении работы, а также об ограничениях
+ функционала.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/index.htm b/help/ru/manager/index.htm
new file mode 100644
index 0000000..3cccf75
--- /dev/null
+++ b/help/ru/manager/index.htm
@@ -0,0 +1,43 @@
+<!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>Система лицензирования</title>
+</head>
+
+<body>
+ <h1>Система лицензирования</h1>
+
+ <p>Система лицензирования решает задачи создания и проверки
+ серийных номеров. Поддерживаются ограничения работы защищаемого
+ ПО по дате и времени, привязка к оборудованию, шифрование кода
+ серийным номером, ограничение периода бесплатных обновлений и
+ многое другое. Система построена на асимметричных алгоритмах
+ шифрования, что минимизирует вероятность создания генераторов
+ серийных номеров. Для защиты системы лицензирования применяется
+ виртуализация VMProtect, что минимизирует вероятность взлома на
+ уровне кода и создания патчей.</p>
+
+ <ul>
+ <li><a href="features.htm">Возможности системы лицензирования</a></li>
+ <li><a href="howitworks.htm">Схема работы системы лицензирования</a></li>
+ <li><a href="licenses.htm">Управление лицензиями: создание, изменение, блокировка и т.п.</a></li>
+ <li><a href="usage/index.htm">Пример интеграции в приложение</a></li>
+ <li><a href="keygen/index.htm">Автоматическое создание серийных номеров</a></li>
+ </ul>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/keygen/algorithms.htm b/help/ru/manager/keygen/algorithms.htm
new file mode 100644
index 0000000..05b9bc3
--- /dev/null
+++ b/help/ru/manager/keygen/algorithms.htm
@@ -0,0 +1,79 @@
+<!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>Алгоритмы шифрования серийных номеров</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Алгоритмы шифрования серийных номеров</h1>
+
+ <p>Надежность ключей системы лицензирования основывается на
+ применении асимметричных алгоритмов шифрования. В текущей версии
+ реализован алгоритм RSA с длиной ключа от 1024 до 16384 бит. В
+ будущих версиях планируется добавление других алгоритмов,
+ основанных на ECC, а также схем, совмещающих симметричные и
+ асимметричные шифры.</p>
+
+ <p>Используемый алгоритм уникален для каждого продукта. Ключи,
+ созданные с одним алгоритмом, не подойдут к другому, поэтому
+ смена алгоритмов после создания хоть одной лицензии не
+ допускается. Модуль защиты, располагающийся в защищаемой
+ программе, "знает" каким алгоритмом должен быть зашифрован
+ серийный номер и не примет ключ, созданный другим алгоритмом или
+ тем же алгоритмом, но с другими параметрами (скажем, с другой
+ длиной ключа).</p>
+
+ <h3>Алгоритм RSA</h3>
+
+ <p>Шифрование серийного номера алгоритмом RSA происходит по
+ следующей схеме:</p>
+
+ <ul>
+ <li><strong>Добавление случайных данных в начало
+ номера</strong> - метод основывается на RFC2313, однако
+ реализация немного отличается от описаной там. В начало
+ серийного номера добавляютя байты: 00 02 NN...NN 00, где NN..NN
+ - от 8 до 16 случайных ненулевых байт. Количество байт
+ выбирается случайным, однако принимается во внимание длина
+ серийного номера и максимальная вместительность ключа.</li>
+
+ <li><strong>Добавление случайных данных в конец номера</strong>
+ - окончательное количество байт в серийном номере должно
+ равняться количеству бит в ключах алгоритма, деленному на 8.
+ Серийный номер дополняется до этого числа байт случайными
+ данными. В результате получается следующий формат серийного
+ номера: 00 02 NN..NN 00 DD..DD MM..MM, где NN - набор случайных
+ ненулевых байтов, DD - исходный серийный номер, MM -набор
+ случайных байтов (в т.ч. и нулевых). Суммарная длина
+ последовательности должна равняться количеству бит,
+ применяемому в алгоритме, деленному на 8.</li>
+
+ <li><strong>Шифрование</strong> - производится по стандатной
+ схеме, реализованной во многих библиотеках, работающих с
+ большими числами. Генератор на PHP содержит всю необходимую
+ информацию в открытом виде.</li>
+
+ <li><strong>Упаковка</strong> - полученный после шифрования
+ набор байт кодируется в base-64 - это и есть серийный номер,
+ который отправляется покупателю.</li>
+ </ul><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/keygen/index.htm b/help/ru/manager/keygen/index.htm
new file mode 100644
index 0000000..2650150
--- /dev/null
+++ b/help/ru/manager/keygen/index.htm
@@ -0,0 +1,121 @@
+<!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>Генераторы ключей</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Генераторы ключей</h1><strong>Зачем они нужны?</strong>
+
+ <p>Помимо VMProtect, серийные номера могут генерироваться другими
+ программами - генераторами. Это нужно для автоматизации выдачи
+ номеров без участия человека. Покупатель покупает продукт,
+ регистратор делает HTTP-запрос на сайт производителя, там
+ запускается программа-генератор и на основе данных о покупателе
+ формирует серийный номер. Номер отправляется покупателю и
+ производителю. Производитель вносит его в базу VMProtect вручную,
+ через окно импорта лицензий.</p><strong>Принцип работы</strong>
+
+ <p>Система лицензирования VMProtect построена на асимметричных
+ алгоритмах, поэтому для генерации серийных номеров требуется
+ секретный ключ продукта. Этот ключ можно экспортировать в окне
+ свойств продукта и передать программе-генератору подходящим для
+ нее способом.</p>
+
+ <p>Программа-генератор вызывается регистратором через
+ HTTP-запрос. Генератор на PHP может быть вызван напрямую,
+ генератор в виде DLL - косвенно, но алгоритм остается одним и тем
+ же:</p>
+
+ <ul>
+ <li>Получить данные о пользователе от регистратора</li>
+
+ <li>Добавить необходимую информацию, которую указал
+ производитель</li>
+
+ <li>Сформировать серийный номер</li>
+
+ <li>Зашифровать его одним из алгоритмов</li>
+
+ <li>Передать результат регистратору</li>
+ </ul><strong>Существуют ли готовые генераторы?</strong>
+
+ <p>С системой лицензирования поставляется три готовых генератора
+ серийных номеров <a href="keygen_dll.htm">в виде DLL</a>,
+ <a href="keygen_net.htm">для платформы .Net</a> и <a href=
+ "keygen_php.htm">реализованный на PHP</a>.</p><strong>Можно ли
+ сделать свой генератор?</strong>
+
+ <p>Можно. Формат серийного номера находится <a href=
+ "serial_format.htm">здесь</a>, алгоритмы шифрования серийного
+ номера описаны <a href=
+ "algorithms.htm">здесь</a>.</p><strong>Насколько это
+ безопасно?</strong>
+
+ <p>В общем случае - вполне безопасно. Однако есть несколько
+ рекомендаций, которым стоит следовать:</p>
+
+ <ul>
+ <li><strong>Используйте протокол HTTPS</strong> - если ваш
+ регистратор умеет делать запрос по HTTPS, а ваш хостинг
+ позволяет отвечать на такие запросы, то этот вариант
+ предпочтительнее обычного HTTP, т.к. поток данных будет
+ зашифрован и сгенерированный серийный номер сможет получить
+ только регистратор.</li>
+
+ <li><strong>"Спрячьте" генератор</strong> - убедитесь, что
+ генератор нельзя вызвать случайно. Адрес
+ www.site.com/keygen.php - плохая идея. А вот
+ www.site.com/abc123.php - уже лучше. Убедитесь, что на
+ генератор нет внешних ссылок, что он не показывается при
+ просмотре содержимого директории сайта и не помещайте его в
+ служебные файлы типа robots.txt. Чем меньше известно о
+ расположении генератора - тем лучше. Как вариант - можно
+ вынести генератор на другой сайт.</li>
+
+ <li><strong>Убедитесь, что вас вызывает регистратор</strong> -
+ в программе, обрабатывающей запрос от регистратора, необходимо
+ проверить IP-адрес вызывающей стороны. Обычно регистраторы
+ публикуют список адресов, с которых они могут вызвать
+ генератор. Найдите такой у вашего регистратора и добавьте
+ проверку. В случае несовпадения адреса, лучше не выдавать
+ понятных ошибок. Не возвращайте ничего или верните ошибку 404.
+ Не давайте повода понять, почему вызов оказался неудачен.</li>
+
+ <li><strong>Проверяйте входные параметры</strong> - в
+ настройках продукта у регистратора обычно дается возможность
+ указать строку запроса, который регистратор будет делать для
+ получения лицензии. Скажем, вы хотите получать имя
+ пользователя, адрес его электронной почты, дату продажи и номер
+ заказа. Убедитесь при получении запроса, что все параметры
+ переданы и что все они имеют корректный формат. Не отвечайте на
+ запросы с ошибками. О любых ошибках уведомляйте себя отправкой
+ e-mail со всеми параметрами, с которыми был вызван генератор.
+ Это поможет разобраться в причинах проблемы.</li>
+
+ <li><strong>Добавьте "пароль"</strong> - укажите в запросе,
+ посылаемом регистратором, дополнительный параметр - пароль. С
+ неочевидным именем и значением. Проверяйте его на принимающей
+ стороне. В случае несовпадения или отсутствия - не генерируйте
+ номер.</li>
+ </ul><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/keygen/keygen_dll.htm b/help/ru/manager/keygen/keygen_dll.htm
new file mode 100644
index 0000000..5e8134e
--- /dev/null
+++ b/help/ru/manager/keygen/keygen_dll.htm
@@ -0,0 +1,284 @@
+<!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>Генератор ключей: Windows-версия</title>
+</head>
+
+<body>
+ <h1>Генераторы ключей: Windows-версия</h1>
+
+ <h3>Описание</h3>
+
+ <p>Генератор для Windows представляет собой DLL-файлы для
+ платформ x86 и x64, заголовочный файл языка C и lib-файл,
+ совместимый с MSVC. Таким образом, библиотека может быть как слинкована статически, так
+ и загружаться динамически.</p>
+
+ <p>Все файлы генератора находятся в каталоге
+ <strong>Keygen\DLL</strong>, там же находится тестовое
+ приложение, которое генерирует серийные номера.</p>
+
+ <h3>API генератора</h3>
+
+ <p>Генератор экспортирует всего две функции: одна непосредственно
+ генерирует серийный номер, вторая - освобождает память,
+ выделенную первой. Начнем с первой и основной функции:</p>
+ <pre class="code"><strong>VMProtectErrors</strong> __stdcall <strong>VMProtectGenerateSerialNumber</strong>(
+ <strong>VMProtectProductInfo *</strong> pProductInfo,
+ <strong>VMProtectSerialNumberInfo *</strong> pSerialInfo,
+ <strong>char **</strong> pSerialNumber
+ );
+</pre>
+
+ <p>Первый параметр - указатель на структуру
+ <strong>VMProtectProductInfo</strong>, содержимое которой
+ выгружается в VMProtect (см. <a href=
+ "../licenses.htm#export">Экспорт параметров продукта</a>).
+ Структура содержит приватный ключ продукта, используемый алгоритм
+ и количество бит, а также идентификатор продукта. Подробнее о
+ заполнении этой структуры написано ниже.</p>
+
+ <p>Второй параметр - указатель на структуру
+ <strong>VMProtectSerialNumberInfo</strong>, содержимое которой
+ переносится в генерируемый серийный номер. Структура содержит все
+ поля серийного номера, а также битовую маску, определяющую какие
+ именно поля должны быть записаны в серийный номер.</p>
+ <pre class="code">struct <strong>VMProtectSerialNumberInfo</strong>
+{
+ <strong>INT</strong> flags;
+ <strong>wchar_t *</strong> pUserName;
+ <strong>wchar_t *</strong> pEMail;
+ <strong>DWORD</strong> dwExpDate;
+ <strong>DWORD</strong> dwMaxBuildDate;
+ <strong>BYTE</strong> nRunningTimeLimit;
+ <strong>char *</strong> pHardwareID;
+ <strong>size_t</strong> nUserDataLength;
+ <strong>BYTE *</strong> pUserData;
+};
+</pre>
+
+ <p>Поле <strong>flags</strong> содержит битовые флаги из набора
+ <strong>VMProtectSerialNumberFlags</strong>, описанного перед
+ структурой:</p>
+
+ <ul>
+ <li><strong>HAS_USER_NAME</strong> - поместить в серийный номер
+ имя пользователя, находящееся в переменной
+ <strong>pUserName</strong>.</li>
+
+ <li><strong>HAS_EMAIL</strong> - поместить в серийный номер
+ e-mail пользователя, находящийся в переменной
+ <strong>pEMail</strong>.</li>
+
+ <li><strong>HAS_EXP_DATE</strong> - серийный номер перестанет
+ действовать поле окончания дня, указанного в переменной
+ <strong>dwExpDate</strong>.</li>
+
+ <li><strong>HAS_MAX_BUILD_DATE</strong> - серийный номер будет
+ подходить только к версиям продукта, созданным до даты,
+ указанной в переменной <strong>dwMaxBuildDate</strong>.</li>
+
+ <li><strong>HAS_TIME_LIMIT</strong> - программа перестанет
+ работать по истечении времени, указанного в переменной
+ <strong>nRunningTimeLimit</strong> (время указывается в минутах
+ и не может превышать 255).</li>
+
+ <li><strong>HAS_HARDWARE_ID</strong> - программа будет работать
+ только на оборудовании с идентификатором, указанным в
+ переменной <strong>pHardwareID</strong>.</li>
+
+ <li><strong>HAS_USER_DATA</strong> - поместить в серийный номер
+ пользовательские данные длинной
+ <strong>nUserDataLength</strong>, расположенные по адресу,
+ указанному в переменной <strong>pUserData</strong>.</li>
+ </ul>
+
+ <p>Третий параметр - указатель на указатель. Туда будет записан
+ адрес сгенерированного серийного номера. После генерации номер
+ необходимо скопировать, а адрес передать во вторую функцию API
+ генератора, которая освободит занимаемую серийным номером
+ память.</p>
+ <pre class="code"><strong>void</strong> __stdcall <strong>VMProtectFreeSerialNumberMemory</strong>(<strong>char *</strong> pSerialNumber);
+</pre>
+
+ <p>Функция <strong>VMProtectGenerateSerialNumber</strong>
+ возвращает значение типа <strong>VMProtectErrors</strong>,
+ содержащее 0 в случае успешной генерации номера или код ошибки в
+ противном случае. Возможны следующие коды ошибок:</p>
+
+ <ul>
+ <li><strong>ALL_RIGHT</strong> - ошибок нет, номер сгенерирован
+ успешно.</li>
+
+ <li><strong>UNSUPPORTED_ALGORITHM</strong> - в первом параметре
+ функции передан некорректный алгоритм шифрования ключа.</li>
+
+ <li><strong>UNSUPPORTED_NUMBER_OF_BITS</strong> - в первом
+ параметре функции передано некорректное количество бит в
+ ключе.</li>
+
+ <li><strong>USER_NAME_IS_TOO_LONG</strong> - длина имени
+ пользователя в кодировке UTF-8 превысила 255 байт.</li>
+
+ <li><strong>EMAIL_IS_TOO_LONG</strong> - длина e-mail
+ пользователя в кодировке UTF-8 превысила 255 байт.</li>
+
+ <li><strong>USER_DATA_IS_TOO_LONG</strong> - длина
+ пользовательских данных превышает 255 байт.</li>
+
+ <li><strong>HWID_HAS_BAD_SIZE</strong> - идентификатор
+ оборудования имеет некорректный размер.</li>
+
+ <li><strong>PRODUCT_CODE_HAS_BAD_SIZE</strong> - идентификатор
+ продукта, переданный в первом параметре функции, имеет неверный
+ размер.</li>
+
+ <li><strong>SERIAL_NUMBER_TOO_LONG</strong> - серийный номер
+ слишком длинный и не помещается в указанное в алгоритме количество
+ бит.</li>
+
+ <li><strong>BAD_PRODUCT_INFO</strong> - первый параметр функции
+ некорректен или NULL.</li>
+
+ <li><strong>BAD_SERIAL_NUMBER_INFO</strong> - второй параметр
+ функции некорректен или NULL.</li>
+
+ <li><strong>BAD_SERIAL_NUMBER_CONTAINER</strong> - третий
+ параметр функции не указывает на ячейку памяти для записи
+ адреса серийного номера.</li>
+
+ <li><strong>NOT_EMPTY_SERIAL_NUMBER_CONTAINER</strong> - третий
+ параметр функции не указывает на пустую ячейку, в ячейке должно
+ быть значение NULL.</li>
+
+ <li><strong>BAD_PRIVATE_EXPONENT</strong> - значение приватной
+ экспоненты в первом параметре функции некорректно.</li>
+
+ <li><strong>BAD_MODULUS</strong> - значение модуля в первом
+ параметре функции некорректно.</li>
+ </ul>
+
+ <p>Ошибки делятся на две категории: те, что связаны с
+ некорректными параметрами или с содержимым первого параметра
+ функции, и все остальные. Ошибки первой категории редки и
+ являются признаком некорректной настройки структуры. Имеет смысл
+ выгрузить информацию о продукте повторно и убедиться, что
+ структура заполняется правильно. Пример правильного заполнения
+ приведен ниже.</p>
+
+ <p>Ошибки второй категории связаны с попыткой вместить в ключ
+ больше данных, чем это возможно ввиду его размера. В таком случае
+ разумно будет отправить регистратору вместо ключа текст "Ключ
+ будет выслан в течение суток", а всю необходимую информацию
+ отправить себе по почте. Ключ в таком случае генерируется в
+ VMProtect в ручном режиме, какие-то данные обрезаются, чтобы
+ уместить все необходимое в максимальный размер
+ ключа.</p>
+
+ <h3>Пример использования</h3>
+
+ <p>Ниже приведен пример кода, который вызывает две вышеописанные
+ функции и генерирует серийный номер. Обратите внимание на блок
+ кода, расположенный в самом начале. Пример не будет работать пока
+ вы не замените его на блок, выгруженный для продукта из
+ VMProtect:</p>
+ <pre class="code">//////////////////////////////////////////////////////////////////////////
+// !!! this block should be generated by VMProtect !!! ///
+//////////////////////////////////////////////////////////////////////////
+
+<strong>VMProtectAlgorithms</strong> g_Algorithm = ALGORITHM_RSA;
+<strong>size_t</strong> g_nBits = 0;
+<strong>byte</strong> g_vModulus[1];
+<strong>byte</strong> g_vPrivate[1];
+<strong>byte</strong> g_vProductCode[1];
+
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+<strong>int</strong> _tmain(<strong>int</strong> argc, <strong>_TCHAR*</strong> argv[])
+{
+ <strong>VMProtectProductInfo</strong> pi;
+ pi.algorithm = g_Algorithm;
+ pi.nBits = g_nBits;
+ pi.nModulusSize = sizeof(g_vModulus);
+ pi.pModulus = g_vModulus;
+ pi.nPrivateSize = sizeof(g_vPrivate);
+ pi.pPrivate = g_vPrivate;
+ pi.nProductCodeSize = sizeof(g_vProductCode);
+ pi.pProductCode = g_vProductCode;
+
+ <strong>VMProtectSerialNumberInfo</strong> si = {0};
+ si.flags = HAS_USER_NAME | HAS_EMAIL;
+ si.pUserName = L"John Doe";
+ si.pEMail = L"john@doe.com";
+ <strong>char *</strong> pBuf = NULL;
+ <strong>VMProtectErrors</strong> res = <strong>VMProtectGenerateSerialNumber</strong>(&amp;pi, &amp;si, &amp;pBuf);
+ <strong>if</strong> (res == ALL_RIGHT)
+ {
+ <strong>printf</strong>("Serial number:\n%s\n", pBuf);
+ <strong>VMProtectFreeSerialNumberMemory</strong>(pBuf);
+ }
+ else
+ {
+ <strong>printf</strong>("Error: %d\n", res);
+ }
+
+ <strong>return</strong> 0;
+}
+</pre>
+
+ <p>Этот пример с проектом для Microsoft Visual Studio находится в
+ каталоге <strong>Keygen\DLL\Example</strong>, ниже будут описаны
+ наиболее интересные места кода.</p>
+
+ <p>Первые строчки функции <strong>main</strong> заполняют
+ структуру <strong>VMProtectProductInfo</strong> данными,
+ выгруженными из VMProtect. Этот код стандартен, его не следует
+ менять во избежание появления ошибок. Далее создается структура
+ <strong>VMProtectSerialNumberInfo</strong>, в поле флагов
+ выставляется комбинация из битов имени пользователя и e-mail.
+ Строчкой ниже в соответствующие поля структуры заносятся значения
+ имени пользователя и пароля. Обратите внимание, что значения
+ принимаются в кодировке UNICODE. Генератор ключей внутри
+ преобразует их в кодировку UTF-8.</p>
+
+ <p>Далее описывается переменная-указатель, куда будет записан
+ адрес сгенерированного ключа, и вызывается функция
+ <strong>VMProtectGenerateSerialNumber</strong>, после чего
+ анализируется код возврата. Если ошибок нет, то сгенерированный
+ номер печатается на консоль и вызывается функция осовобождения
+ памяти.</p>
+
+ <h3>Остальные поля структуры VMprotectSerialNumberInfo</h3>
+
+ <p>Некоторые поля структуры требуют дополнительных поясненений. К
+ примеру, поля <strong>dwExpDate</strong> и
+ <strong>dwMaxBuildDate</strong> содержат даты в определенном
+ формате: <strong>0xYYYYMMDD</strong>, т.е. год хранится в старшем
+ слове, а месяц и день в старшем и младшем байтах младшего слова.
+ Для формирования такого числа описан макрос <strong>MAKEDATE(y,
+ m, d)</strong>, который можно вызвать так: <strong>MAKEDATE(2010,
+ 05, 12)</strong>.</p>
+
+ <p>В поле <strong>pHardwareID</strong> должен быть записан
+ указатель на строку, которую вернул метод
+ <strong>VMProtectGetCurrentHWID</strong> из SDK
+ лицензирования.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/keygen/keygen_net.htm b/help/ru/manager/keygen/keygen_net.htm
new file mode 100644
index 0000000..f2d8d36
--- /dev/null
+++ b/help/ru/manager/keygen/keygen_net.htm
@@ -0,0 +1,115 @@
+<!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>Генератор ключей: .Net-версия</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ div.c2 {text-align: center}
+ p.c1 {color:red;}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Генераторы ключей: .Net-версия</h1>
+
+ <h3>Описание</h3>
+
+ <p>.Net-версия генератора ключей преставляет собой сборку,
+ содержащую все необходимое для генерации серийных номеров.
+ Исходные коды находятся в каталоге <strong>Keygen\Net</strong> в
+ виде двух проектов: KeyGen (непосредственно генератор серийных
+ номеров) и Usage (пример использования генератора).</p>
+
+ <p class="c1">Генератор поставляется в исходных кодах, чтобы
+ иметь возможность пересобрать его под нужную версию .Net
+ Framework, однако крайне не рекомендуется вносить изменения в его
+ код. В будущих версиях VMProtect возможно добавление новых
+ возможностей в генератор, что приведет к необходимости повторной
+ модификации кода. Также возможно появление трудноуловимых ошибок.
+ В случае нахождения ошибки в оригинальном коде генератора или
+ пожеланий по его улучшению - обращайтесь в службу
+ поддержки.</p>
+
+ <h3>Использование генератора</h3>
+
+ <p>Возьмите за основу код из проекта <strong>Usage</strong>,
+ добавьте в Ваш проект ссылку на сборку VMProtect.KeyGen.dll,
+ после чего Вы сможете генерировать серийные номера в вашем
+ приложении. Для нормальной работы генератор должен понимать,
+ к какому продукту Вы собираетесь генерировать серийные номера.
+ Для этого на закладке "Лицензии" VMProtect нажмите кнопку
+ «Экспорт» и в выпадающем списке выберите «Параметры для
+ KeyGen.Net». В текстовом поле ниже появятся несколько строк
+ текста, которые необходимо скопировать и перенести в Ваше
+ приложение в виде строковой константы.</p>
+
+ <p>Пример вызова генератора представлен ниже:</p>
+ <pre>
+try
+{
+ string data = @""; // put the exported data here
+ Generator g = new Generator(data);
+ g.UserName = "John Doe";
+ g.EMail = "john@doe.com";
+ g.ExpirationDate = DateTime.Now.AddMonths(1);
+ g.MaxBuildDate = DateTime.Now.AddYears(1);
+ g.RunningTimeLimit = 15;
+ g.HardwareID = "AQIDBAgHBgU=";
+ g.UserData = new byte[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
+ string serial = g.Generate();
+ Console.WriteLine("Serial number:\n{0}\n", serial);
+}
+catch (Exception ex)
+{
+ Console.WriteLine("Error: {0}", ex);
+}
+
+</pre>
+
+ <p>Строку, скопированную в окне экспорта VMProtect, необходимо
+ поместить в переменную <strong>data</strong>, которая будет
+ передана параметром в конструктор класса генератора серийных
+ номеров. В случае каких-либо проблем с разбором данных продукта,
+ конструктор выбросит исключение с описанием проблемы. Если
+ конструктор отработал успешно, то генератор готов к созданию
+ серийных номеров.</p>
+
+ <p>Серийный номер может содержать различную информацию, которая
+ задается через свойства генератора. Пример выше показывает, как
+ заполнить абсолютно все поля серийного номера. Отдельные поля
+ имеют ограничения. Например, поля <strong>User Name</strong> и
+ <strong>E-Mail</strong> не могут принять строки, которые в
+ кодировке UTF-8 будут иметь длину, превышающую 255 символов. В
+ случае подачи некорректных данных, свойства выбрасывают исключения с
+ описанием проблемы.</p>
+
+ <p>По окончании настройки генератора вызывается метод
+ <strong>Generate()</strong>, который и создает серийный номер. На
+ этом этапе происходит компоновка всех данных номера, подсчет
+ контрольных сумм и, непосредственно, шифрование. В случае, если
+ объем данных превышает максимально допустимую длину, метод выбросит
+ исключение.</p>
+
+ <p>В случае, если необходимо сгенерировать несколько серийных
+ номеров, можно использовать класс генератора несколько раз, не
+ пересоздавая его. Чтобы "очистить" любое из свойств генератора,
+ ему нужно присвоить значение <strong>null</strong>.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/keygen/keygen_php.htm b/help/ru/manager/keygen/keygen_php.htm
new file mode 100644
index 0000000..7df459a
--- /dev/null
+++ b/help/ru/manager/keygen/keygen_php.htm
@@ -0,0 +1,143 @@
+<!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>
diff --git a/help/ru/manager/keygen/serial_format.htm b/help/ru/manager/keygen/serial_format.htm
new file mode 100644
index 0000000..d11d34f
--- /dev/null
+++ b/help/ru/manager/keygen/serial_format.htm
@@ -0,0 +1,260 @@
+<!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>Формат серийного номера</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ th {text-align:left;}
+ table {border-collapse:collapse; margin-top: 4px;}
+ td,th {border: 1px solid #B0B0B0; padding-left:10;padding-right:10;}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Формат серийного номера</h1>
+
+ <h3>Структура серийного номера</h3>
+
+ <p>Серийный номер состоит из блоков. Каждый блок
+ начинается с байта идентификатора, который определяет его
+ содержимое и, возможно, длину. Последним всегда идет блок с
+ идентификатором 255, содержащий контрольную сумму всего серийного
+ номера, за исключением последнего блока.</p>
+
+ <p>В зависимости от типа блока, он может иметь фиксированную или
+ переменную длину. Во втором случае обычно длина идет в следующем
+ за идентификатором блока байте. Подробно формат каждого блока
+ описан ниже.</p>
+
+ <h3>Формат блоков</h3>
+
+ <table border="1" cellspacing="0" cellpadding="2">
+ <tr>
+ <th>ID</th>
+
+ <th>Название</th>
+
+ <th>Размер (байт)</th>
+
+ <th>Описание</th>
+
+ <th>Пример</th>
+ </tr>
+
+ <tr>
+ <td>0x01</td>
+
+ <td>Версия</td>
+
+ <td>1</td>
+
+ <td>Блок содержит версию серийного номера размером в 1 байт.
+ Версия должна быть равна 1.</td>
+
+ <td>01 01</td>
+ </tr>
+
+ <tr>
+ <td>0x02</td>
+
+ <td>Имя пользователя</td>
+
+ <td>1 + N</td>
+
+ <td>Блок содержит имя пользователя в кодировке UTF-8. Перед
+ именем пользователя располагается 1 байт длины имени. Таким
+ образом, длина имени пользователя не может превышать 255
+ байт. Завершающий 0 не требуется.</td>
+
+ <td>02 04 4A 5F 48 4E</td>
+ </tr>
+
+ <tr>
+ <td>0x03</td>
+
+ <td>E-Mail</td>
+
+ <td>1 + N</td>
+
+ <td>Блок содержит e-mail пользователя в кодировке UTF-8.
+ Перед e-mail'ом располагается 1 байт длины. Таким образом,
+ длина e-mail не может превышать 255 байт. Завершающий 0 не
+ требуется.</td>
+
+ <td>03 07 61 40 62 2E 63 6F 6D</td>
+ </tr>
+
+ <tr>
+ <td>0x04</td>
+
+ <td>Идентификатор оборудования</td>
+
+ <td>1 + N</td>
+
+ <td>Блок содержит идентификатор оборудования, возвращенный
+ функцией <strong>VMProtectGetCurrentHWID()</strong>. Функция
+ возвращает строку в кодировке base-64, в серийный номер
+ помещается раскодированный вариант строки. Длина блока данных
+ должна быть кратна 4. Перед блоком данных располагается байт
+ длины. Максимальная длина блока - 32 байта.</td>
+
+ <td>04 08 E1 E2 E3 E4 A1 A2 A3 A4</td>
+ </tr>
+
+ <tr>
+ <td>0x05</td>
+
+ <td>Дата окончания лицензии</td>
+
+ <td>4</td>
+
+ <td>Блок содержит дату окончания действия серийного номера.
+ Формат хранения даты описан ниже.</td>
+
+ <td>05 01 0A 07 DA</td>
+ </tr>
+
+ <tr>
+ <td>0x06</td>
+
+ <td>Максимальное время работы</td>
+
+ <td>1</td>
+
+ <td>Блок содержит 1 байт с временем работы программы в
+ минутах. Максимальное время работы, таким образом, может
+ составлять 255 минут.</td>
+
+ <td>06 05</td>
+ </tr>
+
+ <tr>
+ <td>0x07</td>
+
+ <td>Код продукта</td>
+
+ <td>8</td>
+
+ <td>Блок содержит код продукта - 8 байт, которые создаются
+ VMProtect и выгружаются при экспорте параметров продукта.
+ Выгружаются они в кодировке base-64, перед помещением в
+ серийный номер строку необходимо преобразовать в массив байт.
+ Размер массива должен быть строго равен 8 байтам.
+ <strong>Этот блок является обязательным, без него защищенная
+ программа будет работать некорректно!</strong></td>
+
+ <td>07 01 02 03 04 05 06 07 08</td>
+ </tr>
+
+ <tr>
+ <td>0x08</td>
+
+ <td>Данные пользователя</td>
+
+ <td>1 + N</td>
+
+ <td>Блок содержит до 255 байт пользовательских данных.
+ Система лицензирования не анализирует эти данные и возвращает
+ их при вызове функции
+ <strong>VMProtectGetSerialNumberData()</strong>. Перед блоком
+ данных располагается байт, содержащий размер пользовательских
+ данных.</td>
+
+ <td>08 05 01 02 03 04 05</td>
+ </tr>
+
+ <tr>
+ <td>0x09</td>
+
+ <td>Максимальная дата сборки</td>
+
+ <td>4</td>
+
+ <td>Блок содержит максимальную дату сборки приложения, с
+ которым будет работать этот серийный номер. Формат хранения
+ даты описан ниже.</td>
+
+ <td>09 01 0A 07 DA</td>
+ </tr>
+
+ <tr>
+ <td>0xFF</td>
+
+ <td>Контрольная сумма</td>
+
+ <td>4</td>
+
+ <td>Блок содержит контрольную сумму серийного номера. Блок
+ располагается последним и контрольная сумма считается для
+ всех блоков, идущих перед этим. Подробнее о расчете
+ контрольной суммы написано ниже.</td>
+
+ <td>FF 01 02 03 04</td>
+ </tr>
+ </table>
+
+ <h3>Формат хранения даты</h3>
+
+ <p>Даты в серийном номере хранятся в виде двойного слова -
+ 0xYYYYMMDD. Старшее слово содержит год, а младшее - день и месяц.
+ Байты расположены в порядке Little Endian - от младшего к
+ старшему. В случае, если имеется указатель на первый байт записи,
+ то дата может быть считана и записана следующим кодом:</p>
+ <pre class="code"><strong>byte *</strong>pDate = 0xNNNNNN; // адрес даты
+<strong>*</strong>(<strong>DWORD *</strong>)pDate = (2010 &lt;&lt; 16) | (10 &lt;&lt; 8) | 1; // October 1, 2010
+<strong>DWORD</strong> dwExp = *(<strong>DWORD *</strong>)pDate;
+</pre>
+
+ <h3>Подсчет контрольной суммы</h3>
+
+ <p>Контрольная сумма серийного номера вычисляется при помощи
+ алгоритма хеширования SHA-1. Результатом работы алгоритма
+ являются пять 32-битных слов. Первое слово используется в
+ качестве контрольной суммы серийного номера. <strong>Обратите
+ внимание:</strong> слово записывается в формате Little Endian (от
+ младшего байта к старшему). В строковом представлении хеша SHA-1
+ используется формат Big Endian - числа записываются от старшего
+ байта к младшему, поэтому если SHA-1 генерируется функцией,
+ которая возвращает строку (как в PHP), то первые четыре байта
+ хеша необходимо предварительно
+ развернуть.</p>
+
+ <h3>Дополнительная информация</h3>
+
+ <p>Блоки с номерами, отличными от описанных выше, игнорируются
+ системой лицензирования. Возможно появление новых блоков в
+ будущих версиях. <strong>Не рекомендуется создавать свои блоки,
+ используя свободные идентификаторы!</strong> Во-первых, это может
+ привести к неработоспособности ключа с новыми версиями системы
+ лицензирования. А во-вторых, защищаемая программа все равно не
+ сможет прочитать значения этих блоков. Для хранения какой-либо
+ информации в ключе нужно использовать поле <strong>User
+ Data</strong>, которое предназначено именно для этого.</p>
+
+ <p>Серийный номер не содержит "соли" (SALT) - случайной
+ информации, предназначенной для того, чтобы ключи для одних и тех
+ же данных получались разными. Эта задача возлагается на алгоритм
+ шифрования. Если необходимы отличия на уровне серийных номеров,
+ скажем для серии ключей, проданных в организацию, можно записать
+ номер ключа строкой в поле имени пользователя (ООО "Компания",
+ ключ 1 из 10) или занести эту информацию в поле <strong>User
+ Data</strong> в любом удобном для разработчика формате.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/licenses.htm b/help/ru/manager/licenses.htm
new file mode 100644
index 0000000..88517d5
--- /dev/null
+++ b/help/ru/manager/licenses.htm
@@ -0,0 +1,112 @@
+<!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>Управление лицензиями</title>
+</head>
+
+<body>
+ <h1>Управление лицензиями</h1>
+
+ <h3>Инициализация</h3>
+
+ <p>По умолчанию функции лицензирования выключены. Чтобы включить
+ их, нужно перейти в секцию "Лицензии" раздела "Проект" и создать пару ключей. В
+ случае, если проект ссылается на базу данных менеджера лицензий
+ (в старых версиях VMProtect лицензии управлялись отдельной
+ программой), то будет предложено импортировать эти лицензии в
+ проект. По окончании инициализации будут доступны опции привязки
+ кода к серийному номеру, а также появится возможность создавать и
+ обрабатывать серийные номера.</p>
+
+ <h3>Интерфейс</h3>
+
+ <p>Секция "Лицензии" отображает полный список лицензий в левой панели и
+ параметры выбранного элемента справа в основной панели.</p>
+
+ <p><img src="../images/licenses1.png" /></p>
+
+ <p>Правая панель отображает подробную информацию о выбранной
+ лицензии. Также там можно заблокировать серийный номер,
+ скопировать его в буфер обмена, посмотреть подробную информацию
+ об идентификаторе оборудования (кликнув по нему).</p>
+
+ <h3 id="AddLicense">Создание лицензии</h3>
+
+ <p>Для того чтобы добавить новую лицензию, необходимо кликнуть
+ соответствующую кнопку на панели инструментов.
+ Появится окно создания лицензии:</p>
+
+ <p><img src="../images/project_add_license.png" /></p>
+
+ <p>В верхней части окна задаются основные параметры лицензии. В
+ нижней можно выбрать, какие из основных параметров попадут в
+ серийный номер, а также добавить дополнительные параметры:
+ например, идентификатор оборудования или пользовательские данные.
+ По окончании заполнения полей нажмите ОК и VMProtect создаст
+ новую лицензию.</p>
+
+ <h3>Удаление и блокирование лицензий</h3>
+
+ <p>Для удаления лицензии щелкните по ней в списке лицензий правой кнопкой мыши и выберите "Удалить" в контекстном меню. Либо просто выделите лицензию в списке и нажмите Del. Для того чтобы заблокировать лицензию, переключите параметр "Заблокирована" в основной панели справа в состояние "Да".</p><p>Между удалением лицензии и ее блокированием есть
+ разница. Удаленные серийные номера не блокируются модулем
+ лицензирования. Они просто перестают существовать в базе данных.
+ Если лицензия создана ошибочно и серийный номер никогда никому не
+ отправлялся, то ее можно удалить. Если же серийный номер
+ скомпрометирован, то лицензию удалять нельзя, ее необходимо
+ заблокировать. Тогда в модуль лицензирования будет передана
+ информация об этом номере и он не будет принимать его.</p>
+
+ <h3>Импорт серийных номеров</h3>
+
+ <p>Серийные номера могут быть созданы не только в VMProtect, но и
+ в сторонних программах - генераторах номеров. Обычно они
+ применяются для автоматизированной выдачи серийных номеров
+ регистраторам при продаже лицензий. Чтобы корректно занести такие
+ номера в базу данных, существует функция импорта серийных
+ номеров. Для ее активации необходимо нажать сочетание клавиш
+ Ctrl+I или выбрать пункт "Импортировать" в меню "Проект".</p>
+
+ <p><img src="../images/menu_project_import.png" /></p>
+
+ <p>Первым шагом при импорте серийного номера является окно ввода
+ номера:</p>
+
+ <p><img src="../images/import_key.png" /></p>
+
+ <p>В случае, если такая лицензия уже есть в базе данных, будет
+ открыто окно редактирования лицензии. Если лицензии в базе нет,
+ то будет открыто окно создания лицензии, где можно внести
+ необходимые правки, после чего, нажатием кнопки ОК, лицензия
+ заносится в базу данных.</p><a name="export" id="export"></a>
+
+ <h3>Экспорт параметров лицензирования</h3>
+
+ <p>Для корректной работы генераторов ключей, им необходима
+ информация о секретном ключе продукта. Эту информацию в наиболее
+ подходящей форме можно получить, нажав кнопку "Экспорт ключа" над
+ списком лицензий. При этом появится окно экспорта данных:</p>
+
+ <p><img src="../images/export_keys.png" /></p>
+
+ <p>Поле "Формат экспорта" позволяет выбрать один из
+ поддерживаемых форматов, а поле "Результат экспорта" содержит
+ данные в виде, наиболее удобном для соответствующего генератора
+ ключей. Кнопка "Копировать" позволяет скопировать содержимое поля
+ "Результат экспорта" в буфер обмена.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/api.htm b/help/ru/manager/usage/api.htm
new file mode 100644
index 0000000..df533b4
--- /dev/null
+++ b/help/ru/manager/usage/api.htm
@@ -0,0 +1,312 @@
+<!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>Описание функций API лицензирования</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ th {text-align:left;}
+ table {border-collapse:collapse; margin-top: 4px;}
+ td,th {border: 1px solid #B0B0B0; padding-left:10;padding-right:10;}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Описание функций API лицензирования</h1>
+
+ <p>API системы лицензирования является продолжением API VMProtect
+ и входит в его SDK. API позволяет задать серийный номер и
+ получить информацию о нем: подходит он к программе или нет, истек
+ ли срок действия, на кого зарегистрирован продукт и т.п. Также API
+ позволяет получить идентификатор оборудования, на котором
+ выполняется программа.</p><strong id=
+ "VMProtectSetSerialNumber">VMProtectSetSerialNumber</strong>
+
+ <p>Функция предназначена для загрузки серийного номера в систему
+ лицензирования. Полный формат вызова представлен ниже:</p>
+ <pre class="code">int VMProtectSetSerialNumber(const char *SerialNumber);
+</pre>
+
+ <p>Входной параметр <strong>SerialNumber</strong> должен
+ содержать указатель на текстовую строку с серийным номером в
+ кодировке base-64 и завершаемую нулем ('\0'). Функция возвращает
+ битовую маску флагов состояния серийного номера, аналогичную той,
+ что возвращает <strong>VMProtectGetSerialNumberState()</strong>,
+ подробнее о флагах будет написано ниже. Серийный номер считается
+ "хорошим", если функция вернула значение 0.</p><br />
+ <strong id=
+ "VMProtectGetSerialNumberState">VMProtectGetSerialNumberState</strong>
+
+ <p>Функция возвращает флаги состояния серийного номера,
+ предварительно установленного вызовом
+ <strong>VMProtectSetSerialNumber()</strong>.</p>
+ <pre class="code">int VMProtectGetSerialNumberState();
+</pre>
+
+ <p>Наличие хотя бы одного установленного флага говорит о
+ проблемах с серийным номером: программа не должна работать, если
+ установлен хотя бы один бит. Подробные значениях флагов описаны в
+ таблице:</p>
+
+ <table border="1" cellspacing="0" cellpadding="2">
+ <tr>
+ <th>Флаг</th>
+
+ <th>Значение</th>
+
+ <th>Описание</th>
+ </tr>
+
+ <tr>
+ <td>SERIAL_STATE_FLAG_CORRUPTED</td>
+
+ <td>0x00000001</td>
+
+ <td>Система лицензирования повреждена. Возможные причины:
+ некорректная настройка проекта защиты, попытка взлома
+ программы.</td>
+ </tr>
+
+ <tr>
+ <td>SERIAL_STATE_FLAG_INVALID</td>
+
+ <td>0x00000002</td>
+
+ <td>Серийный номер некорректен. Флаг выставляется, если
+ система лицензирования не может расшифровать серийный
+ номер.</td>
+ </tr>
+
+ <tr>
+ <td>SERIAL_STATE_FLAG_BLACKLISTED</td>
+
+ <td>0x00000004</td>
+
+ <td>Серийный номер подходит к продукту, однако занесен в
+ черный список в VMProtect.</td>
+ </tr>
+
+ <tr>
+ <td>SERIAL_STATE_FLAG_DATE_EXPIRED</td>
+
+ <td>0x00000008</td>
+
+ <td>Срок действия серийного номера истек. Подробную
+ информацию о сроке действия можно получить вызовом
+ <strong>VMProtectGetSerialNumberData()</strong></td>
+ </tr>
+
+ <tr>
+ <td>SERIAL_STATE_FLAG_RUNNING_TIME_OVER</td>
+
+ <td>0x00000010</td>
+
+ <td>Время работы программы истекло. Подробную информацию о
+ времени работы программы можно получить вызовом
+ <strong>VMProtectGetSerialNumberData()</strong></td>
+ </tr>
+
+ <tr>
+ <td>SERIAL_STATE_FLAG_BAD_HWID</td>
+
+ <td>0x00000020</td>
+
+ <td>Идентификатор оборудования не совпадает с тем, что
+ записан в серийном номере.</td>
+ </tr>
+
+ <tr>
+ <td>SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED</td>
+
+ <td>0x00000040</td>
+
+ <td>Серийный номер не предназначен для работы с этой версией
+ защищаемой программы. Максимальную дату сборки программы, к
+ которой подходит этот серийный номер, можно узнать вызовом
+ <strong>VMProtectGetSerialNumberData()</strong>.</td>
+ </tr>
+ </table><br /><br />
+ <strong id=
+ "VMProtectGetSerialNumberData">VMProtectGetSerialNumberData</strong>
+
+ <p>Функция предназначена для получения информации о содержимом
+ серийного номера, установленного вызовом
+ <strong>VMProtectSetSerialNumber()</strong>. Формат вызова
+ представлен ниже:</p>
+ <pre class="code">bool VMProtectGetSerialNumberData(VMProtectSerialNumberData *Data, int Size);
+</pre>
+
+ <p>Первый параметр - указатель на структуру
+ <strong>VMProtectSerialNumberData</strong>, в которую будет
+ записана вся необходимая информация. Второй параметр - размер
+ структуры, передаваемой в первом параметре - служит для контроля
+ формата структуры. Функция возвращает FALSE в случаях, если система
+ лицензирования повреждена (см. флаг состояния
+ SERIAL_STATE_FLAG_CORRUPTED), если на вход подан нулевой адрес
+ структуры или если переданный размер структуры некорректен. Во
+ всех остальных случаях функция возвращает TRUE и записывает всю
+ информацию о серийном номере по указанном адресу. Ниже
+ описываются все элементы структуры:</p>
+
+ <table border="1" cellspacing="0" cellpadding="2">
+ <tr>
+ <th>Элемент</th>
+
+ <th>Тип</th>
+
+ <th>Описание</th>
+ </tr>
+
+ <tr>
+ <td>nState</td>
+
+ <td>int</td>
+
+ <td>Битовая маска флагов проверки ключа. Аналогична той, что
+ возвращает
+ <strong>VMProtectGetSerialNumberState()</strong>.</td>
+ </tr>
+
+ <tr>
+ <td>wUserName</td>
+
+ <td>wchar_t[256]</td>
+
+ <td>Имя покупателя в кодировке UNICODE, завершаемое
+ нулем.</td>
+ </tr>
+
+ <tr>
+ <td>wEMail</td>
+
+ <td>wchar_t[256]</td>
+
+ <td>E-Mail покупателя в кодировке UNICODE, завершаемый
+ нулем.</td>
+ </tr>
+
+ <tr>
+ <td>dtExpire</td>
+
+ <td>VMProtectDate</td>
+
+ <td>Дата окончания срока действия ключа. Формат структуры
+ VMProtectDate описан ниже.</td>
+ </tr>
+
+ <tr>
+ <td>dtMaxBuild</td>
+
+ <td>VMProtectDate</td>
+
+ <td>Максимальная дата сборки продукта, с которой будет
+ работать этот ключ. Формат структуры VMProtectDate описан
+ ниже.</td>
+ </tr>
+
+ <tr>
+ <td>bRunningTime</td>
+
+ <td>int</td>
+
+ <td>Количество минут, которое программа будет работать
+ (максимальная длина сессии). Измеряется в минутах,
+ отсчитывается с момента запуска программы.</td>
+ </tr>
+
+ <tr>
+ <td>nUserDataLength</td>
+
+ <td>unsigned char</td>
+
+ <td>Длина пользовательских данных, размещенных в поле
+ <strong>bUserData</strong>.</td>
+ </tr>
+
+ <tr>
+ <td>bUserData</td>
+
+ <td>unsigned char[255]</td>
+
+ <td>Пользовательские данные, записанные в ключ. Количество
+ актуальных байт указано в поле
+ <strong>nUserDataLength</strong>.</td>
+ </tr>
+ </table><br />
+
+ <p>Структура <strong>VMProtectDate</strong> предназначена для
+ компактного хранения даты. Ее поля описаны в таблице:</p>
+
+ <table border="1" cellspacing="0" cellpadding="2">
+ <tr>
+ <th>Элемент</th>
+
+ <th>Тип</th>
+
+ <th>Описание</th>
+ </tr>
+
+ <tr>
+ <td>wYear</td>
+
+ <td>unsigned short</td>
+
+ <td>Год.</td>
+ </tr>
+
+ <tr>
+ <td>bMonth</td>
+
+ <td>unsigned char</td>
+
+ <td>Месяц, нумерация начинается с единицы.</td>
+ </tr>
+
+ <tr>
+ <td>bDay</td>
+
+ <td>unsigned char</td>
+
+ <td>День, нумерация начинается с единицы.</td>
+ </tr>
+ </table><br />
+ <br />
+ <strong id=
+ "VMProtectGetCurrentHWID">VMProtectGetCurrentHWID</strong>
+
+ <p>Функция предназначена для получения идентификатора
+ оборудования, на котором работает программа. Формат вызова
+ следующий:</p>
+ <pre class="code">int VMProtectGetCurrentHWID(char * HWID, int Size);
+</pre>
+
+ <p>Первый параметр - указатель на область памяти, куда будет
+ записан идентификатор. Второй параметр - размер области данных.
+ Функция возвращает количество записанных байт с учетом
+ завершающего нуля ('\0'). Если вместо первого параметра подать
+ NULL, то функция вернет необходимое количество байт для записи
+ номера. Наиболее правильный способ вызова функции следующий:</p>
+ <pre class="code"><strong>int</strong> nSize = <strong>VMProtectGetCurrentHWID</strong>(NULL, 0); // получим необходимый размер буфера
+<strong>char *</strong>pBuf = <strong>new char</strong>[nSize]; // выделим буфер
+<strong>VMProtectGetCurrentHWID</strong>(pBuf, nSize); // получим идентификатор
+// используем его
+<strong>delete</strong> [] pBuf; // освободим память
+</pre><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/index.htm b/help/ru/manager/usage/index.htm
new file mode 100644
index 0000000..99189c0
--- /dev/null
+++ b/help/ru/manager/usage/index.htm
@@ -0,0 +1,127 @@
+<!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>Интеграция в приложение</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Интеграция в приложение</h1>
+
+ <p>В нескольких шагах, описанных ниже, мы создадим тестовое
+ приложение, которое будет обращаться к системе лицензирования:
+ подавать ей серийные номера и получать статус номера и его
+ содержимое. На первом этапе система лицензирования будет
+ использоваться в тестовом режиме, а на втором этапе - в
+ реальном.</p><strong>Режимы работы системы
+ лицензирования</strong>
+
+ <p>В создании защиты всегда есть два этапа: разработка и
+ использование. В случае с лицензированием, вы сначала создаете
+ приложение, потом интегрируете механизмы защиты, добавляете
+ проверки и блокируете функции. И только потом, после
+ всестороннего тестирования, продукт передается пользователям и
+ начинается второй этап. Тестирование защищаемого приложения -
+ процесс сложный, необходимо убедиться в работоспособности всех
+ проверок и условных переходов. Создание "настоящих" серийных
+ номеров на все случаи жизни на этапе тестирования может оказаться
+ неудобным, поэтому у системы лицензирования есть т.н. "режим
+ разработки" или "тестовый" режим, при котором никакой защиты не
+ осуществляется, а реакция системы на серийные номера описывается
+ в конфигурационном файле. Когда приложение отлажено и корректно
+ работает с системой лицензирования, VMProtect заменяет "тестовый"
+ модуль лицензирования на реальный, проверяющий реальные серийные
+ номера. Это происходит в момент защиты приложения, поэтому
+ пропустить этот этап по ошибке не получится.</p><strong id="TestMode">Этап 1:
+ Тестовый режим работы</strong>
+
+ <p>В тестовом режиме реакция системы лицензирования на серийные
+ номера, все возвращаемые статусы и данные описываются в
+ конфигурационном файле. Файл называется VMPLicense.ini и должен
+ располагаться в рабочем каталоге приложения. В 10 шагах,
+ представленных ниже, мы пройдем от создания простейшего
+ приложения до полноценного использования системы лицензирования в
+ тестовом режиме с привязкой к оборудованию и ограничением срока
+ бесплатных обновлений.</p>
+
+ <ul>
+ <li><a href="step11_app.htm">Шаг 1.1: Создаем защищаемое
+ приложение</a></li>
+
+ <li><a href="step12_code.htm">Шаг 1.2: Добавляем код проверки
+ лицензии</a></li>
+
+ <li><a href="step13_flags.htm">Шаг 1.3: Получаем флаги состояния
+ номера</a></li>
+
+ <li><a href="step14_name.htm">Шаг 1.4: Получаем имя и e-mail
+ пользователя</a></li>
+
+ <li><a href="step15_exp.htm">Шаг 1.5: Проверяем срок действия
+ номера</a></li>
+
+ <li><a href="step16_time.htm">Шаг 1.6: Ограничиваем время работы
+ программы</a></li>
+
+ <li><a href="step17_maxbuild.htm">Шаг 1.7: Ограничиваем
+ бесплатные обновления</a></li>
+
+ <li><a href="step18_blacklist.htm">Шаг 1.8: Номера из "черного
+ списка"</a></li>
+
+ <li><a href="step19_hwid.htm">Шаг 1.9: Привязка к
+ оборудованию</a></li>
+
+ <li><a href="step1A_userdata.htm">Шаг 1.10: Пользовательские
+ данные</a></li>
+ </ul><strong id="RealMode">Этап 2: Реальный режим работы</strong>
+
+ <p>В реальном режиме работы системы лицензирования VMProtect
+ помещает в защищаемое приложение специальный модуль
+ лицензирования. Модуль выполняет все те же функции, что и
+ тестовый код в SDK, но работает не с ini-файлом, а с содержимым
+ серийного номера. В следующих пяти шагах мы защитим простое
+ приложение полноценной защитой на основе VMProtect и системы
+ лицензирования.</p>
+
+ <ul>
+ <li><a href="step21_src.htm">Шаг 2.1: Создаем новое защищаемое
+ приложение</a></li>
+
+ <li><a href="step22_vmp.htm">Шаг 2.2: Создаем проект защиты в
+ VMProtect</a></li>
+
+ <li><a href="step23_product.htm">Шаг 2.3: Первый запуск
+ защищенного продукта</a></li>
+
+ <li><a href="step24_test.htm">Шаг 2.4: Тестируем
+ результат</a></li>
+
+ <li><a href="step25_codelock.htm">Шаг 2.5: Привязываем код к
+ серийному номеру</a></li>
+ </ul><strong>Дополнительная информация</strong>
+
+ <p>Значения всех битовых флагов, форматы структур и параметры
+ вызова функций можно посмотреть в разделе <a href="api.htm">API
+ системы лицензирования</a>. Этот раздел удобно использовать как
+ справочник, тогда как шаги, описанные выше, позволяют легко
+ реализовать готовые типовые схемы защиты.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step11_app.htm b/help/ru/manager/usage/step11_app.htm
new file mode 100644
index 0000000..cb5afbd
--- /dev/null
+++ b/help/ru/manager/usage/step11_app.htm
@@ -0,0 +1,62 @@
+<!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.1: Создаем защищаемое приложение</title>
+</head>
+
+<body>
+ <h1>Шаг 1.1: Создаем защищаемое приложение</h1>
+
+ <p>Первым шагом будет создание приложения. Это будет простое
+ приложение, без интерфейса пользователя и каких-либо серьезных
+ возможностей. Нашей задачей будет передать системе лицензирования
+ серийный номер и получить от нее ответ.</p>
+ <pre class="code">#include &lt;windows.h&gt;
+#include &lt;stdio.h&gt;
+
+bool is_registered(const char *serial)
+{
+ return serial &amp;&amp; serial[0] == 'X';
+}
+
+int main(int argc, char **argv)
+{
+ char *serial = "Xserialnumber"; // зададим номер непосредственно в коде для простоты
+ if (!is_registered(serial))
+ {
+ printf("please register!\n");
+ return 0;
+ }
+ printf("We are registered.\n");
+ return 0;
+}
+</pre>
+
+ <p>Программа реализует очень простую схему проверки серийного
+ номера. Функция <strong>is_registered()</strong> сравнивает
+ первую букву номера с 'Х' и считает номер корректным в случае
+ совпадения. Для некорректного номера выдается просьба о
+ регистрации, а в случае правильного номера выводится сообщение
+ "We are registered."</p>
+
+ <p><a href="step12_code.htm">Следующим шагом</a> будет добавление
+ кода проверки серийного номера на основе системы лицензирования
+ VMProtect.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step12_code.htm b/help/ru/manager/usage/step12_code.htm
new file mode 100644
index 0000000..75bad46
--- /dev/null
+++ b/help/ru/manager/usage/step12_code.htm
@@ -0,0 +1,105 @@
+<!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.2: Добавляем код проверки лицензии</title>
+</head>
+
+<body>
+ <h1>Шаг 1.2: Добавляем код проверки лицензии</h1><strong>Подключаем
+ VMProtect SDK</strong>
+
+ <p>Если вы этого еще не сделали, то сейчас самое время подключить
+ к проекту VMProtect SDK. SDK это три файла: заголовочный файл
+ (VMProtectSDK.h), файл библиотеки (VMProtectSDK32.lib) и dll-файл
+ с реализацией (VMProtectSDK32.dll). Для 64-битной платформы есть
+ отдельные реализации библиотеки и dll-файла.</p>
+
+ <p>Помещаем dll-файл в рабочий каталог нашего приложения,
+ файл заголовков и библиотечный файл - рядом с исходниками, включаем
+ файл заголовков в основной файл:</p>
+ <pre class="code">#include &lt;windows.h&gt;
+#include &lt;stdio.h&gt;
+#include "VMProtectSDK.h"
+</pre>
+
+ <p>Собираем проект и убеждаемся, что он компилируется, запускается
+ и работает, как и раньше. Система лицензирования пока еще не
+ активна.</p><strong>Подаем серийный номер в систему
+ лицензирования</strong>
+
+ <p>Теперь непосредственно после строки с серийным номером добавим
+ вызов функции SDK системы лицензирования:</p>
+ <pre class="code">char *serial = "Xserialnumber"; // зададим номер непосредственно в коде для простоты
+int res = VMProtectSetSerialNumber(serial);
+printf("res = 0x%08X\n", res);
+</pre>
+
+ <p>Если после этого программа будет завершаться с ошибкой об
+ отсутствии dll-файла, убедитесь, что вы положили соответствующий
+ DLL-файл в рабочий каталог нашего приложения. В случае успешного
+ запуска, вы должны увидеть сообщение:</p>
+ <pre class="code">res = 0x00000002
+</pre>
+
+ <p>Число 2 соответствует флагу SERIAL_STATE_FLAG_INVALID,
+ <a href="api.htm">описанному в API</a>. Т.е. система
+ лицензирования посчитала наш ключ некорректным, что вполне
+ логично, т.к. мы до сих пор не "объяснили" системе лицензирования,
+ какие ключи считать правильными, а какие - нет.</p><strong>Задаем
+ "правильный" серийный номер</strong>
+
+ <p>В тестовом режиме система лицензирования анализирует файл
+ VMProtectLicense.ini, и реагирует на вызовы функций согласно
+ указанным там настройкам. Подробно файл разбирается в следующих
+ шагах, а здесь мы просто создадим такой файл и поместим туда
+ следующий текст:</p>
+ <pre class="code">[TestLicense]
+AcceptedSerialNumber=Xserialnumber
+</pre>
+
+ <p>Запустим нашу программу еще раз. Если вы снова получили код
+ ошибки "2", то убедитесь, что ini-файл находится в рабочем
+ каталоге приложения. В этот раз вы должны получить результат "0".
+ Признак того, что система лицензирования приняла и одобрила
+ серийный номер. Теперь мы можем убрать функцию
+ <strong>is_registered()</strong> - проверкой серийного номера
+ займется система лицензирования:</p>
+ <pre class="code">#include &lt;windows.h&gt;
+#include &lt;stdio.h&gt;
+#include "VMProtectSDK.h"
+
+int main(int argc, char **argv)
+{
+ char *serial = "Xserialnumber"; // зададим номер непосредственно в коде для простоты
+
+ int res = VMProtectSetSerialNumber(serial);
+ printf("res = 0x%08X\n", res);
+
+ if (res)
+ {
+ printf("please register!\n");
+ return 0;
+ }
+ printf("We are registered.\n");
+ return 0;
+}
+</pre><br />
+ <a href="step13_flags.htm">Следующий шаг</a>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step13_flags.htm b/help/ru/manager/usage/step13_flags.htm
new file mode 100644
index 0000000..a392b38
--- /dev/null
+++ b/help/ru/manager/usage/step13_flags.htm
@@ -0,0 +1,96 @@
+<!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.3: Получаем флаги состояния серийного номера</title>
+</head>
+
+<body>
+ <h1>Шаг 1.3: Получаем флаги состояния серийного
+ номера</h1><strong>Удобная функция для печати флагов</strong>
+
+ <p>Первым делом добавим в наш файл одну удобную функцию, которая
+ будет печатать в человеческом виде значения флагов состояния
+ серийного номера. Код функции приведен ниже:</p>
+ <pre class="code">#define PRINT_HELPER(state, flag) if (state &amp; flag) printf("%s ", #flag)
+void print_state(INT state)
+{
+ if (state == 0)
+ {
+ printf("state = 0\n");
+ return;
+ }
+
+ printf("state = ");
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_CORRUPTED);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_INVALID);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_BLACKLISTED);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_DATE_EXPIRED);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_RUNNING_TIME_OVER);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_BAD_HWID);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED);
+ printf("\n");
+}
+</pre>
+
+ <p>Несмотря на свой размер, функция очень простая - она
+ последовательно проверяет все битовые флаги и печатает те, что
+ присутствуют в переменной состояния. Заменим
+ <strong>printf</strong> после проверки номера на вызов
+ <strong>print_state</strong>, заодно временно поправим серийный
+ номер, который подается в систему лицензирования:</p>
+ <pre class="code">char *serial = "Xserialnumber1"; // зададим номер непосредственно в коде для простоты
+int res = VMProtectSetSerialNumber(serial);
+print_state(res);
+</pre>
+
+ <p>Если запустить эту программу, то на консоль выведется
+ следующее:</p>
+ <pre class="code">state = SERIAL_STATE_FLAG_INVALID
+please register!
+</pre>
+
+ <p>Вернем теперь старый серийный номер, убрав "1", и запустим
+ программу еще раз:</p>
+ <pre class="code">state = 0
+We are registered.
+</pre>
+
+ <p>Теперь, когда мы можем видеть флаги состояние серийного
+ номера, перейдем к получению флагов и данных из серийного
+ номера.</p><strong>Получение состояния номера</strong>
+
+ <p>Состояние номера можно получить тремя способами: вызвав
+ <strong>VMProtectSetSerialNumber()</strong>, вызвав
+ <strong>VMProtectGetSerialNumberState()</strong> и вызвав
+ <strong>VMProtectGetSerialNumberData()</strong> - флаги состояния
+ будут помещены в одно из полей структуры. Каждый из методов
+ предназначен для использования в разное время. Первая проверка
+ серийного номера происходит непосредственно при его установке. В
+ этот момент нужно отсекать некорректные номера, номера с истекшим
+ сроком действия, номера из черного списка и т.п. Некоторые
+ ограничения - скажем, максимальное время работы продукта или срок
+ действия номера, имеет смысл проверять и в процессе работы
+ программы. Тут оптимально воспользоваться простым и быстрым
+ методом <strong>VMProtectGetSerialNumberState()</strong>, а в
+ случае, если нужно получить подробную информацию о данных в
+ серийном номере, можно использовать более мощную функцию
+ <strong>VMProtectGetSerialNumberData()</strong>.</p><br />
+ <a href="step14_name.htm">Следующий шаг</a>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step14_name.htm b/help/ru/manager/usage/step14_name.htm
new file mode 100644
index 0000000..c6b6759
--- /dev/null
+++ b/help/ru/manager/usage/step14_name.htm
@@ -0,0 +1,53 @@
+<!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.4: Получаем имя и e-mail пользователя</title>
+</head>
+
+<body>
+ <h1>Шаг 1.4: Получаем имя и e-mail пользователя</h1>
+
+ <p>Начнем с простого: получим из серийного номера имя и e-mail
+ пользователя (часто показываются в окне About). Для этого нам
+ придется прописать их в ini-файл. Добавим еще две строчки к нашим
+ двум:</p>
+ <pre class="code">[TestLicense]
+AcceptedSerialNumber=Xserialnumber
+UserName=John Doe
+EMail=john@doe.com
+</pre>
+
+ <p>А в самой программе, в случае успешной регистрации, добавим
+ получение этих данных и вывод их на экран:</p>
+ <pre class="code">VMProtectSerialNumberData sd = {0};
+VMProtectGetSerialNumberData(&amp;sd, sizeof(sd));
+printf("name = %ls,\ne-mail = %ls\n", sd.wUserName, sd.wEMail);
+</pre>
+
+ <p>Структура содержит данные в UNICODE, поэтому в
+ <strong>printf()</strong> использованы спецификаторы %ls вместо %s.
+ Программа должна вывести на экран текст:</p>
+ <pre class="code">state = 0
+We are registered.
+name = John Doe,
+e-mail = john@doe.com
+</pre><br />
+ <a href="step15_exp.htm">Следующий шаг</a>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step15_exp.htm b/help/ru/manager/usage/step15_exp.htm
new file mode 100644
index 0000000..19169c7
--- /dev/null
+++ b/help/ru/manager/usage/step15_exp.htm
@@ -0,0 +1,59 @@
+<!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.5: Проверяем срок действия серийного номера</title>
+</head>
+
+<body>
+ <h1>Шаг 1.5: Проверяем срок действия серийного номера</h1>
+
+ <p>Поместите в ini-файл строчку вида ExpDate=YYYYMMDD - например,
+ такую:</p>
+ <pre class="code">ExpDate=20000101
+</pre>
+
+ <p>Важно, чтобы дата, указанная в строке, уже прошла. Т.е.
+ максимум - вчера. Запустив программу, вы увидите следующее:</p>
+ <pre class="code">state = SERIAL_STATE_FLAG_DATE_EXPIRED
+please register!
+</pre>
+
+ <p>Добавим получение дополнительной информации перед выходом с
+ сообщением "please register":</p>
+ <pre class="code">if (res)
+{
+ VMProtectSerialNumberData sd = {0};
+ VMProtectGetSerialNumberData(&amp;sd, sizeof(sd));
+ printf("exp. date: y = %d, m = %d, d = %d\n", sd.dtExpire.wYear, sd.dtExpire.bMonth, sd.dtExpire.bDay);
+ printf("please register!\n");
+ return 0;
+}
+</pre>
+
+ <p>Повторный запуск приложения даст нам больше подробностей:</p>
+ <pre class="code">state = SERIAL_STATE_FLAG_DATE_EXPIRED
+exp. date: y = 2000, m = 1, d = 1
+please register!
+</pre>
+
+ <p>Удалите из ini-файла строку ExpDate=..., чтобы она не мешала
+ нам в дальнейшем.</p><br />
+ <a href="step16_time.htm">Следующий шаг</a>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step16_time.htm b/help/ru/manager/usage/step16_time.htm
new file mode 100644
index 0000000..8ccd5d6
--- /dev/null
+++ b/help/ru/manager/usage/step16_time.htm
@@ -0,0 +1,79 @@
+<!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.6: Ограничиваем время работы программы</title>
+</head>
+
+<body>
+ <h1>Шаг 1.6: Ограничиваем время работы программы</h1>
+
+ <p>Вы можете ограничить время работы программы с момента запуска.
+ Это может быть полезно для демонстрационных целей: выдается
+ полноценный серийный номер, однако программа работает не более
+ пяти минут. Система лицензирования не закрывает такую программу
+ принудительно по истечении указанного времени, а лишь уведомляет
+ об окончании времени выставлением флага состояния. Зададим
+ ограничение времени работы в одну минуту, добавив в ini-файл
+ строчку:</p>
+ <pre class="code">TimeLimit=1
+</pre>
+
+ <p>Модифицируем программу следующим образом:</p>
+ <pre class="code">int main(int argc, char **argv)
+{
+ char *serial = "Xserialnumber"; // зададим номер непосредственно в коде для простоты
+
+ int res = VMProtectSetSerialNumber(serial);
+ print_state(res);
+ if (res) return 0;
+
+ VMProtectSerialNumberData sd = {0};
+ VMProtectGetSerialNumberData(&amp;sd, sizeof(sd));
+ printf("I will run for %d minute(s)\n", sd.bRunningTime);
+ print_state(VMProtectGetSerialNumberState());
+ Sleep(60 * 1000 * sd.bRunningTime);
+ printf("After %d minute(s):\n", sd.bRunningTime);
+ print_state(VMProtectGetSerialNumberState());
+
+ return 0;
+}
+</pre>
+
+ <p>Программа выводит состояние серийного номера в момент старта,
+ потом считывает максимальное время работы, ждет, пока оно пройдет
+ и выводит состояние номера еще раз. Для одной минуты мы получим
+ следующий результат:</p>
+ <pre class="code">state = 0
+I will run for 1 minute(s)
+state = 0
+After 1 minute(s):
+state = SERIAL_STATE_FLAG_RUNNING_TIME_OVER
+</pre>
+
+ <p>Защищаемая программа должна анализировать состояние серийного
+ номера с определенной периодичностью и завершить свою работу в
+ случае появления такого флага. Система лицензирования не делает
+ этого автоматически, т.к. программе может требоваться освободить
+ какие-то ресурсы, записать данные в файл и т.д. Также программа
+ может не завершаться по истечении данного времени, а переходить в
+ более ограниченный режим работы. Система лицензирования оставляет
+ эти вопросы на усмотрение разработчика.</p><br />
+ <a href="step17_maxbuild.htm">Следующий шаг</a>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step17_maxbuild.htm b/help/ru/manager/usage/step17_maxbuild.htm
new file mode 100644
index 0000000..d76c271
--- /dev/null
+++ b/help/ru/manager/usage/step17_maxbuild.htm
@@ -0,0 +1,85 @@
+<!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>
diff --git a/help/ru/manager/usage/step18_blacklist.htm b/help/ru/manager/usage/step18_blacklist.htm
new file mode 100644
index 0000000..f0a1eab
--- /dev/null
+++ b/help/ru/manager/usage/step18_blacklist.htm
@@ -0,0 +1,64 @@
+<!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.8: Номера из "черного списка"</title>
+</head>
+
+<body>
+ <h1>Шаг 1.8: Номера из "черного списка"</h1>
+
+ <p>Номер, помеченный в VMProtect как "заблокированный", больше не
+ должен приниматься системой лицензирования. При очередной защите
+ приложения VMProtect запишет в защищаемый файл хеш от номеров
+ черного списка, вследствие чего система лицензирования в этом приложении откажет при попытке
+ установить такой номер.</p>
+
+ <p>Сократим до минимума код функции <strong>main()</strong>:</p>
+ <pre class="code">int main(int argc, char **argv)
+{
+ char *serial = "Xserialnumber"; // зададим номер непосредственно в коде для простоты
+
+ int res = VMProtectSetSerialNumber(serial);
+ print_state(res);
+
+ return 0;
+}
+</pre>
+
+ <p>Запустим программу и убедимся, что система лицензирования
+ принимает наш серийный номер:</p>
+ <pre class="code">state = 0
+</pre>
+
+ <p>Теперь занесем наш номер в черный список с точки зрения
+ системы лицензирования. Для этого в ini-файл добавим строку:</p>
+ <pre class="code">BlackListedSerialNumber=Xserialnumber
+</pre>
+
+ <p>И снова запускаем программу:</p>
+ <pre class="code">state = SERIAL_STATE_FLAG_BLACKLISTED
+</pre>
+
+ <p>Сообщать ли пользователю о занесении его номера в черный список,
+ или просто сообщить, что номер неверный - оставлено на усмотрение
+ разработчика. Система лицензирования лишь сообщает программе о
+ факте использования заблокированного номера.</p><br />
+ <a href="step19_hwid.htm">Следующий шаг</a>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step19_hwid.htm b/help/ru/manager/usage/step19_hwid.htm
new file mode 100644
index 0000000..354206b
--- /dev/null
+++ b/help/ru/manager/usage/step19_hwid.htm
@@ -0,0 +1,123 @@
+<!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>
diff --git a/help/ru/manager/usage/step1A_userdata.htm b/help/ru/manager/usage/step1A_userdata.htm
new file mode 100644
index 0000000..15fc5de
--- /dev/null
+++ b/help/ru/manager/usage/step1A_userdata.htm
@@ -0,0 +1,76 @@
+<!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.10: Пользовательские данные</title>
+</head>
+
+<body>
+ <h1>Шаг 1.10: Пользовательские данные</h1>
+
+ <p>Серийный номер может содержать до 255 байт произвольных
+ данных, которые система лицензирования без изменений передает
+ вызывающей программе. Это может быть какая-то дополнительная
+ информация о продаже, данные, без которых не будет работать
+ полная версия, или еще что-нибудь. Изменим функцию
+ <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) return 0;
+
+ VMProtectSerialNumberData sd = {0};
+ VMProtectGetSerialNumberData(&amp;sd, sizeof(sd));
+ printf("Serial number has %d byte(s) of data\n", sd.nUserDataLength);
+ for (int i = 0; i &lt; sd.nUserDataLength; i++)
+ printf("%02X ", sd.bUserData[i]);
+ printf("\n");
+ return 0;
+}
+</pre>
+
+ <p>Ini-файл при этом сократим до такого вида:</p>
+ <pre class="code">[TestLicense]
+AcceptedSerialNumber=Xserialnumber
+</pre>
+
+ <p>Теперь запустим программу и убедимся, что наш серийный номер
+ подходит, но не содержит никаких данных:</p>
+ <pre class="code">state = 0
+Serial number has 0 byte(s) of data
+</pre>
+
+ <p>Чтобы добавить пользовательские данные в серийный номер,
+ необходимо создать в ini-файле переменную UserData и присвоить ей
+ строчку из HEX-символов. Символы должны идти парами, т.е. длина
+ строки должна быть кратна 2. Строка может быть, например,
+ такой:</p>
+ <pre class="code">UserData=010203A0B0C0D0E0
+</pre>
+
+ <p>В этом случае при запуске программы мы получим следующий
+ результат:</p>
+ <pre class="code">state = 0
+Serial number has 8 byte(s) of data
+01 02 03 A0 B0 C0 D0 E0
+</pre><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step21_src.htm b/help/ru/manager/usage/step21_src.htm
new file mode 100644
index 0000000..65a2ec7
--- /dev/null
+++ b/help/ru/manager/usage/step21_src.htm
@@ -0,0 +1,109 @@
+<!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>Шаг 2.1: Создаем новое защищенное приложение</title>
+</head>
+
+<body>
+ <h1>Шаг 2.1: Создаем новое защищенное приложение</h1>
+
+ <p>Если на первом этапе мы создавали несколько разных тестовых
+ приложений для изучения API системы лицензирования, то на втором этапе
+ приложение будет одно. Оно также будет консольным и в нем будет
+ функция <strong>foo()</strong>, которая может работать только в
+ зарегистрированной версии. Вот код нашего тестового
+ приложения:</p>
+ <pre class="code">#include &lt;windows.h&gt;
+#include &lt;stdio.h&gt;
+#include "VMProtectSDK.h"
+
+#define PRINT_HELPER(state, flag) if (state &amp; flag) printf("%s ", #flag)
+void print_state(INT state)
+{
+ if (state == 0)
+ {
+ printf("state = 0\n");
+ return;
+ }
+
+ printf("state = ");
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_CORRUPTED);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_INVALID);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_BLACKLISTED);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_DATE_EXPIRED);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_RUNNING_TIME_OVER);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_BAD_HWID);
+ PRINT_HELPER(state, SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED);
+ printf("\n");
+}
+
+char *read_serial(const char *fname)
+{
+ FILE *f;
+ if (0 != fopen_s(&amp;f, fname, "rb")) return NULL;
+ fseek(f, 0, SEEK_END);
+ int s = ftell(f);
+ fseek(f, 0, SEEK_SET);
+ char *buf = new char[s + 1];
+ fread(buf, s, 1, f);
+ buf[s] = 0;
+ fclose(f);
+ return buf;
+}
+
+// метод foo() очень короткий, но он нам нужен в виде отдельной функции
+// поэтому мы попросим компилятор не делать его inline
+__declspec(noinline) void foo()
+{
+ printf("I'm foo!\n");
+}
+
+int main(int argc, char **argv)
+{
+ char *serial = read_serial("serial.txt");
+ int res = VMProtectSetSerialNumber(serial);
+ delete [] serial;
+ if (res)
+ {
+ printf("serial number is bad\n");
+ print_state(res);
+ return 0;
+ }
+ printf("serial number is correct, calling foo()\n");
+ foo();
+ printf("done\n");
+ return 0;
+}
+</pre>
+
+ <p>Скомпилируем программу без отладочной информации, но в
+ настройках линкера попросим создать MAP-файл, который потребуется
+ для работы VMProtect. При запуске программы мы должны увидеть
+ следующий текст:</p>
+ <pre class="code">serial number is bad
+state = SERIAL_STATE_FLAG_INVALID
+</pre>
+
+ <p>В настоящий момент система лицензирования все еще работает в
+ тестовом режиме, т.к. файл еще не был обработан VMProtect'ом и в
+ него не был внедрен модуль лицензирования. На <a href=
+ "step22_vmp.htm">следующем шаге</a> мы создадим проект VMProtect
+ и попробуем защитить нашу программу.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step22_vmp.htm b/help/ru/manager/usage/step22_vmp.htm
new file mode 100644
index 0000000..bf0ac9b
--- /dev/null
+++ b/help/ru/manager/usage/step22_vmp.htm
@@ -0,0 +1,42 @@
+<!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>Шаг 2.2: Создаем проект защиты в VMProtect</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Шаг 2.2: Создаем проект защиты в VMProtect</h1>
+
+ <p>Теперь, когда тестовая программа готова, скомпилирована и
+ рядом с ней находится ее MAP-файл, мы можем запустить VMProtect
+ Ultimate и открыть исполняемый файл. Нам нужно будет добавить в
+ проект две функции: _main (так Visual Studio переименовала нашу
+ функцию main()) и foo(). Обе функции видны в списке функций в
+ VMProtect в разделе "Функции".</p>
+
+ <!-- <p class="c1"><br /><img src="../../images/real_project_functions.png" alt="Дерево проекта" /></p> -->
+
+ <p>Далее необходимо инициализировать систему лицензирования.
+ Перейдите на вкладку "Лицензии" и создайте пару кючей длиной 2048
+ бит.</p><br />
+ <a href="step23_product.htm">Следующий шаг</a>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step23_product.htm b/help/ru/manager/usage/step23_product.htm
new file mode 100644
index 0000000..bf5784b
--- /dev/null
+++ b/help/ru/manager/usage/step23_product.htm
@@ -0,0 +1,70 @@
+<!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>Шаг 2.3: Первый запуск защищенного продукта</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Шаг 2.3: Первый запуск защищенного продукта</h1>
+
+ <p>Система лицензирования инициализирована, так что мы можем
+ попробовать скомпилировать проект VMPrtoect и запустить
+ защищенный файл. Запустив его из командной строки мы получим
+ следующее сообщение:</p>
+ <pre class="code">C:\test&gt;dummy_app.vmp.exe
+serial number is bad
+state = SERIAL_STATE_FLAG_INVALID
+</pre>
+
+ <p>Запустив программу depends.exe, мы можем убедиться, что наш
+ защищенный файл более не связан с библиотекой VMProtectSDK.dll, а
+ значит модуль лицензирования встроен в приложение. Список
+ используемых DLL можно посмотреть и в VMProtect, открыв
+ защищенный файл и выбрав из раздела "Свойства" секцию "Импорты".</p>
+
+ <p><img src="../../images/depends.png" /></p>
+
+ <p>Наша защищаемая программа читает серийный номер из файла
+ serial.txt. Поскольку этого файла сейчас нет, то модулю лицензирования
+ подается пустой номер, который также не считается корректным.
+ Перейдем на закладку "лицензии" и сгенерируем серийный номер.
+ Подробно эта процедура описана <a href=
+ "../licenses.htm">здесь</a>, мы создадим самый простой серийный
+ номер без каких-либо ограничений.</p>
+
+ <p><img src="../../images/project_add_license.png" /></p>
+
+ <p>Затем скопируем серийный номер (в свойствах лицензии выделим поле
+ "Серийный номер" и нажмем Ctrl+C), создадим рядом с
+ защищенным приложением файл serial.txt и вставим туда серийный
+ номер. После запуска программы мы увидим следующее:</p>
+ <pre class="code">C:\test&gt;dummy_app.vmp.exe
+serial number is correct, calling foo()
+I'm foo
+done
+</pre>
+
+ <p>Система лицензирования проверила серийный номер и посчитала
+ его корректным. На <a href="step24_test.htm">следующем шаге</a> мы
+ попробуем применить некоторые ограничения и посмотрим что из
+ этого выйдет.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step24_test.htm b/help/ru/manager/usage/step24_test.htm
new file mode 100644
index 0000000..31f5ed8
--- /dev/null
+++ b/help/ru/manager/usage/step24_test.htm
@@ -0,0 +1,90 @@
+<!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>Шаг 2.4: Тестируем результат</title>
+</head>
+
+<body>
+ <h1>Шаг 2.4: Тестируем результат</h1><strong>Срок действия
+ серийного номера</strong>
+
+ <p>Создадим еще один серийный номер с ограничением срока
+ действия - скажем, 2005-м годом. Эта дата уже прошла и наш номер
+ должен быть недействительным. Перейдите на закладку "Лицензии" и
+ нажмите кнопку "Добавить лицензию". В появившемся окне поставьте
+ галочку "Срок годности" и введите "30 сентября 2005 года".
+ Создайте номер, скопируйте его и поместите в файл seral.txt,
+ после чего запустите программу:</p>
+ <pre class="code">C:\test&gt;dummy_app.vmp.exe
+serial number is bad
+state = SERIAL_STATE_FLAG_DATE_EXPIRED
+</pre>
+
+ <p>Модуль лицензирования вернул флаг "срок действия номера
+ закончен". Вернем рабочий номер обратно в файл serial.txt и
+ убедимся, что его модуль лицензирования примет без проблем.</p>
+ <pre class="code">C:\test&gt;dummy_app.vmp.exe
+serial number is correct, calling foo()
+I'm foo
+done
+</pre><strong>Занесение номера в черный список</strong>
+
+ <p>Предположим, что наш "хороший" серийный номер выложен в
+ Интернет. Нам необходимо его заблокировать, чтобы в следующих
+ версиях программы он уже не работал. Для этого мы выбираем его в
+ списке номеров и нажимаем кнопку "Заблокировать". Сам факт
+ нажатия кнопки не блокирует серийный номер в защищенном
+ приложении, однако после повторной защиты файла, он откажется
+ принимать этот серийный номер. Проверим. Если сейчас запустить
+ нашу программу, то она примет заблокированный номер без проблем,
+ т.к. это старая версия программы и она еще не знает о
+ блокировке:</p>
+ <pre class="code">C:\test&gt;dummy_app.vmp.exe
+serial number is correct, calling foo()
+I'm foo
+done
+</pre>
+
+ <p>Сделаем копию нашей программы и назовем ее
+ "dummy_app1.vmp.exe", а после этого перейдем в VMProtect и
+ повторно защитим наше приложение, после чего запустим новую
+ версию программы:</p>
+ <pre class="code">C:\test&gt;dummy_app.vmp.exe
+serial number is bad
+state = SERIAL_STATE_FLAG_BLACKLISTED
+</pre>
+
+ <p>Теперь для сравнения еще раз запустим старую версию
+ программы:</p>
+ <pre class="code">C:\test&gt;dummy_app1.vmp.exe
+serial number is correct, calling foo()
+I'm foo
+done
+</pre>
+
+ <p>Старая версия ничего не знает о блокировании номера и
+ продолжает работать как и раньше. </p><br />
+ <br /><p>На <a href=
+ "step25_codelock.htm">последнем шаге</a> мы попробуем привязать
+ выполняемый код к серийному номеру. Перед этим разблокируйте
+ серийный номер и перезащитите приложение в VMProtect, чтобы оно
+ снова принимало наш серийный номер. Или создайте новую
+ лицензию.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/manager/usage/step25_codelock.htm b/help/ru/manager/usage/step25_codelock.htm
new file mode 100644
index 0000000..8cbe5c4
--- /dev/null
+++ b/help/ru/manager/usage/step25_codelock.htm
@@ -0,0 +1,144 @@
+<!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>Шаг 2.5. Привязка кода к серийному номеру</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ p.c2 {color:red;}
+ span.c1 {background-color:yellow;}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Шаг 2.5. Привязка кода к серийному номеру</h1>
+
+ <p>Одним из наиболее популярных способов взлома программ является
+ поиск проверки серийного номера и последующего условного
+ перехода. Если номер корректен, то ход выполнения программы идет
+ по одной ветке, если некорректен, то по другой. Хакер находит
+ этот переход и заменяет его на безусловный переход на
+ "правильную" ветку. Давайте "взломаем" таким образом нашу
+ тестовую программу. На уровне исходников, конечно же. "Отключим"
+ условный переход:</p>
+ <pre class="code">char *serial = read_serial("serial.txt");
+int res = VMProtectSetSerialNumber(serial);
+delete [] serial;
+if (<span class="c1">false &amp;&amp;</span> res)
+{
+</pre>
+
+ <p>Теперь наша программа примет любой серийный номер и будет
+ работать как ни в чем не бывало. Безусловно, если файл защищен
+ VMProtect, то даже опытному хакеру потребуется не один месяц,
+ чтобы найти и исправить этот переход так, как сделали это мы. А с
+ учетом того, что правильно защищенная программа проверяет
+ серийный номер не в одном месте и не всегда, то даже такая
+ простая проверка уже достаточно надежна. Однако мы пойдем
+ дальше.</p><strong>Привяжем код к серийному номеру</strong>
+
+ <p class="c2"><strong>Внимание!</strong> демо-версия VMProtect
+ имеет ограничение на количество обрабатываемых функций:
+ обрабатывается только одна функция. Поэтому в случае
+ использования демо-версии, необходимо включать в проект только
+ функцию foo(), т.к. в противном случае демо-версия VMProtect
+ может выбрать для защиты функцию main() и привязка кода к
+ серийному номеру не сработает.</p>
+
+ <p>Система лицензирования VMProtect позволяет привязать код одной
+ или нескольких функций к серийному номеру так, что они не будут
+ работать без корректного номера. Тело функции виртуализируется,
+ потом шифруется и может быть расшифровано только при наличии
+ корректного серийного номера. То есть даже если хакер найдет и
+ исправит условный переход в коде проверки номера, функции,
+ привязанные к номеру, все равно не будут работать. Давайте
+ попробуем. В VMProtect в разделе "Функции" выберем функцию <strong>foo()</strong> и в
+ правой панели изменим значение опции "Привязать к серийному номеру" на "Да".</p>
+
+ <p><img src="../../images/lock_to_serial.png" /></p>
+
+ <p>После этого защитим наше приложение. С учетом
+ того, что оно "взломано", поместим в файл serial.txt произвольный
+ текст и запустим приложение. В консоли появится текст:</p>
+ <pre class="code">C:\test&gt;dummy_app.vmp.exe
+serial number is correct, calling foo()
+</pre>
+
+ <p>То есть хакер "исправил" нужный условный переход и программа
+ пошла по "правильной" ветке. Однако в момент вызова
+ <strong>foo()</strong> программа выводит сообщение:</p>
+
+ <p><img src="../../images/codelock_error.png" /></p>
+
+ <p>Так как мы привязали функцию <strong>foo()</strong> к
+ серийному номеру, а у хакера его нет, то при попытке расшифровать
+ код функции модуль лицензирования выдал сообщение о невозможности
+ продолжить выполнение программы. После нажатия кнопки "ОК"
+ программа завершится и в консоли мы не увидим строчки
+ "done".</p><strong>Что привязывать к серийному номеру?</strong>
+
+ <p>Привязывать к серийному номеру имеет смысл те функции, которые
+ вызываются только в зарегистрированной версии программы. Так как
+ привязка возможна только при использовании виртуализации, то
+ необходимо принимать во внимание возможное падение
+ производительности. Скажем, если текстовый редактор не позволяет
+ сохранять результаты своей работы в демо-версии, то к серийному
+ номеру можно привязать функцию сохранения документа. Если эта
+ функция вызывает ряд других в процессе работы, то их привязывать
+ уже не обязательно, так как без основной функции от них будет
+ немного толку.</p>
+
+ <p>Также необходимо помнить, что вызов привязанной функции без
+ серийного номера приведет к завершению работы программы без
+ возможности сохранения результатов работы, поэтому тщательно
+ тестируйте защищаемую программу, чтобы она не позволяла вызвать
+ такие функции в демо-режиме. В примере с текстовым редактором
+ убедитесь, что в демо-режиме пункт меню "Сохранить" всегда
+ неактивен, что комбинация Ctrl+S не срабатывает и что при
+ закрытии программы также не предлагается сохранить изменения. В
+ противном случае пользователь может составить негативное мнение о
+ вашей программе.</p><strong>Привязка к серийному номеру и
+ нерабочие номера</strong>
+
+ <p>При вызове функции <strong>VMProtectSetSerialNumber()</strong>
+ модуль лицензирования проверяет переданный серийный номер и
+ зашифрованные участки кода будут выполняться только в том случае,
+ если на момент проверки серийный номер был полностью корректным -
+ не занесенным в черный список, с правильным идентификатором
+ оборудования, с неистекшим сроком годности и т.п. В этом случае все
+ зашифрованные процедуры будут выполняться до завершения работы
+ приложения или до нового вызова
+ <strong>VMProtectSetSerialNumber()</strong>.</p>
+
+ <p>Некоторые ограничения могут "сработать" в процессе выполнения
+ программы: например, может истечь время работы программы или
+ окончится срок действия серийного номера. В этом случае модуль
+ лицензирования продолжит расшифровывать и выполнять функции,
+ привязанные к серийному номеру. Это делается потому, что
+ защищенному приложению будет сложно отследить момент срабатывания
+ ограничений и соответствующим образом изменить модель своего
+ поведения (заблокировать пункты меню и т.п). Если модуль
+ лицензирования неожиданно для приложения перестанет выполнять
+ привязанные к серийному номеру участки кода, это с большой
+ вероятностью приведет к неработоспособности приложения. Поэтому
+ все решается в момент установки серийного номера и именно в этот
+ момент определяется режим, в котором будет работать
+ приложение.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/menu_edit.htm b/help/ru/menu_edit.htm
new file mode 100644
index 0000000..db8c5c6
--- /dev/null
+++ b/help/ru/menu_edit.htm
@@ -0,0 +1,61 @@
+<!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>Меню "Правка"</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ div.c2 {text-align: center}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Меню "Правка"</h1>
+ <br /><img src=
+ "images/menu_edit.png" alt="Image" />
+
+ <ul>
+ <li><strong>Отменить</strong> - отменить последние
+ исправления;</li>
+
+ <li><strong>Повторить</strong> - восстановить последние
+ отмененные исправления;</li>
+
+ <li><strong>Вырезать</strong> - переместить выделенные данные в
+ буфер обмена;</li>
+
+ <li><strong>Копировать</strong> - скопировать выделенные данные
+ в буфер обмена;</li>
+
+ <li><strong>Вставить</strong> - вставить из буфера обмена;</li>
+
+ <li><strong>Удалить</strong> - удалить выделенный элемент;</li>
+
+ <li><strong>Поиск</strong> - поиск фрагмента текста
+ <p><img src="images/expert_find.png" alt="Поиск" /></p>
+ </li>
+
+ <li><a name="Goto" id="Goto"><strong>Перейти на
+ адрес</strong></a> - перейти на заданный адрес защищаемого
+ приложения. Возможен переход на введенный адрес либо на адрес
+ объекта, выбранного в списке "Функции". Возможен также поиск объекта по названию;
+ <p><br /><img src="images/properties_dump_goto.png" alt="Image" /></p>
+ </li>
+ </ul>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/help/ru/menu_file.htm b/help/ru/menu_file.htm
new file mode 100644
index 0000000..761919c
--- /dev/null
+++ b/help/ru/menu_file.htm
@@ -0,0 +1,58 @@
+<!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>Меню "Файл"</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ div.c2 {text-align: center}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Меню "Файл"</h1>
+ <p><img src="images/menu_file.png" /></p>
+
+ <ul>
+ <li><a name="Open" id="Open"><strong>Открыть</strong></a> -
+ выбрать исполняемый файл приложения, которое необходимо
+ защитить, или файл проекта (*.vmp). Можно выбрать файл для открытия из списка ранее защищенных приложений, который отображается в меню Файл. Доступ к функции открытия файлов также
+ возможен с помощью кнопки <img src="images/button_open.png" />
+ на панели инструментов. Нужный исполняемый файл
+ также можно перетащить в окно VMProtect;</li>
+
+ <li><strong>Сохранить проект</strong> - сохранить установки
+ защиты приложения в файл формата "*.vmp". Файл настроек проекта
+ будет сохранен в ту же папку, где находится исполняемый модуль
+ защищаемого приложения. Функция сохранения проекта доступна по
+ кнопке <img src="images/button_save.png" /> на
+ панели инструментов;</li>
+
+ <li><a name="SaveProjectAs" id=
+ "SaveProjectAs"><strong>Сохранить проект как</strong></a> -
+ сохранить файл проекта в файл с новым именем;</li>
+
+ <li><strong>Закрыть</strong> - завершить работу с текущим
+ проектом;</li>
+
+ <li><strong>Выход</strong> - завершить работу с
+ программой.</li>
+ </ul>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/help/ru/menu_help.htm b/help/ru/menu_help.htm
new file mode 100644
index 0000000..f8398ef
--- /dev/null
+++ b/help/ru/menu_help.htm
@@ -0,0 +1,38 @@
+<!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>Меню "Справка"</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ div.c2 {text-align: center}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Меню "Справка"</h1>
+ <p><img src="images/menu_help.png" /></p>
+
+ <ul>
+ <li><strong>Домашняя страница</strong> - перейти на домашнюю страницу VMProtect;</li>
+ <li><strong>Содержание</strong> - открыть справку VMProtect;</li>
+ <li><strong>О программе</strong> - просмотреть основные сведения о программе VMProtect.</li>
+ </ul>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/menu_project.htm b/help/ru/menu_project.htm
new file mode 100644
index 0000000..c0e8582
--- /dev/null
+++ b/help/ru/menu_project.htm
@@ -0,0 +1,66 @@
+<!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>Меню "Проект"</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ div.c2 {text-align: center}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Меню "Проект"</h1>
+ <p><img src="images/menu_project.png" /></p>
+
+ <ul>
+ <li><strong>Добавить функцию</strong> - добавить в список защищаемых объектов новую функцию. Можно задать как точный адрес функции, так и найти нужную функцию поиском по ее имени:
+ <p><img src="images/project_add_function.png"/></p></li>
+ <li><strong>Добавить папку</strong> - добавить папку в проект:
+ <p><img src="images/project_add_folder.png" /></p>
+
+ <p>Использование папок не влияет на защиту находящихся в них
+ объектов, а служит для систематизации отображения защищаемых
+ объектов в дереве проекта. Перемещать объекты в папку можно
+ простым перетаскиванием (drag-n-drop);</p></li>
+
+ <li><strong>Добавить лицензию</strong> - добавить лицензию в проект:
+ <p><img src="images/project_add_license.png" /></p>
+
+ <p>Добавляет новую лицензию пользователя и генерирует лицензионный ключ на основе пользовательских данных: имя покупателя, e-mail, дата, номер заказа и других. Внутрь ключа может быть записана как указанная информация, так и дополнительные ограничения функциональности лицензии: например, число запусков или конечная дата действия ключа.<br />
+ Для добавления лицензии необходимо сначала сгенерировать пару ключей:</p>
+ <p><img src="images/project_generate_keys.png" /></p></li>
+
+ <li><strong>Экспортировать ключ</strong> - экспортирует ключи проекта в выбранный формат <a href="manager/keygen/index.htm">генератора ключей</a>:
+ <p><img src="images/export_keys.png" /></p></li>
+
+ <li><strong>Импортировать</strong> - добавляет к проекту лицензии, импортированные из серийного номера, либо из другого проекта.</li>
+
+ <li><strong>Компилировать</strong> - компилировать защищаемое
+ приложение с текущими параметрами защиты. Для компиляции
+ проекта также можно нажать кнопку <img src="images/button_compilation.png" /> на панели
+ инструментов.</li>
+
+ <li><strong>Выполнить</strong> - запустить защищаемое
+ приложение. Исходный/защищенный исполняемый файл приложения
+ также можно запустить нажатием кнопки <img src="images/button_execute.png" /> на панели
+ инструментов. Нажатие на стрелочку позволяет задать параметры командной строки.</li>
+ </ul>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/help/ru/menu_tools.htm b/help/ru/menu_tools.htm
new file mode 100644
index 0000000..a4473bb
--- /dev/null
+++ b/help/ru/menu_tools.htm
@@ -0,0 +1,41 @@
+<!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>Меню "Инструменты"</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ div.c2 {text-align: center}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+
+ <h1>Меню "Инструменты"</h1>
+
+ <p><img src="images/menu_tools.png" /></p>
+
+ <ul>
+ <li><strong>Водяные знаки</strong> - служит для вызова диалогового окна управления <a href="watermarks.htm">водяными знаками</a>:
+ <p><img src="images/watermarks_setup.png" /></p></li>
+ <li><strong>Настройки</strong> - вызывает диалог настроек программы:
+ <p><img src="images/preferences.png" /></p></li>
+ </ul>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/mode_console.htm b/help/ru/mode_console.htm
new file mode 100644
index 0000000..b2cd6fe
--- /dev/null
+++ b/help/ru/mode_console.htm
@@ -0,0 +1,71 @@
+<!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>Консольная версия</title>
+</head>
+
+<body>
+ <h1>Консольная версия</h1>
+
+ <p>После создания проекта в <a href="main_window.htm">GUI
+ режиме</a> в дальнейшем может использоваться консольная версия
+ (VMProtect_Con.exe), вызов которой осуществляется следующим
+ образом:</p>
+
+ <p><strong>VMProtect_Con Файл [Выходной файл] [-pf Файл проекта]
+ [-sf Файл скрипта] [-lf Файл с параметрами лицензирования] [-bd Дата сборки (yyyy-mm-dd)] [-wm Название водяного знака]
+ [-we]</strong></p>
+
+ <ul>
+ <li><strong>Файл</strong> - имя исполняемого файла, который
+ необходимо защитить (*.exe, *.dll и т.д.), или имя файла
+ проекта (*.vmp). Если в качестве исходного файла указан файл
+ проекта, то имя исполняемого файла будет браться из файла
+ проекта.</li>
+
+ <li><strong>Выходной файл</strong> - имя и путь к защищенному
+ файлу, который должен быть создан после обработки исходного
+ файла. Если параметр не задан, его значение берется из файла
+ проекта.</li>
+
+ <li><strong>Файл проекта</strong> - имя и путь к файлу проекта,
+ созданного в <a href="main_window.htm">GUI режиме</a>. Если
+ параметр не задан, поиск файла проекта *.vmp будет
+ осуществляться в папке с исполняемым файлом.</li>
+
+ <li><strong>Файл скрипта</strong> - имя файла, содержащего
+ <a href="script.htm">скрипт</a>, с помощью которого будет
+ обработан защищаемый файл. Если параметр не задан, будет использоваться скрипт из текущего файла проекта.</li>
+
+ <li><strong>Файл с параметрами лицензирования</strong> - имя файла, содержащего <a href="manager/licenses.htm">параметры лицензирования</a>.
+ Если параметр не задан, будут использовать параметры лицензирования из текущего файла проекта.</li>
+
+ <li><strong>Дата сборки</strong> - дата сборки приложения в формате "yyyy-mm-dd". Если параметр не задан, будет использоваться текущая дата.
+ Дата сборки записывается в защищаемое приложение и используется системой лицензирования при проверке серийных номеров, содержащих поле "<a href="manager/licenses.htm#AddLicense">Максимальная дата сборки</a>".</li>
+
+ <li><strong>Название водяного знака</strong> - название
+ <a href="watermarks.htm">водяного знака</a>, который будет
+ вставлен в защищаемый файл. Если название водяного файла не
+ указано, в защищенный файл будет вставлен водяной знак, который
+ был указан при создании проекта.</li>
+
+ <li><strong>we</strong> - при использовании данного параметра
+ все предупреждения будут отображаться как ошибки.</li>
+ </ul><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/project.htm b/help/ru/project.htm
new file mode 100644
index 0000000..1ca6f53
--- /dev/null
+++ b/help/ru/project.htm
@@ -0,0 +1,34 @@
+<!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>Раздел "Проект"</title>
+</head>
+
+<body>
+ <h1>Раздел "Проект"</h1>
+ <p><img src="images/project_functions.png" /></p>
+
+ Раздел "Проект" содержит следующие секции:
+ <ul><li><a href="project_functions.htm">Функции для защиты</a> - позволяет выбрать объекты для защиты</li>
+ <li><a href="manager/licenses.htm">Лицензии</a> - позволяет управлять лицензиями и серийными номерами</li>
+ <li><a href="project_files.htm">Файлы</a> - позволяет включить в защищаемый EXE файл дополнительные файлы данных или DLL</li>
+ <li><a href="project_script.htm">Скрипт</a> - позволяет расширить возможности защиты за счет использования встроенного скриптового языка на базе LUA</li>
+ <li><a href="project_options.htm">Опции</a> - позволяет настроить параметры защиты приложения</li>
+ </ul>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/project_files.htm b/help/ru/project_files.htm
new file mode 100644
index 0000000..6a7194b
--- /dev/null
+++ b/help/ru/project_files.htm
@@ -0,0 +1,43 @@
+<!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>Секция "Файлы"</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Секция "Файлы"</h1>
+
+ <p>Секция "Файлы" позволяет включить в защищаемый EXE файл
+ необходимые для его работы файлы данных, включая изображения, текстовые ресурсы, а также динамически подгружаемые библиотеки. Все виды данных, включая DLL, в процессе работы защищенного EXE файла будут загружаться из памяти процесса без
+ предварительной записи на диск.</p>
+ <p><img src="images/project_file_protection.png" /></p>
+
+ <p>Кнопка <strong>Добавить файл</strong> на панели инструментов главного окна программы позволяет добавить к защищаемому EXE файлу новый файл. Также можно добавить новый файл с помощью контекстного меню:</p>
+ <p><img src="images/project_file_menu.png" /></p>
+
+ <p>Для изменения свойств выбранного файла, выберите его в списке слева и отредактируйте название, имя файла или дополнительные свойства.</p>
+ <p><img src="images/project_file_settings.png" /></p>
+
+ <p>Чтобы удалить файл из списка защищаемых, щелкните его правой кнопкой и выберите "Удалить", либо просто выделите файл и нажмите Del.</p>
+ <p><img src="images/project_file_delete.png" /></p>
+ <p>Щелкнув правой кнопкой по названию секции можно исключить файл из компиляции. Настройки исключения из компиляции сохраняются в файл проекта.</p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/project_functions.htm b/help/ru/project_functions.htm
new file mode 100644
index 0000000..d5841e9
--- /dev/null
+++ b/help/ru/project_functions.htm
@@ -0,0 +1,134 @@
+<!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>Секция "Функции для защиты"</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ div.c2 {text-align: center}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Секция "Функции для защиты"</h1>
+
+ <p>Секция предназначена для выбора защищаемых функций.</p>
+ <p><img src="images/project_functions.png" /></p>
+ <h3 id="AddFunction">Добавление функции</h3>
+ <p>Для того чтобы добавить новый объект в проект, нажмите кнопку "Добавить функцию" на панели инструментов, либо выберите этот пункт в контекстном меню:</p>
+ <p><img src="images/project_functions_menu.png" /></p>
+ <p>Появится диалог добавления функции:</p>
+ <p><img src="images/project_add_function.png" /></p>
+ <p>Задайте адрес функции или выберите нужную функцию из списка на вкладке "Функции", начав набирать ее имя в строке быстрого поиска. Вы можете добавить сразу несколько функций, используя множественное выделение. Все выделенные функции будут добавлены с выбраными опциями защиты.</p>
+ <p><strong>Опции</strong></p>
+ <ul>
+ <li><a name="CompilationTypes" id=
+ "CompilationTypes"><strong>Тип компиляции</strong></a> -
+ выбрать тип компиляции объекта. Правильный выбор способа защиты
+ от изучения и взлома для каждого защищаемого объекта
+ (процедуры, функции, фрагмента кода) обеспечит оптимальное
+ соотношение между защищенностью кода и его быстродействием.
+ VMProtect позволяет пользователю установить следующие типы
+ компиляции для каждого защищаемого объекта:</li>
+ <ul>
+ <li><strong>Мутация.</strong> Исполняемый код
+ видоизменяется на уровне команд процессора - существующие
+ команды видоизменяются, добавляются различные мусорные
+ команды и т.д. Данный тип компиляции относительно слабо
+ защищает обрабатываемый код от взлома и анализа и главным
+ образом препятствует определению обрабатываемых функций с
+ помощью сигнатурных анализаторов (PEiD+KANAL, IDA+FLIRT и
+ т.д.). Этот тип компиляции целесообразно применять при
+ защите библиотечных функций, так как они, как правило, не
+ нуждаются в защите от взлома и анализа и достаточно будет
+ только изменить их сигнатуры, чтобы взломщик не смог
+ автоматически определить, какие именно библиотеки
+ используются в приложении. При использовании мутации
+ степень защиты от взлома и анализа низкая, скорость
+ исполнения кода высокая.</li>
+
+ <li><strong>Виртуализация.</strong> Исполняемый код
+ переводится в байт-код, исполняемый на виртуальной машине.
+ Данный тип компиляции следует применять для всех критичных
+ участков кода, где помимо противодействия взлому и анализу
+ важна скорость работы. При использовании виртуализации
+ степень защиты от взлома и анализа средняя, скорость
+ исполнения кода средняя.</li>
+
+ <li><strong>Ультра (мутация + виртуализация).</strong>
+ Исполняемый код видоизменяется на уровне команд процессора
+ и уже после этого переводится в байт-код, исполняемый на
+ виртуальной машине. Данный тип компиляции следует применять
+ для всех участков кода, где не важна скорость работы.
+ Степень защиты от взлома и анализа высокая, скорость
+ исполнения кода низкая.</li>
+ </ul>
+
+ <li id="LockToKey"><strong>Привязать к серийному номеру</strong> - при включении данной опции защищенная функция будет <a href="manager/features.htm#lock">недоступна без ввода валидного серийного номера</a>. Таким образом можно, например, ограничивать доступ к определенным функциям приложения в незарегистрированной версии.</li>
+ </ul>
+
+ <p id="Search"><strong>Поиск</strong></p>
+
+ <p>Необходимые объекты можно отыскать по их имени в универсальном быстром поиске:</p>
+ <p><img src="images/project_functions_search.png" /></p>
+
+ <p>В строке поиска можно использовать стандартные символы подстановки:</p>
+ <ul>
+ <li><strong>*</strong> - заменяет группу символов произвольной длины;</li>
+ <li><strong>?</strong> - заменяет любой одиночный символ.</li>
+ </ul>
+
+ <h3 id="AddFolder">Добавление папки</h3>
+ <p>Добавление папки осуществляется с помощью контекстного меню:</p>
+ <p><img src="images/project_functions_menu.png" /></p>
+ <p>Папки используются для группировки защищаемых объектов в
+ дереве проекта, а также для группового изменения параметров
+ защиты (включение в компиляцию, тип компиляции) для всех
+ объектов из этой папки.</p>
+ <p>Задайте имя новой папке:</p>
+ <p><img src="images/project_add_folder.png" /></p>
+
+ <h3>Редактирование объектов</h3>
+ <p>В правой части окна отображается содержимое выбранного
+ объекта. Если в дереве проекта выбран защищаемый объект, то с
+ правой стороны отображается дизассемблированное представление
+ этого объекта:</p>
+
+ <p><img src="images/project_functions_content.png" alt=
+ "Код" /></p>
+ <p>Щелчок правой кнопкой мыши по строчке кода вызывает контекстное меню:</p>
+ <p><img src="images/project_functions_menu3.png" /></p>
+ <ul>
+ <li><a name="ExtAddress" id="ExtAddress"><strong>Внешний
+ адрес</strong></a> - включить выбранный адрес в список <a href=
+ "project_options_external_addresses.htm">внешних адресов</a>;</li>
+
+ <li><strong>Конец функции</strong> - ограничить список
+ команд, которые будут обработаны в процессе компиляции;</li>
+ </ul>
+
+ <p>Если в дереве проекта выбрана папка, то с правой стороны
+ отображается список функций, входящих в эту папку:</p>
+
+ <p><img src="images/project_functions_content2.png" /></p>
+
+ <p>Перемещать функции из папки в папку можно простым
+ перетаскиванием при помощи мыши.</p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/project_options.htm b/help/ru/project_options.htm
new file mode 100644
index 0000000..c60f49e
--- /dev/null
+++ b/help/ru/project_options.htm
@@ -0,0 +1,125 @@
+<!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>Секция "Опции"</title>
+</head>
+
+<body>
+ <h1>Секция "Опции"</h1>
+
+ <p>Секция "Опции" раздела "Проект" предназначена для установки опций защиты:</p>
+ <p><img src="images/project_options.png" /></p>
+
+ <h3>Файл</h3>
+
+ <ul>
+ <li><strong id="MemoryProtection">Защита памяти</strong> -
+ данная опция позволяет защитить образ файла в памяти от
+ каких-либо изменений (целостность данных проверяется по всем
+ секциям, не имеющим атрибут WRITABLE). Проверка целостности
+ образа происходит до передачи управления оригинальной точке
+ входа в программу. В случае нарушения целостности будет
+ показано соответствующее сообщение с полным прекращением
+ дальнейшего выполнения программы.</li>
+
+ <li><strong id="ImportProtection">Защита импорта</strong> -
+ данная опция позволяет спрятать от взломщика список API,
+ которые использует защищенная программа (рекомендуется
+ использовать совместно с упаковкой выходного файла).</li>
+
+ <li><strong id="ResourceProtection">Защита ресурсов</strong> -
+ данная опция позволяет зашифровать ресурсы программы (кроме
+ иконок, манифеста и других служебных ресурсов).</li>
+
+ <li>
+ <strong id="PackOutputFile">Упаковать выходной файл</strong>
+ - данная опция позволяет упаковать защищенный файл, что
+ уменьшает его размер. Распаковка происходит автоматически при
+ запуске защищенного файла. Весь процесс распаковки происходит
+ в оперативной памяти без какой-либо записи данных на диск.
+
+ <p>При использовании данной опции рекомендуется включить
+ <a href="dictionary.htm#EntryPoint">EntryPoint</a> в список
+ защищаемых объектов.<br />
+ <strong>Важно:</strong><br />
+ При старте программы после распаковки кода управление будет
+ передано EntryPoint. Если код EntryPoint будет
+ завиртуализирован, то этот код будет выполнен на том же
+ исполнителе ВМ, что и код самого распаковщика. Совместная
+ виртуализация EntryPoint с упаковкой защищенного файла
+ препятствует "ручной" распаковке защищенного файла, т.к.
+ взломщику надо будет восстановить код EntryPoint для
+ получения работоспособного образа файла.</p>
+ </li>
+ <li>
+ <strong id="Additional">Дополнительные</strong>
+ - дополнительные настройки защиты:</li>
+ <ul>
+ <li>
+ <strong id="watermarks">Водяные знаки</strong> - позволяет добавить в проект <a href="watermarks.htm">водяные знаки</a>.
+ </li>
+ <li><strong id="VMSectionName">Сегменты ВМ</strong> -
+ при компиляции в файл будут добавлены дополнительные сегменты, в
+ которые будут записаны различные данные (завиртуализированный,
+ промутированный код, исполнители ВМ, водяные знаки и т.п.).
+ Данная опция позволяет задать названия для новых сегментов.
+ Рекомендуется изменять стандартное название сегментов ".vmp"
+ (например, на ".UPX").</li>
+ <li><strong>Удалять отладочную информацию</strong> - удаление отладочной информации компилятора затруднит анализ кода приложения злоумышленником.</li>
+ <li><strong>Удалять настраиваемые элементы</strong> - некоторые
+ компиляторы (в частности Delphi) создают для EXE файлов список
+ настраиваемых элементов, которые не используются операционной
+ системой при загрузке EXE файлов. При включенной опции область,
+ занятая под список настраиваемых элементов, будет
+ использоваться под нужды ВМ.</li>
+ </ul>
+
+ </ul>
+
+ <h3>Обнаружение</h3>
+
+ <ul>
+ <li><strong id="DebuggerDetection">Отладчик</strong> - данная опция препятствует отладке
+ защищенного файла. Существуют 2 типа отладчиков: User-mode
+ (отладчики пользовательского режима: OllyDBG, WinDBG и т.п.) и
+ Kernel-mode (отладчики режима ядра: SoftICE, Syser и т.п.).
+ Обнаружение отладчика происходит до передачи управления
+ оригинальной точке входа в программу. В случае обнаружения
+ отладчика будет показано соответствующее сообщение с
+ прекращением дальнейшего выполнения программы.</li>
+
+ <li><strong id="VirtualizationToolsDetection">Инструменты виртуализации</strong> - данная опция препятствует
+ запуску защищенного файла в различных виртуальных средах:
+ VMware, Virtual PC, VirtualBox, Sandboxie. Обнаружение
+ виртуальной среды происходит до передачи управления
+ оригинальной точке входа в программу. В случае обнаружения
+ виртуальной среды будет показано соответствующее сообщение с
+ прекращением дальнейшего выполнения программы.</li>
+ </ul>
+
+ <h3>Сообщения</h3>
+ <p>В данном разделе можно задать сообщения, выводимые программой при обнаружении отладчика, инструментов виртуализации, повреждении файла или попытке исполнения кода, защищенного серийным номером.</p>
+
+ <h3 id="LicensingParameters">Параметры лицензирования</h3>
+
+ <p>В качестве файла с параметрами лицензирования выберите файл
+ проекта, созданного в <a href="manager/licenses.htm">менеджере
+ лицензий</a>. По умолчанию используется текущий файл проекта.</p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/project_options_external_addresses.htm b/help/ru/project_options_external_addresses.htm
new file mode 100644
index 0000000..cc8dff5
--- /dev/null
+++ b/help/ru/project_options_external_addresses.htm
@@ -0,0 +1,80 @@
+<!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>Внешние адреса</title>
+</head>
+
+<body>
+ <h1>Внешние адреса</h1>
+
+ При защите кода место, освободившееся в
+ процессе компиляции, VMProtect использует для своих нужд, в
+ том числе для хранения различных данных
+ (завиртуализированного, промутированного кода, исполнителей
+ ВМ и т.п.). В связи с этим могут возникать различные
+ ситуации, когда "внутрь" защищенного кода может происходить
+ переход из других частей программы (адреса, на которые может
+ происходить переход, называются внешними). Подобные ситуации
+ могут возникать при использовании маркеров кода, когда
+ происходит переход из незащищенного участка программы внутрь
+ маркера:
+ <pre class="code">VMProtectBegin(nil);
+for I:=0 to 10 do
+begin
+ Inc(J);
+ VMProtectEnd;
+end;
+</pre>
+
+ <p>В виде ассемблерных команд данный цикл выглядит следующим
+ образом:</p>
+ <pre class="code">----------------- начало маркера ----------------
+0044D12C mov eax, 0000000B
+0044D131 inc ebx
+----------------- конец маркера -----------------
+0044D132 dec eax
+0044D133 jnz 0044D131
+</pre>
+
+ <p>Очевидно, что после виртуализации команд с адресами
+ 0044D12C и 0044D131 при выполнении незавиртуализированной
+ команды условного перехода по адресу 0044D133 возникнет
+ ошибка (т.к. по адресу 0044D131 вместо оригинального кода
+ будут записаны различные данные или просто мусор). Для
+ рассматриваемого примера адрес 0044D131 будет являться
+ внешним.</p>
+
+ <p>При включении опции "Режим отладки" на место оригинального
+ кода будет записана команда INT 03, являющаяся обычной точкой
+ останова и служебной командой при работе под отладчиком. При
+ запуске защищенной программы из-под отладчика в случае
+ передачи управления по адресу 0044D131 произойдет вызов точки
+ останова, а при открытии окна отладчика можно будет увидеть,
+ по какому адресу произошел данный переход.</p>
+
+ <p>При обнаружении подобных переходов рекомендуется проверить
+ правильность расстановки маркеров кода. Если защищаемый код
+ не помечен маркерами или невозможно изменить логику
+ приложения так, чтобы внутрь защищаемого кода не было
+ перехода из других частей программы, то, используя
+ графическую версию приложения, данные адреса <a href=
+ "project_functions.htm#ExtAddress">следует пометить как
+ внешние</a>.</p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/project_script.htm b/help/ru/project_script.htm
new file mode 100644
index 0000000..083c534
--- /dev/null
+++ b/help/ru/project_script.htm
@@ -0,0 +1,34 @@
+<!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>Секция "Скрипт"</title>
+</head>
+
+<body>
+ <h1>Секция "Скрипт"</h1>
+
+ <p>Секция "Скрипт" раздела "Проект" предназначена для создания программ на встроенном <a href="script.htm">скриптовом языке</a>:</p>
+ <p><img src="images/project_script.png" /></p>
+
+ <p>Основная панель предназначена для редактирования самого
+ скрипта. С помощью контекстного меню можно манипулировать фрагментами кода.</p>
+ <p>Отдельные блоки кода (циклы, функции) можно свернуть или развернуть, нажав на значок иерархии (плюс или минус) рядом с номером строки.</p>
+ <p>Щелкнув правой кнопкой мыши по заголовку секции, можно исключить скрипт из компиляции. Скрипт, исключенный из компиляции, не обрабатывается и не исполняется программой. Эта настройка сохраняется в свойствах проекта.</p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/recommendations.htm b/help/ru/recommendations.htm
new file mode 100644
index 0000000..b459b3a
--- /dev/null
+++ b/help/ru/recommendations.htm
@@ -0,0 +1,233 @@
+<!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>Рекомендации по защите</title>
+</head>
+
+<body>
+ <h1>Рекомендации по защите</h1>
+
+ <p>Программа VMProtect представляет собой надежный инструмент
+ защиты кода приложения от изучения и взлома. Однако его
+ эффективное использование возможно лишь в том случае, если
+ встроенные в приложение защитные механизмы спроектированы по
+ определенным правилам и не содержат типичных ошибок. Рассмотрим
+ некоторые моменты, связанные с созданием защитных механизмов
+ приложения.</p>
+
+ <h3>Процедура регистрации</h3>
+
+ <p>Типичной ошибкой программистов, разрабатывающих собственную
+ схему регистрации экземпляра приложения, является вынос процедуры
+ проверки корректности введенного регистрационного ключа в
+ отдельную функцию c понятным возвращаемым значением:</p>
+ <pre class="indent code">function CheckRegistration(const RegNumber: String): Boolean;
+begin
+ if RegNumber='123' then
+ Result:=True
+ else
+ Result:=False;
+end;
+
+procedure TForm1.Button1Click(Sender: TObject);
+begin
+ ...
+ if not CheckRegistration(RegNumber) then
+ exit;
+ Application.CreateForm(TForm2, Form2);
+ Form2.ShowModal;
+ ...
+end;
+</pre>
+
+ <p>При подобном подходе к проверке регистрационного кода
+ взломщику нет необходимости вникать в алгоритм проверки ключа, а
+ будет достаточно изменить код в начале процедуры проверки таким
+ образом, чтобы она всегда возвращала значение,
+ соответствующее корректному регистрационному ключу:</p>
+ <pre class="indent code">function CheckRegistration(const RegNumber: String): Boolean;
+begin
+ Result:=True;
+ exit;
+ ...
+end;
+</pre>
+
+ <p>Гораздо более эффективным способом является встраивание
+ проверки корректности регистрационного кода в логику работы
+ программы таким образом, чтобы невозможно было отделить алгоритм
+ проверки регистрационного кода от алгоритма работы вызывающей эту
+ проверку процедуры. Также рекомендуется "примешивать" логику
+ работы программы в процедуру проверки регистрационного кода так,
+ чтобы "обход" регистрационной процедуры приводил к ошибкам в
+ работе приложения. Для примера, приведенного выше, это можно
+ сделать следующим образом:</p>
+ <pre class="indent code">function CheckRegistration(const RegNumber: String): Boolean;
+begin
+ if RegNumber='123' then
+ begin
+ Application.CreateForm(TForm2, Form2);
+ Result:=True
+ end
+ else
+ Result:=False;
+end;
+
+procedure TForm1.Button1Click(Sender: TObject);
+begin
+ ...
+ Form2:=nil;
+ if not CheckRegistration(RegNumber) then
+ exit;
+ Form2.ShowModal;
+ ...
+end;
+</pre>
+
+ <p>При подобной реализации функции CheckRegistration для "обхода"
+ проверки регистрационного ключа взломщику будет необходимо
+ досконально разбирать работу всей функции проверки ключа. При
+ защите данного приложения с помощью VMProtect рекомендуется
+ выполнить виртуализацию не только функции CheckRegistration, но и
+ процедуры TForm1.Button1Click. Для еще большего усложнения
+ процесса взлома приложения можно воспользоваться <a href="project_functions.htm#CompilationTypes">режимом защиты
+ "Ультра"</a>, сочетающим мутацию кода приложения с его последующей
+ виртуализацией.</p>
+
+ <h3>Проверка регистрационных ключей</h3>
+
+ <p>Очень часто программисты допускают грубейшие ошибки при
+ реализации самой проверки правильности регистрационного ключа,
+ производя сравнение введенного ключа с его корректным значением.
+ При подобной реализации взломщик легко сможет подобрать
+ корректное значение ключа, просмотрев в процессе трассировки
+ аргументы, с которыми вызывается функция сравнения строк:</p>
+ <pre class="indent code">var ValidRegNumber: String;
+...
+function CheckRegistration(const RegNumber: String): Boolean;
+begin
+ if RegNumber=ValidRegNumber then
+ Result:=True
+ else
+ Result:=False;
+end;
+</pre>
+
+ <p>Для исключения подобной ситуации при сравнении введенного
+ значения ключа с его допустимым значением рекомендуется
+ использовать их хеши, а не реальные значения. По своей сути
+ хеш-функция необратима, а значит, по результатам проверки хешей
+ невозможно определить значение допустимого ключа. При взломе
+ приложения будет необходимо потратить гораздо больше времени на
+ изучение программы, так как придется исследовать гораздо больше
+ участков кода, а не только процедуру проверки корректности
+ введенного ключа:</p>
+ <pre class="indent code">var
+ HashOfValidRegNumber: Longint;
+...
+// Пример использования обобщенного алгоритма хеширования Питера Вейнбергера (PJW)
+function HashPJW(const Value: String): Longint;
+var I:Integer;
+ G:Longint;
+begin
+ Result:=0;
+ for I:=1 to Length(Value) do
+ begin
+ Result:=(Result shl 4)+Ord(Value[I]);
+ G:=Result and $F0000000;
+ if G&lt;&amp;gt0 then
+ Result:=(Result xor (G shr 24)) xor G;
+ end;
+end;
+
+function CheckRegistration(const RegNumber: String): Boolean;
+begin
+ if HashPJW(RegNumber)=HashOfValidRegNumber then
+ Result:=True
+ else
+ Result:=False;
+end;
+...
+initialization
+ HashOfValidRegNumber:=HashPJW(ValidRegNumber);
+
+end.
+</pre>
+
+ <p>При защите программы с помощью VMProtect целесообразно
+ защитить функции HashPJW и CheckRegistration для усложнения
+ работы взломщика.</p>
+
+ <h3>Хранение результата проверки регистрации</h3>
+
+ <p>Как правило, программисты, затратившие много времени на
+ реализацию самой процедуры регистрации, не уделяют достаточного
+ внимания защите самого результата регистрации программы. В
+ приведенном ниже примере перед вызовом функции проверки
+ корректности регистрационного номера контролируется состояние
+ глобальной переменной, хранящей результат проверки регистрации.
+ Для взломщика поиск глобальной переменной не представляет
+ трудностей - достаточно будет сравнить сегменты данных ДО и ПОСЛЕ
+ регистрации. Кстати, аналогичный принцип лежит в основе работы
+ известной программы ArtMoney.</p>
+ <pre class="indent code">var IsRegistered: Boolean;
+...
+procedure TForm1.Button1Click(Sender: TObject);
+begin
+ ...
+ if not IsRegistered then
+ IsRegistered:=CheckRegistration(RegNumber);
+ if not IsRegistered then
+ exit;
+ ...
+end;
+</pre>
+
+ <p>Для исключения подобной ситуации рекомендуется результаты всех
+ проверок, отвечающих за регистрацию программы, хранить в
+ динамической памяти, так как в этом случае сканирование секций
+ данных на предмет изменения ячеек памяти ДО и ПОСЛЕ регистрации
+ окажется бесполезным. Простейший пример, демонстрирующий хранение
+ результата в динамически выделяемой памяти, приведен ниже.</p>
+ <pre class="indent code">type PBoolean = ^Boolean;
+
+var IsRegistered: PBoolean;
+...
+procedure TForm1.Button1Click(Sender: TObject);
+begin
+ ...
+ if not IsRegistered^ then
+ IsRegistered^:=CheckRegistration(RegNumber);
+ if not IsRegistered^ then
+ exit;
+ ...
+end;
+...
+initialization
+ New(IsRegistered);
+</pre>
+
+ <p>Выше приведены простейшие примеры реализации встроенных в
+ приложение механизмов защиты. Варианты реальной реализации
+ процедуры регистрации, функции проверки регистрационного ключа
+ или организации хранения результата проверки регистрационного
+ ключа ограничены только фантазией разработчика. Однако в любом
+ случае при разработке механизмов защиты приложения следует знать
+ о возможных ошибках и не повторять их.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/ru.qhcp b/help/ru/ru.qhcp
new file mode 100644
index 0000000..8805876
--- /dev/null
+++ b/help/ru/ru.qhcp
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<QHelpCollectionProject version="1.0">
+ <docFiles>
+ <generate>
+ <file>
+ <input>ru.qhp</input>
+ <output>../../bin/ru.qch</output>
+ </file>
+ </generate>
+ <register>
+ <file>../../bin/ru.qch</file>
+ </register>
+ </docFiles>
+</QHelpCollectionProject> \ No newline at end of file
diff --git a/help/ru/ru.qhp b/help/ru/ru.qhp
new file mode 100644
index 0000000..e737a7c
--- /dev/null
+++ b/help/ru/ru.qhp
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<QtHelpProject version="1.0">
+ <namespace>ru.com.vmpsoft.vmprotect.3.0</namespace>
+ <virtualFolder>doc</virtualFolder>
+ <customFilter name="VMProtect 3.0">
+ <filterAttribute>vmpg</filterAttribute>
+ <filterAttribute>3.0</filterAttribute>
+ </customFilter>
+ <filterSection>
+ <filterAttribute>vmpg</filterAttribute>
+ <filterAttribute>3.0</filterAttribute>
+ <toc><section title="Введение" ref="terms.htm">
+ <section title="Словарь терминов" ref="dictionary.htm" />
+ <section title="Изучение, взлом и защита программного обеспечения" ref="software_protection.htm" />
+ <section title="Что такое VMProtect?" ref="about_vmprotect.htm" />
+ <section title="Рекомендации по защите" ref="recommendations.htm" />
+ <section title="История изменений" ref="history.htm" />
+ </section>
+ <section title="Работа с VMProtect" ref="work.htm">
+ <section title="Подготовка проекта" ref="create_project.htm">
+ <section title="Использование MAP-файла" ref="use_map_file.htm" />
+ <section title="Использование маркеров" ref="use_markers.htm" />
+ <section title="Функции SDK" ref="sdk_functions.htm" />
+ </section>
+ <section title="Главное окно" ref="main_window.htm">
+ <section title="Главное меню" ref="main_menu.htm">
+ <section title="Меню &quot;Файл&quot;" ref="menu_file.htm" />
+ <section title="Меню &quot;Правка&quot;" ref="menu_edit.htm" />
+ <section title="Меню &quot;Проект&quot;" ref="menu_project.htm" />
+ <section title="Меню &quot;Инструменты&quot;" ref="menu_tools.htm" />
+ <section title="Меню &quot;Справка&quot;" ref="menu_help.htm" />
+ </section>
+ <section title="Панель инструментов" ref="toolbar.htm" />
+ <section title="Раздел &quot;Проект&quot;" ref="project.htm">
+ <section title="Секция &quot;Функции для защиты&quot;" ref="project_functions.htm" />
+ <section title="Секция &quot;Лицензии&quot;" ref="manager/licenses.htm" />
+ <section title="Секция &quot;Файлы&quot;" ref="project_files.htm" />
+ <section title="Секция &quot;Скрипт&quot;" ref="project_script.htm" />
+ <section title="Секция &quot;Опции&quot;" ref="project_options.htm" />
+ </section>
+ <section title="Раздел &quot;Функции&quot;" ref="functions.htm" />
+ <section title="Раздел &quot;Свойства&quot;" ref="info.htm">
+ <section title="Секция &quot;Директории&quot;" ref="info_directories.htm" />
+ <section title="Секция &quot;Сегменты&quot;" ref="info_segments.htm" />
+ <section title="Секция &quot;Импорты&quot;" ref="info_imports.htm" />
+ <section title="Секция &quot;Экспорты&quot;" ref="info_exports.htm" />
+ <section title="Секция &quot;Ресурсы&quot;" ref="info_resources.htm" />
+ <section title="Секция &quot;Калькулятор&quot;" ref="info_calc.htm" />
+ <section title="Секция &quot;Дамп&quot;" ref="info_dump.htm" />
+ </section>
+ </section>
+ <section title="Консольная версия" ref="mode_console.htm" />
+ </section>
+ <section title="Система лицензирования" ref="manager/index.htm">
+ <section title="Возможности системы лицензирования VMProtect" ref="manager/features.htm" />
+ <section title="Как работает система лицензирования?" ref="manager/howitworks.htm" />
+ <section title="Интеграция в приложение" ref="manager/usage/index.htm">
+ <section title="Этап 1: Тестовый режим работы" ref="manager/usage/index.htm#TestMode">
+ <section title="Шаг 1: Создаем защищаемое приложение" ref="manager/usage/step11_app.htm" />
+ <section title="Шаг 2: Добавляем код проверки лицензии" ref="manager/usage/step12_code.htm" />
+ <section title="Шаг 3: Получаем флаги состояния серийного номера" ref="manager/usage/step13_flags.htm" />
+ <section title="Шаг 4: Получаем имя и e-mail пользователя" ref="manager/usage/step14_name.htm" />
+ <section title="Шаг 5: Проверяем срок действия серийного номера" ref="manager/usage/step15_exp.htm" />
+ <section title="Шаг 6: Ограничиваем время работы программы" ref="manager/usage/step16_time.htm" />
+ <section title="Шаг 7: Ограничиваем бесплатные обновления" ref="manager/usage/step17_maxbuild.htm" />
+ <section title="Шаг 8: Номера из &quot;черного списка&quot;" ref="manager/usage/step18_blacklist.htm" />
+ <section title="Шаг 9: Привязка к оборудованию" ref="manager/usage/step19_hwid.htm" />
+ <section title="Шаг 10: Пользовательские данные" ref="manager/usage/step1A_userdata.htm" />
+ </section>
+ <section title="Этап 2: Реальный режим работы" ref="manager/usage/index.htm#RealMode">
+ <section title="Шаг 1: Создаем новое защищенное приложение" ref="manager/usage/step21_src.htm" />
+ <section title="Шаг 2: Создаем проект защиты в VMProtect" ref="manager/usage/step22_vmp.htm" />
+ <section title="Шаг 3: Создаем продукт в менеджере лицензий" ref="manager/usage/step23_product.htm" />
+ <section title="Шаг 4: Тестируем результат" ref="manager/usage/step24_test.htm" />
+ <section title="Шаг 5: Привязываем код к серийному номеру" ref="manager/usage/step25_codelock.htm" />
+ </section>
+ <section title="Описание функций API лицензирования" ref="manager/usage/api.htm" />
+ </section>
+ <section title="Генераторы ключей" ref="manager/keygen/index.htm">
+ <section title="Windows-версия" ref="manager/keygen/keygen_dll.htm" />
+ <section title=".Net-версия" ref="manager/keygen/keygen_net.htm" />
+ <section title="UNIX-версия" ref="manager/keygen/keygen_php.htm" />
+ <section title="Формат серийного номера" ref="manager/keygen/serial_format.htm" />
+ <section title="Алгоритмы шифрования серийных номеров" ref="manager/keygen/algorithms.htm" />
+ </section>
+ <section title="Система Активации" ref="manager/activation.htm">
+ <section title="Настройка Активации в VMProtect" ref="manager/activation/vmprotect.htm" />
+ <section title="Поддержка Активации в Web License Manager" ref="manager/activation/weblm.htm" />
+ <section title="API Активации" ref="manager/activation/api.htm" />
+ </section>
+ </section>
+ <section title="Использование скриптов" ref="script.htm">
+ <section title="Классы" ref="script_classes.htm" />
+ <section title="Встроенные функции" ref="script_functions.htm" />
+ <section title="События" ref="script_events.htm" />
+ </section>
+ <section title="Водяные знаки" ref="watermarks.htm">
+ <section title="Вкладка &quot;Настройка&quot;" ref="watermarks_setup.htm" />
+ <section title="Вкладка &quot;Поиск&quot;" ref="watermarks_search.htm" />
+ </section>
+ <section title="Ответы на вопросы" ref="faq.htm" />
+ <section title="Контактная информация" ref="contacts.htm" />
+ </toc>
+ <keywords>
+ <keyword id="default" ref="terms.htm"/>
+ <keyword id="project::functions" ref="project_functions.htm"/>
+ <keyword id="project::options" ref="project_options.htm"/>
+ <keyword id="project::script" ref="project_script.htm"/>
+ <keyword id="project::files" ref="project_files.htm"/>
+ <keyword id="project::licenses" ref="manager/licenses.htm"/>
+ <keyword id="project::mapfunctions" ref="functions.htm"/>
+ <keyword id="project::details" ref="info.htm"/>
+ <keyword id="functions::setup" ref="project_functions.htm#AddProcedure"/>
+ <keyword id="functions::search" ref="project_functions.htm#Search"/>
+ <keyword id="watermarks::setup" ref="watermarks_setup.htm"/>
+ <keyword id="watermarks::search" ref="watermarks_search.htm"/>
+ <keyword id="settings" ref="menu_tools.htm#Settings"/>
+ <keyword id="contacts" ref="contacts.htm"/>
+ </keywords>
+ <files>
+ <file>default.css</file>
+ <file>about_vmprotect.htm</file>
+ <file>contacts.htm</file>
+ <file>create_project.htm</file>
+ <file>default.css</file>
+ <file>dictionary.htm</file>
+ <file>faq.htm</file>
+ <file>functions.htm</file>
+ <file>history.htm</file>
+ <file>info.htm</file>
+ <file>info_calc.htm</file>
+ <file>info_directories.htm</file>
+ <file>info_dump.htm</file>
+ <file>info_exports.htm</file>
+ <file>info_imports.htm</file>
+ <file>info_resources.htm</file>
+ <file>info_segments.htm</file>
+ <file>info_calc.htm</file>
+ <file>main_menu.htm</file>
+ <file>menu_file.htm</file>
+ <file>menu_edit.htm</file>
+ <file>menu_project.htm</file>
+ <file>menu_tools.htm</file>
+ <file>menu_help.htm</file>
+ <file>main_window.htm</file>
+ <file>mode_console.htm</file>
+ <file>project.htm</file>
+ <file>project_files.htm</file>
+ <file>project_functions.htm</file>
+ <file>project_options.htm</file>
+ <file>project_options_external_addresses.htm</file>
+ <file>project_script.htm</file>
+ <file>recommendations.htm</file>
+ <file>script.htm</file>
+ <file>script_classes.htm</file>
+ <file>script_events.htm</file>
+ <file>script_functions.htm</file>
+ <file>sdk_functions.htm</file>
+ <file>software_protection.htm</file>
+ <file>terms.htm</file>
+ <file>toolbar.htm</file>
+ <file>use_map_file.htm</file>
+ <file>use_markers.htm</file>
+ <file>watermarks.htm</file>
+ <file>watermarks_search.htm</file>
+ <file>watermarks_setup.htm</file>
+ <file>about_vmprotect.htm</file>
+ <file>work.htm</file>
+ <file>images/activation_setup.png</file>
+ <file>images/button_compilation.png</file>
+ <file>images/button_execute.png</file>
+ <file>images/button_open.png</file>
+ <file>images/button_project.png</file>
+ <file>images/button_save.png</file>
+ <file>images/button_action.png</file>
+ <file>images/button_search.png</file>
+ <file>images/delphi_project.png</file>
+ <file>images/expert_find.png</file>
+ <file>images/export_keys.png</file>
+ <file>images/functions.png</file>
+ <file>images/import_key.png</file>
+ <file>images/licenses1.png</file>
+ <file>images/lock_to_serial.png</file>
+ <file>images/main_window.png</file>
+ <file>images/menu_edit.png</file>
+ <file>images/menu_file.png</file>
+ <file>images/menu_help.png</file>
+ <file>images/menu_project.png</file>
+ <file>images/menu_project_import.png</file>
+ <file>images/menu_tools.png</file>
+ <file>images/preferences.png</file>
+ <file>images/project_add_folder.png</file>
+ <file>images/project_add_function.png</file>
+ <file>images/project_add_license.png</file>
+ <file>images/project_file_delete.png</file>
+ <file>images/project_file_menu.png</file>
+ <file>images/project_file_protection.png</file>
+ <file>images/project_file_settings.png</file>
+ <file>images/project_functions.png</file>
+ <file>images/project_functions_content.png</file>
+ <file>images/project_functions_content2.png</file>
+ <file>images/project_functions_menu.png</file>
+ <file>images/project_functions_menu2.png</file>
+ <file>images/project_functions_menu3.png</file>
+ <file>images/project_functions_search.png</file>
+ <file>images/project_generate_keys.png</file>
+ <file>images/project_options.png</file>
+ <file>images/project_script.png</file>
+ <file>images/properties_directory.png</file>
+ <file>images/properties_dump.png</file>
+ <file>images/properties_dump_goto.png</file>
+ <file>images/properties_export.png</file>
+ <file>images/properties_import.png</file>
+ <file>images/properties_resources.png</file>
+ <file>images/properties_segments.png</file>
+ <file>images/properties_calc.png</file>
+ <file>images/watermarks_add.png</file>
+ <file>images/watermarks_menu.png</file>
+ <file>images/watermarks_search.png</file>
+ <file>images/watermarks_setup.png</file>
+ <file>images/delphi_map.png</file>
+ <file>images/visual_studio_map.png</file>
+ <file>manager/activation/api.htm</file>
+ <file>manager/activation/vmprotect.htm</file>
+ <file>manager/activation/weblm.htm</file>
+ <file>images/weblm_1.png</file>
+ <file>images/weblm_2.png</file>
+ <file>manager/keygen/algorithms.htm</file>
+ <file>manager/keygen/index.htm</file>
+ <file>manager/keygen/keygen_dll.htm</file>
+ <file>manager/keygen/keygen_net.htm</file>
+ <file>manager/keygen/keygen_php.htm</file>
+ <file>manager/keygen/serial_format.htm</file>
+ <file>manager/usage/api.htm</file>
+ <file>images/codelock_error.png</file>
+ <file>images/depends.png</file>
+ <file>manager/usage/index.htm</file>
+ <file>manager/usage/step11_app.htm</file>
+ <file>manager/usage/step12_code.htm</file>
+ <file>manager/usage/step13_flags.htm</file>
+ <file>manager/usage/step14_name.htm</file>
+ <file>manager/usage/step15_exp.htm</file>
+ <file>manager/usage/step16_time.htm</file>
+ <file>manager/usage/step17_maxbuild.htm</file>
+ <file>manager/usage/step18_blacklist.htm</file>
+ <file>manager/usage/step19_hwid.htm</file>
+ <file>manager/usage/step1A_userdata.htm</file>
+ <file>manager/usage/step21_src.htm</file>
+ <file>manager/usage/step22_vmp.htm</file>
+ <file>manager/usage/step23_product.htm</file>
+ <file>manager/usage/step24_test.htm</file>
+ <file>manager/usage/step25_codelock.htm</file>
+ <file>manager/activation.htm</file>
+ <file>manager/features.htm</file>
+ <file>manager/howitworks.htm</file>
+ <file>manager/index.htm</file>
+ <file>manager/licenses.htm</file>
+ </files>
+ </filterSection>
+</QtHelpProject>
diff --git a/help/ru/script.htm b/help/ru/script.htm
new file mode 100644
index 0000000..288a14b
--- /dev/null
+++ b/help/ru/script.htm
@@ -0,0 +1,37 @@
+<!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>Использование скриптов</title>
+</head>
+
+<body>
+ <h1>Использование скриптов</h1>
+
+ <p>Программа VMProtect обладает мощным встроенным скриптовым
+ языком <a href="http://www.lua.org/">LUA</a>, использование которого позволяет расширить возможности
+ VMProtect на каждом этапе обработки защищаемого файла.</p>
+
+ <p>Синтаксис языка LUA похож на JavaScript, однако в отличие от последнего он не содержит классов в явном виде. Тем не менее, скриптовый язык позволяет легко формировать такие механизмы объектно-ориентированного программирования, как классы, наследование и события. Примеры использования скриптов находятся в каталоге "VMProtect/Examples/Scripts".</p>
+ <ul>
+ <li><a href="script_classes.htm">Классы</a></li>
+ <li><a href="script_functions.htm">Встроенные функции</a></li>
+ <li><a href="script_events.htm">События</a></li>
+ </ul>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/script_classes.htm b/help/ru/script_classes.htm
new file mode 100644
index 0000000..ae7b33e
--- /dev/null
+++ b/help/ru/script_classes.htm
@@ -0,0 +1,1188 @@
+<!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>Классы</title>
+</head>
+
+<body>
+ <h1>Классы</h1>
+
+ <p>Встроенный скриптовый язык <a href="http://www.lua.org/about.html">LUA</a> программы VMProtect является
+ объектно-ориентированным: по синтаксису, идеалогии и реализации он во многом похож на JavaScript.
+ В состав скриптового языка входят как стандартные классы,
+ обеспечивающие базовую функциональность, так и специализированные
+ классы, предоставляющие доступ к функционалу защиты приложения.
+ </p>
+
+<h3>Иерархия классов</h3>
+<ul>
+<li><a href="#Core">Core</a><ul>
+ <li><a href="#Watermarks">Watermarks</a><ul>
+ <li><a href="#Watermark">Watermark</a></li>
+ </ul></li>
+ <li><a href="#Licenses">Licenses</a><ul>
+ <li><a href="#License">License</a></li>
+ </ul></li>
+ <li><a href="#Files">Files</a><ul>
+ <li><a href="#File">File</a></li>
+ </ul></li>
+ <li><a href="#Folders">Folders</a><ul>
+ <li><a href="#Folder">Folder</a></li>
+ </ul></li>
+
+ <li><a href="#PEFile">PEFile</a><ul>
+ <li><a href="#PEFormat">PEFormat</a><ul>
+ </ul></li>
+ <li><a href="#PEArchitecture">PEArchitecture</a><ul>
+ <li><a href="#PESegments">PESegments</a><ul>
+ <li><a href="#PESegment">PESegment</a></li>
+ </ul></li>
+ <li><a href="#PESections">PESections</a><ul>
+ <li><a href="#PESection">PESection</a></li>
+ </ul></li>
+ <li><a href="#PEDirectories">PEDirectories</a><ul>
+ <li><a href="#PEDirectory">PEDirectory</a></li>
+ </ul></li>
+ <li><a href="#PEImports">PEImports</a><ul>
+ <li><a href="#PEImport">PEImport</a></li>
+ </ul></li>
+ <li><a href="#PEExports">PEExports</a><ul>
+ <li><a href="#PEExport">PEExport</a></li>
+ </ul></li>
+ <li><a href="#PEResources">PEResources</a><ul>
+ <li><a href="#PEResource">PEResource</a></li>
+ </ul></li>
+ <li><a href="#PEFixups">PEFixups</a><ul>
+ <li><a href="#PEFixup">PEFixup</a></li>
+ </ul></li>
+ </ul></li>
+ </ul></li>
+ <li><a href="#MacFile">MacFile</a><ul>
+ <li><a href="#MacFormat">MacFormat</a><ul>
+ </ul></li>
+ <li><a href="#MacArchitecture">MacArchitecture</a><ul>
+ <li><a href="#MacSegments">MacSegments</a><ul>
+ <li><a href="#MacSegment">MacSegment</a></li>
+ </ul></li>
+ <li><a href="#MacSections">MacSections</a><ul>
+ <li><a href="#MacSection">MacSection</a></li>
+ </ul></li>
+ <li><a href="#MacCommands">MacCommands</a><ul>
+ <li><a href="#MacCommand">MacCommand</a></li>
+ </ul></li>
+ <li><a href="#MacSymbols">MacSymbols</a><ul>
+ <li><a href="#MacSymbol">MacSymbol</a></li>
+ </ul></li>
+ <li><a href="#MacImports">MacImports</a><ul>
+ <li><a href="#MacImport">MacImport</a></li>
+ </ul></li>
+ <li><a href="#MacExports">MacExports</a><ul>
+ <li><a href="#MacExport">MacExport</a></li>
+ </ul></li>
+ <li><a href="#MacFixups">MacFixups</a><ul>
+ <li><a href="#MacFixup">MacFixup</a></li>
+ </ul></li>
+ </ul></li>
+ </ul></li>
+ <li><a href="#MapFunctions">MapFunctions</a><ul>
+ <li><a href="#MapFunction">MapFunction</a><ul>
+ <li><a href="#References">References</a><ul>
+ <li><a href="#Reference">Reference</a></li>
+ </ul></li>
+ </ul></li>
+ </ul></li>
+ <li><a href="#IntelFunctions">IntelFunctions</a><ul>
+ <li><a href="#IntelFunction">IntelFunction</a><ul>
+ <li><a href="#IntelSegment">IntelSegment</a><ul>
+ <li><a href="#IntelRegistr">IntelRegistr</a></li>
+ <li><a href="#IntelCommandType">IntelCommandType</a></li>
+ <li><a href="#IntelFlag">IntelFlag</a></li>
+ <li><a href="#IntelCommand">IntelCommand</a><ul>
+ <li><a href="#OperandType">OperandType</a><ul>
+ <li><a href="#IntelOperand">IntelOperand</a></li>
+ </ul></li>
+ </ul></li>
+ </ul></li>
+ <li><a href="#CommandLinks">CommandLinks</a><ul>
+ <li><a href="#LinkType">LinkType</a><ul>
+ <li><a href="#CommandLink">CommandLink</a></li>
+ </ul></li>
+ </ul></li>
+ </ul></li>
+ </ul></li>
+</ul></li>
+<li><a href="#FFILibrary">FFILibrary</a><ul>
+ <li><a href="#FFIFunction">FFIFunction</a></li>
+</ul></li>
+</ul>
+
+<h3>Ядро</h3>
+
+<p id="ProjectOption">Опции проекта:</p>
+<pre class="code">
+enum ProjectOption {
+ None,
+ Pack,
+ ImportProtection,
+ MemoryProtection,
+ ResourceProtection,
+ CheckDebugger,
+ CheckKernelDebugger,
+ CheckVirtualMachine,
+ StripFixups,
+ StripDebugInfo,
+ DebugMode
+}
+</pre>
+
+<p id="Core">Класс для работы с ядром VMProtect:</p>
+<pre class="code" id="Core">
+class Core {
+public:
+ string projectFileName(); // возращает имя проекта
+ void saveProject(); // сохраняет проект
+ string inputFileName(); // возвращает имя исходного файла для текущего проекта
+ string outputFileName(); // возращает имя выходного файла для текущего проекта
+ void setOutputFileName(string name); // устанавливает имя выходного файла для текущего проекта
+ string watermarkName(); // возвращает имя водяного знака из текущего проекта
+ void setWatermarkName(string name); // устанавливает имя водяного знака для текущего проекта
+ int options(); // возвращает <a href="#ProjectOption">опции</a> для текущего проекта
+ void setOptions(int options); // устанавливает опции для текущего проекта
+ string vmSectionName(); // возвращает имя сегмента ВМ для текущего проекта
+ void setVMSectionName(); // устанавливает имя сегмента ВМ для текущего проекта
+ <a href="#Licenses">Licenses</a> licenses(); // возвращает список лицензий для текущего проекта
+ <a href="#Files">Files</a> files(); // возвращает список файлов для текущего проекта
+ <a href="#Watermarks">Watermarks</a> watermarks(); // возвращает список водяных знаков
+ <a href="#PEFile">PEFile</a>/<a href="#MacFile">MacFile</a> inputFile(); // возвращает исходный файл
+ <a href="#PEFile">PEFile</a>/<a href="#MacFile">MacFile</a> outputFile(); // возвращает выходной файл
+ <a href="#PEArchitecture">PEArchitecture</a>/<a href="#MacArchitecture">MacArchitecture</a> inputArchitecture(); // возвращает исходную архитектуру
+ <a href="#PEArchitecture">PEArchitecture</a>/<a href="#MacArchitecture">MacArchitecture</a> outputArchitecture(); // возвращает выходную архитектуру
+};
+</pre>
+
+<h3>Водяные знаки</h3>
+
+<p id="Watermarks">Класс для работы со списком <a href="watermarks.htm">водяных знаков</a>:</p>
+<pre class="code">
+class Watermarks {
+public:
+ <a href="#Watermark">Watermark</a> item(int index); // возвращает водяной знак с индексом index
+ int count(); // возвращает количество водяных знаков в списке
+ <a href="#Watermark">Watermark</a> itemByName(string name); // возвращает водяной знак с именем name
+ <a href="#Watermark">Watermark</a> add(string name, string value); // добавляет водяной знак с именем name и значением value
+}
+</pre>
+
+<p id="Watermark">Класс для работы с водяным знаком:</p>
+<pre class="code">
+class Watermark {
+public:
+ string name(); // возвращает имя водяного знака
+ string value(); // возвращает значение водяного знака
+ bool blocked(); // возвращает признак "Заблокирован"
+ void setBlocked(bool value); // устанавливает признак "Заблокирован"
+}
+</pre>
+
+<h3>Лицензии</h3>
+
+<p id="Licenses">Класс для работы со списком <a href="manager/licenses.htm">лицензий</a>:</p>
+<pre class="code">
+class Licenses {
+public:
+ int keyLength(); // возвращает размер ключа
+ string publicExp(); // возвращает публичную экспоненту
+ string privateExp(); // возвращает приватную экспоненту
+ string modulus(); // возвращает модулус
+ <a href="#License">License</a> item(int index); // возвращает лицензию с индексом index
+ int count(); // возвращает количество лицензий в списке
+}
+</pre>
+
+<p id="License">Класс для работы с лицензией:</p>
+<pre class="code">
+class License {
+public:
+ string date(string format = "%c"); // возвращает дату лицензии
+ string customerName(); // возвращает имя владельца лицензии
+ string customerEmail(); // возвращает адрес электронной почты владельца лицензии
+ string orderRef(); // возвращает номер заказа, по которому приобретена лицензия
+ string comments(); // возвращает комментарии к лицензии
+ string serialNumber(); // возвращает серийный номер лицензии
+ bool blocked(); // возвращает признак "Заблокирован"
+ void setBlocked(bool value); // устанавливает признак "Заблокирован"
+}
+</pre>
+
+<h3>Файлы</h3>
+
+<p id="Files">Класс для работы со списком <a href="project_files.htm">файлов</a>:</p>
+<pre class="code">
+class Files {
+public:
+ <a href="#File">File</a> item(int index); // возвращает файл с индексом index
+ int count(); // возвращает количество файлов в списке
+}
+</pre>
+
+<p id="File">Класс для работы с <a href="project_files.htm">файлом</a>:</p>
+<pre class="code">
+class File {
+public:
+ string name(); // возвращает название файла
+ string fileName(); // возвращает имя файла
+ int options(); // возвращает опции
+ void setName(string name); // устанавливает название файла
+ void setFileName(string name); // устанавливает имя файла
+ void setOptions(); // устанавлиает опции
+}
+</pre>
+
+<h3>Папки</h3>
+
+<p id="Folders">Класс для работы с пользовательскими папками:</p>
+<pre class="code">
+class Folders {
+public:
+ int count(); // возвращает количество папок в списке
+ <a href="#Folder">Folder</a> item(int index); // возвращает папку с индексом index
+ <a href="#Folder">Folder</a> add(string name); // добавляет новую папку
+ void clear(); // очищает список
+};
+</pre>
+
+<p id="Folder">Класс для работы с пользовательской папкой:</p>
+<pre class="code" id="Folder">
+class Folder {
+public:
+ int count(); // возвращает количество подпапок
+ <a href="#Folder">Folder</a> item(int index); // возвращает подпапку с индексом index
+ <a href="#Folder">Folder</a> add(string name); // добавляет новую подпапку
+ string name(); // возвращает имя папки
+ void clear(); // очищает список подпапок
+ void destroy(); // уничтожает папку и все дочерние подпапки
+};
+</pre>
+
+<h3>PE файлы</h3>
+
+<p id="PEFormat">Константы для работы с PE форматом:</p>
+<pre class="code">
+enum PEFormat {
+ // Directory Entries
+ IMAGE_DIRECTORY_ENTRY_EXPORT,
+ IMAGE_DIRECTORY_ENTRY_IMPORT,
+ IMAGE_DIRECTORY_ENTRY_RESOURCE,
+ IMAGE_DIRECTORY_ENTRY_EXCEPTION,
+ IMAGE_DIRECTORY_ENTRY_SECURITY,
+ IMAGE_DIRECTORY_ENTRY_BASERELOC,
+ IMAGE_DIRECTORY_ENTRY_DEBUG,
+ IMAGE_DIRECTORY_ENTRY_ARCHITECTURE,
+ IMAGE_DIRECTORY_ENTRY_TLS,
+ IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG,
+ IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT,
+ IMAGE_DIRECTORY_ENTRY_IAT,
+ IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT,
+ IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR,
+ // Section characteristics
+ IMAGE_SCN_CNT_CODE,
+ IMAGE_SCN_CNT_INITIALIZED_DATA,
+ IMAGE_SCN_CNT_UNINITIALIZED_DATA,
+ IMAGE_SCN_MEM_DISCARDABLE,
+ IMAGE_SCN_MEM_NOT_CACHED,
+ IMAGE_SCN_MEM_NOT_PAGED,
+ IMAGE_SCN_MEM_SHARED,
+ IMAGE_SCN_MEM_EXECUTE,
+ IMAGE_SCN_MEM_READ,
+ IMAGE_SCN_MEM_WRITE,
+ // Resource types
+ RT_CURSOR,
+ RT_BITMAP,
+ RT_ICON,
+ RT_MENU,
+ RT_DIALOG,
+ RT_STRING,
+ RT_FONTDIR,
+ RT_FONT,
+ RT_ACCELERATOR,
+ RT_RCDATA,
+ RT_MESSAGETABLE,
+ RT_GROUP_CURSOR,
+ RT_GROUP_ICON,
+ RT_VERSION,
+ RT_DLGINCLUDE,
+ RT_PLUGPLAY,
+ RT_VXD,
+ RT_ANICURSOR,
+ RT_ANIICON,
+ RT_HTML,
+ RT_MANIFEST,
+ RT_DLGINIT,
+ RT_TOOLBAR
+};
+</pre>
+
+<p id="PEFile">Класс для работы с PE файлом:</p>
+<pre class="code">
+class PEFile {
+public:
+ string name(); // возвращает имя файла
+ string format(); // возвращает имя формата "PE"
+ uint64 size(); // возвращает размер файла
+ int count(); // возвращает количество архитектур в списке
+ <a href="#PEArchitecture">PEArchitecture</a> item(int index); // возвращает архитектуру с индексом index
+ uint64 seek(uint64 offset); // устанавливает файловую позицию
+ uint64 tell(); // возвращает файловую позицию
+ int write(string buffer); // записывает буфер в файл
+};
+</pre>
+
+<p id="PEArchitecture">Класс для работы с PE архитектурой:</p>
+<pre class="code">
+class PEArchitecture {
+public:
+ string name(); // возвращает имя архитектуры
+ <a href="#PEFile">PEFile</a> file(); // возвращает родительский файл
+ uint64 entryPoint(); // возвращает стартовый адрес
+ uint64 imageBase(); // возвращает стартовый адрес
+ <a href="#OperandSize">OperandSize</a> cpuAddressSize(); // возвращает битность архитектуры
+ uint64 size(); // возвращает размер архитектуры
+ <a href="#PESegments">PESegments</a> segments(); // возвращает список сегментов
+ <a href="#PESections">PESections</a> sections(); // возвращает список секций
+ <a href="#PEDirectories">PEDirectories</a> directories(); // возвращает список директорий
+ <a href="#PEImports">PEImports</a> imports(); // возвращает список импортируемых библиотек
+ <a href="#PEExports">PEExports</a> exports(); // возвращает список экспортируемых функций
+ <a href="#PEResources">PEResources</a> resources(); // возвращает список ресурсов
+ <a href="#PEFixups">PEFixups</a> fixups(); // возвращает список настраиваемых элементов
+ <a href="#MapFunctions">MapFunctions</a> mapFunctions(); // возвращает список доступных для защиты функций
+ <a href="#IntelFunctions">IntelFunctions</a> functions(); // возвращает список защищаемых функций
+ bool addressSeek(uint64 address); // устанавливает файловую позицию
+ uint64 seek(uint64 offset); // устанавливает файловую позицию
+ uint64 tell(); // возвращает файловую позицию
+ int write(string buffer); // записывает буфер в файл
+};
+</pre>
+
+<p id="PESegments">Класс для работы cо списком сегментов для PE архитектуры:</p>
+<pre class="code">
+class PESegments {
+public:
+ <a href="#PESegment">PESegment</a> item(int index); // возвращает сегмент с индексом index
+ int count(); // возвращает количество сегментов в списке
+ <a href="#PESegment">PESegment</a> itemByAddress(uint64 address); // возвращает сегмент с адресом address
+};
+</pre>
+
+<p id="PESegment">Класс для работы c сегментом для PE архитектуры:</p>
+<pre class="code">
+class PESegment {
+public:
+ uint64 address(); // возвращает адрес сегмента
+ string name(); // возвращает имя сегмента
+ uint64 size(); // возвращает размер сегмента
+ int physicalOffset(); // возвращает файловую позицию сегмента
+ int physicalSize(); // возвращает файловый размер сегмента
+ int flags(); // возвращает флаги сегмента
+ bool excludedFromPacking(); // возвращает признак "Исключен из упаковки"
+ void setName(string name); // устанавливает имя сегмента
+};
+</pre>
+
+<p id="PESections">Класс для работы cо списком секций для PE архитектуры:</p>
+<pre class="code">
+class PESections {
+public:
+ <a href="#PESection">PESection</a> item(int index); // возвращает секцию с индексом index
+ int count(); // возвращает количество секций в списке
+ <a href="#PESection">PESection</a> itemByAddress(uint64 address); // возвращает секцию с адресом address
+};
+</pre>
+
+<p id="PESection">Класс для работы с секцией для PE архитектуры:</p>
+<pre class="code">
+class PESection {
+public:
+ uint64 address(); // возвращает адрес секции
+ string name(); // возвращает имя секции
+ uint64 size(); // возвращает размер секции
+ int offset(); // возвращает файловую позицию секции
+ <a href="#PESegment">PESegment</a> segment(); // возвращает родительский сегмент
+};
+</pre>
+
+<p id="PEDirectories">Класс для работы с директориями для PE архитектуры:</p>
+<pre class="code">
+class PEDirectories {
+public:
+ <a href="#PEDirectory">PEDirectory</a> item(int index); // возвращает директорию с индексом index
+ int count(); // возвращает количество директорий в списке
+ <a href="#PEDirectory">PEDirectory</a> itemByType(int type); // возвращает директорию с типом type
+};
+</pre>
+
+<p id="PEDirectory">Класс для работы с директорией для PE архитектуры:</p>
+<pre class="code">
+class PEDirectory {
+public:
+ uint64 address(); // возвращает адрес директории
+ string name(); // возвращает имя директории
+ uint64 size(); // возвращает размер директории
+ int type(); // возвращает тип директории
+ void setAddress(uint64 address); // устанавливает адрес директории
+ void setSize(int size); // устанавливает размер директории
+ void clear(); // очищает адрес и размер директории
+};
+</pre>
+
+<p id="PEImports">Класс для работы со списком импортируемых библиотек для PE архитектуры:</p>
+<pre class="code">
+class PEImports {
+public:
+ <a href="#PEImport">PEImport</a> item(int index); // возвращает библиотеку с индексом index
+ int count(); // возвращает количество библиотек в списке
+ <a href="#PEImport">PEImport</a> itemByName(string name); // возвращает библиотеку с именем name
+};
+</pre>
+
+<p id="PEImport">Класс для работы с импортируемой библиотекой для PE архитектуры:</p>
+<pre class="code">
+class PEImport {
+public:
+ string name(); // возвращает имя библиотеки
+ <a href="#PEImportFunction">PEImportFunction</a> item(int index); // возвращает импортируемую функцию с индексом index
+ int count(); // возвращает количество импортируемых функций
+ void setName(string name); // устанавливает имя библиотеки
+};
+</pre>
+
+<p id="PEImportFunction">Класс для работы с импортируемой функцией для PE архитектуры:</p>
+<pre class="code">
+class PEImportFunction {
+public:
+ uint64 address(); // возвращает адрес ячейки, в которую записывается адрес импортируемой функции
+ string name(); // возвращает имя импортируемой функции
+};
+</pre>
+
+<p id="PEExports">Класс для работы со списком экспортируемых функций для PE архитектуры:</p>
+<pre class="code">
+class PEExports {
+public:
+ string name(); // возвращает имя библиотеки
+ void setName(string name); // устанавливает имя библиотеки
+ <a href="#PEExport">PEExport</a> item(int index); // возвращает экспортируемую функцию с индексом index
+ int count(); // возвращает количество экспортируемых функций в списке
+ void clear(); // очищает список
+ <a href="#PEExport">PEExport</a> itemByAddress(uint64 address); // возвращает экспортируемую функцию с адресом address
+ <a href="#PEExport">PEExport</a> itemByName(string name); // возвращает экспортируемую функцию с именем name
+};
+</pre>
+
+<p id="PEExport">Класс для работы с экспортируемой функцией для PE архитектуры:</p>
+<pre class="code">
+class PEExport {
+public:
+ uint64 address(); // возвращает адрес экспортируемой функции
+ string name(); // возвращает имя экспортируемой функции
+ void setName(string name); // устанавливает имя экспортируемой функции
+ int ordinal(); // возвращает ординал экспортируемой функции
+ string forwardedName(); // возвращает имя функции, на которую перенаправлена экспортируемая функция
+ void destroy(); // уничтожает экспортируемую функцию
+};
+</pre>
+
+<p id="PEResources">Класс для работы со списком ресурсов для PE архитектуры:</p>
+<pre class="code">
+class PEResources {
+public:
+ <a href="#PEResource">PEResource</a> item(int index); // возвращает ресурс с индексом index
+ int count(); // возвращает количество ресурсов в списке
+ void clear(); // очищает список
+ <a href="#PEResource">PEResource</a> itemByType(int type); // возвращает ресурс с типом type
+ <a href="#PEResource">PEResource</a> itemByName(string name); // возвращает ресурс с именем name
+};
+</pre>
+
+<p id="PEResource">Класс для работы с ресурсом для PE архитектуры:</p>
+<pre class="code">
+class PEResource {
+public:
+ <a href="#PEResource">PEResource</a> item(int index); // возвращает ресурс с индексом index
+ int count(); // возвращает количество ресурсов в списке
+ void clear(); // очищает список
+ uint64 address(); // возвращает адрес ресурса
+ int size(); // возвращает размер ресурса
+ string name(); // возвращает имя ресурса
+ int type(); // возвращает тип ресурса
+ bool isDirectory(); // возвращает признак "Директория"
+ void destroy(); // уничтожает ресурс
+ <a href="#PEResource">PEResource</a> itemByName(string name); // возвращает ресурс с именем name
+ bool excludedFromPacking(); // возвращает признак "Исключен из упаковки"
+};
+</pre>
+
+<p id="PEFixups">Класс для работы со списком настраиваемых элементов для PE архитектуры:</p>
+<pre class="code">
+class PEFixups {
+public:
+ <a href="#PEFixup">PEFixup</a> item(int index); // возвращает элемент с индексом index
+ int count(); // возвращает количество элементов в списке
+ <a href="#PEFixup">PEFixup</a> itemByAddress(uint64 address); // возвращает элемент с адресом address
+};
+</pre>
+
+<p id="PEFixup">Класс для работы с настраиваемым элементом для PE архитектуры:</p>
+<pre class="code">
+class PEFixup {
+public:
+ uint64 address(); // возвращает адрес элемента
+};
+</pre>
+
+<h3>Mach-O файлы</h3>
+
+<p id="MacFormat">Константы для работы с Mach-O форматом:</p>
+<pre class="code">
+enum MacFormat {
+ // Load Command Types
+ LC_SEGMENT,
+ LC_SYMTAB,
+ LC_SYMSEG,
+ LC_THREAD,
+ LC_UNIXTHREAD,
+ LC_LOADFVMLIB,
+ LC_IDFVMLIB,
+ LC_IDENT,
+ LC_FVMFILE,
+ LC_PREPAGE,
+ LC_DYSYMTAB,
+ LC_LOAD_DYLIB,
+ LC_ID_DYLIB,
+ LC_LOAD_DYLINKER,
+ LC_PREBOUND_DYLIB,
+ LC_ROUTINES,
+ LC_SUB_FRAMEWORK,
+ LC_SUB_UMBRELLA,
+ LC_SUB_CLIENT,
+ LC_SUB_LIBRARY,
+ LC_TWOLEVEL_HINTS,
+ LC_PREBIND_CKSUM,
+ LC_LOAD_WEAK_DYLIB,
+ LC_SEGMENT_64,
+ LC_ROUTINES_64,
+ LC_UUID,
+ LC_RPATH,
+ LC_CODE_SIGNATURE,
+ LC_SEGMENT_SPLIT_INFO,
+ LC_REEXPORT_DYLIB,
+ LC_LAZY_LOAD_DYLIB,
+ LC_ENCRYPTION_INFO,
+ LC_DYLD_INFO,
+ LC_DYLD_INFO_ONLY,
+ LC_LOAD_UPWARD_DYLIB,
+ LC_VERSION_MIN_MACOSX,
+ // Section Types
+ SECTION_TYPE,
+ SECTION_ATTRIBUTES,
+ S_REGULAR,
+ S_ZEROFILL,
+ S_CSTRING_LITERALS,
+ S_4BYTE_LITERALS,
+ S_8BYTE_LITERALS,
+ S_LITERAL_POINTERS,
+ S_NON_LAZY_SYMBOL_POINTERS,
+ S_LAZY_SYMBOL_POINTERS,
+ S_SYMBOL_STUBS,
+ S_MOD_INIT_FUNC_POINTERS,
+ S_MOD_TERM_FUNC_POINTERS,
+ S_COALESCED,
+ S_GB_ZEROFILL,
+ S_INTERPOSING,
+ S_16BYTE_LITERALS,
+ S_DTRACE_DOF,
+ S_LAZY_DYLIB_SYMBOL_POINTERS,
+ SECTION_ATTRIBUTES_USR,
+ S_ATTR_PURE_INSTRUCTIONS,
+ S_ATTR_NO_TOC,
+ S_ATTR_STRIP_STATIC_SYMS,
+ S_ATTR_NO_DEAD_STRIP,
+ S_ATTR_LIVE_SUPPORT,
+ S_ATTR_SELF_MODIFYING_CODE,
+ S_ATTR_DEBUG,
+ SECTION_ATTRIBUTES_SYS,
+ S_ATTR_SOME_INSTRUCTIONS,
+ S_ATTR_EXT_RELOC,
+ S_ATTR_LOC_RELOC
+};
+</pre>
+
+<p id="MacFile">Класс для работы с Mach-O файлом:</p>
+<pre class="code">
+class MacFile {
+public:
+ string name(); // возвращает имя файла
+ string format(); // возвращает имя формата "Mach-O"
+ uint64 size(); // возвращает размер файла
+ int count(); // возвращает количество архитектур в списке
+ <a href="#MacArchitecture">MacArchitecture</a> item(int index); // возвращает архитектуру с индексом index
+ uint64 seek(uint64 offset); // устанавливает файловую позицию
+ uint64 tell(); // возвращает файловую позицию
+ int write(string buffer); // записывает буфер в файл
+};
+</pre>
+
+<p id="MacArchitecture">Класс для работы с Mach-O архитектурой:</p>
+<pre class="code">
+class MacArchitecture {
+public:
+ string name(); // возвращает имя архитектуры
+ <a href="#MacFile">MacFile</a> file(); // возвращает родительский файл
+ uint64 entryPoint(); // возвращает стартовый адрес
+ <a href="#OperandSize">OperandSize</a> cpuAddressSize(); // возвращает битность архитектуры
+ uint64 size(); // возвращает размер архитектуры
+ <a href="#MacSegments">MacSegments</a> segments(); // возвращает список сегментов
+ <a href="#MacSections">MacSections</a> sections(); // возвращает список секций
+ <a href="#MacCommands">MacCommands</a> commands(); // возвращает список загрузочных команд
+ <a href="#MacSymbols">MacSymbols</a> symbols(); // возвращает список символов
+ <a href="#MacImports">MacImports</a> imports(); // возвращает список импортируемых библиотек
+ <a href="#MacExports">MacExports</a> exports(); // возвращает список экспортируемых функций
+ <a href="#MacFixups">MacFixups</a> fixups(); // возвращает список настраиваемых элементов
+ <a href="#MapFunctions">MapFunctions</a> mapFunctions(); // возвращает список доступных для защиты функций
+ <a href="#IntelFunctions">IntelFunctions</a> functions(); // возвращает список защищаемых функций
+ bool addressSeek(uint64 address); // устанавливает файловую позицию
+ uint64 seek(uint64 offset); // устанавливает файловую позицию
+ uint64 tell(); // возвращает файловую позицию
+ int write(string buffer); // записывает буфер в файл
+};
+</pre>
+
+<p id="MacSegments">Класс для работы cо списком сегментов для Mach-O архитектуры:</p>
+<pre class="code">
+class MacSegments {
+public:
+ <a href="#MacSegment">MacSegment</a> item(int index); // возвращает сегмент с индексом index
+ int count(); // возвращает количество сегментов в списке
+ <a href="#MacSegment">MacSegment</a> itemByAddress(); // возвращает сегмент с адресом address
+};
+</pre>
+
+<p id="MacSegment">Класс для работы c сегментом для Mach-O архитектуры:</p>
+<pre class="code" id="MacSegment">
+class MacSegment {
+public:
+ uint64 address(); // возвращает адрес сегмента
+ string name(); // возвращает имя сегмента
+ uint64 size(); // возвращает размер сегмента
+ int physicalOffset(); // возвращает файловую позицию сегмента
+ int physicalSize(); // возвращает файловый размер сегмента
+ int flags(); // возвращает флаги сегмента
+ bool excludedFromPacking(); // возвращает признак "Исключен из упаковки"
+};
+</pre>
+
+<p id="MacSections">Класс для работы cо списком секций для Mach-O архитектуры:</p>
+<pre class="code">
+class MacSections {
+public:
+ <a href="#MacSection">MacSection</a> item(int index); // возвращает секцию с индексом index
+ int count(); // возвращает количество секций в списке
+ <a href="#MacSection">MacSection</a> itemByAddress(uint64 address); // возвращает секцию с адресом address
+};
+</pre>
+
+<p id="MacSection">Класс для работы c секцией для Mach-O архитектуры:</p>
+<pre class="code">
+class MacSection {
+public:
+ uint64 address(); // возвращает адрес секции
+ string name(); // возвращает имя секции
+ uint64 size(); // возвращает размер секции
+ int offset(); // возвращает файловую позицию секции
+ <a href="#MacSegment">MacSegment</a> segment(); // возвращает родительский сегмент
+};
+</pre>
+
+<p id="MacCommands">Класс для работы cо списком загрузочных команд для Mach-O архитектуры:</p>
+<pre class="code">
+class MacCommands {
+public:
+ <a href="#MacCommand">MacCommand</a> item(int index); // возвращает команду с индексом index
+ int count(); // возвращает количество команд в списке
+ <a href="#MacCommand">MacCommand</a> itemByType(int type); // возвращает команду с типом type
+};
+</pre>
+
+<p id="MacCommand">Класс для работы c загрузочной командой для Mach-O архитектуры:</p>
+<pre class="code">
+class MacCommand {
+public:
+ uint64 address(); // возвращает адрес команды
+ int type(); // возвращает тип команды
+ string name(); // возвращает имя команды
+ int size(); // возвращает размер команды
+};
+</pre>
+
+<p id="MacSymbols">Класс для работы cо списком символов для Mach-O архитектуры:</p>
+<pre class="code">
+class MacSymbols {
+public:
+ <a href="#MacSymbol">MacSymbol</a> item(int index); // возвращает символ с индексом index
+ int count(); // возвращает количество символов в списке
+};
+</pre>
+
+<p id="MacSymbol">Класс для работы c символом для Mach-O архитектуры:</p>
+<pre class="code">
+class MacSymbol {
+public:
+ uint64 value(); // возвращает значение символа
+ string name(); // возвращает имя символа
+};
+</pre>
+
+<p id="MacImports">Класс для работы со списком импортируемых библиотек для Mach-O архитектуры:</p>
+<pre class="code">
+class MacImports {
+public:
+ <a href="#MacImport">MacImport</a> item(int index); // возвращает импортируемую библиотеку с индексом index
+ int count(); // возвращает количество импортируемых библиотек в списке
+ <a href="#MacImport">MacImport</a> itemByName(string name); // возвращает импортируемую библиотеку с именем name
+};
+</pre>
+
+<p id="MacImport">Класс для работы с импортируемой библиотекой для Mach-O архитектуры:</p>
+<pre class="code">
+class MacImport {
+public:
+ string name(); // возвращает имя импортируемой библиотеки
+ <a href="#MacImportFunction">MacImportFunction</a> item(int index); // возвращает импортируемую функцию с индексом index
+ int count(); // возвращает количество импортируемых функций в списке
+ void setName(string name); // устанавливает имя импортируемой библиотеки
+};
+</pre>
+
+<p id="MacImportFunction">Класс для работы с импортируемой функцией для Mach-O архитектуры:</p>
+<pre class="code">
+class MacImportFunction {
+public:
+ uint64 address(); // возвращает адрес ячейки, в которую записывается адрес импортируемой функции
+ string name(); // возвращает имя импортируемой функции
+};
+</pre>
+
+<p id="MacExports">Класс для работы со списком экспортируемых функций для Mach-O архитектуры:</p>
+<pre class="code">
+class MacExports {
+public:
+ string name(); // возвращает имя библиотеки
+ <a href="#MacExport">MacExport</a> item(); // возвращает экспортируемую функцию с индексом index
+ int count(); // возвращает количество экспортируемых функций в списке
+ void clear(); // очищает список
+ <a href="#MacExport">MacExport</a> itemByAddress(uint64 address); // возвращает экспортируемую функцию с адресом address
+ <a href="#MacExport">MacExport</a> itemByName(string name); // возвращает экспортируемую функцию с именем name
+};
+</pre>
+
+<p id="MacExport">Класс для работы с экспортируемой функцией для Mach-O архитектуры:</p>
+<pre class="code">
+class MacExport {
+public:
+ uint64 address(); // возвращает адрес экспортируемой функции
+ string name(); // возвращает имя экспортируемой функции
+ string forwardedName(); // возвращает имя функции, на которую перенаправлена экспортируемая функция
+ void destroy(); // уничтожает экспортируемую функцию
+};
+</pre>
+
+<p id="MacFixups">Класс для работы со списком настраиваемых элементов для Mach-O архитектуры:</p>
+<pre class="code">
+class MacFixups {
+public:
+ <a href="#MacFixup">MacFixup</a> item(int index); // возвращает элемент с индексом index
+ int count(); // возвращает количество элементов в списке
+ <a href="#MacFixup">MacFixup</a> itemByAddress(uint64 address); // возвращает элемент с адресом address
+};
+</pre>
+
+<p id="MacFixup">Класс для работы с настраиваемым элементом для Mach-O архитектуры:</p>
+<pre class="code">
+class MacFixup {
+public:
+ uint64 address(); // возвращает адрес элемента
+};
+</pre>
+
+<h3>Функции</h3>
+
+<p id="MapFunctions">Класс для работы со списком функций:</p>
+<pre class="code">
+class MapFunctions {
+public:
+ <a href="#MapFunction">MapFunction</a> item(int index); // возвращает функцию с индексом index
+ int count(); // возвращает количество функций в списке
+ <a href="#MapFunction">MapFunction</a> itemByAddress(uint64 address); // возвращает функцию с адресом address
+ <a href="#MapFunction">MapFunction</a> itemByName(string name); // возвращает функцию с именем name
+};
+</pre>
+
+<p id="ObjectType">Типы функций:</p>
+<pre class="code">
+enum ObjectType {
+ Unknown,
+ Code,
+ Data,
+ Export,
+ Marker,
+ APIMarker,
+ Import,
+ String
+};
+</pre>
+
+<p id="MapFunction">Класс для работы с функцией:</p>
+<pre class="code">
+class MapFunction {
+public:
+ uint64 address(); // возвращает адрес функции
+ string name(); // возвращает имя функции
+ <a href="#ObjectType">ObjectType</a> type(); // возвращает тип функции
+ <a href="#References">References</a> references(); // возвращает список ссылок
+};
+</pre>
+
+<p id="References">Класс для работы со списком ссылок:</p>
+<pre class="code">
+class References {
+public:
+ <a href="#Reference">Reference</a> item(int index); // возвращает ссылку с индексом index
+ int count(); // возвращает количество ссылок в списке
+};
+</pre>
+
+<p id="Reference">Класс для работы с ссылкой:</p>
+<pre class="code">
+class Reference {
+public:
+ uint64 address(); // возвращает адрес команды
+ uint64 operandAddress(); // возвращает адрес ссылки
+};
+</pre>
+
+<h3>Функции Intel</h3>
+
+<p id="IntelFunctions">Класс для работы со списком функций Intel:</p>
+<pre class="code">
+class IntelFunctions {
+public:
+ <a href="#IntelFunction">IntelFunction</a> item(int index); // возвращает функцию с индексом index
+ int count(); // возвращает количество функций в списке
+ void clear(); // очищает список
+ <a href="#IntelFunction">IntelFunction</a> itemByAddress(uint64 address); // возвращает функцию с адресом address
+ <a href="#IntelFunction">IntelFunction</a> itemByName(string name); // возвращает функцию с именем name
+ <a href="#IntelFunction">IntelFunction</a> addByAddress(uint64 address, <a href="#CompilationType">CompilationType</a> type = ctVirtualization);
+ // добавляет новую функцию с адресом address и типом компиляции type
+};
+</pre>
+
+<p id="CompilationType">Типы компиляции:</p>
+<pre class="code">
+enum CompilationType {
+ None,
+ Virtualization,
+ Mutation,
+ Ultra
+};
+</pre>
+
+<p id="IntelFunction">Класс для работы с функцией Intel:</p>
+<pre class="code">
+class IntelFunction {
+public:
+ uint64 address(); // возвращает адрес функции
+ string name(); // возвращает имя функции
+ <a href="#ObjectType">ObjectType</a> type(); // возвращает тип функции
+ <a href="#IntelCommand">IntelCommand</a> item(int index); // возвращает команду с индексом index
+ int count(); // возвращает количество команд в списке
+ <a href="#CompilationType">CompilationType</a> compilationType(); // возвращает тип компиляции
+ void setCompilationType(<a href="#CompilationType">CompilationType</a> value); // устанавливает тип компиляции
+ <a href="#CommandLinks">CommandLinks</a> links(); // возвращает список связей
+ <a href="#IntelCommand">IntelCommand</a> itemByAddress(uint64 address); // возвращает команду с адресом address
+ void destroy(); // уничтожает функцию
+ <a href="#Folder">Folder</a> folder(); // возвращает пользовательскую папку
+ void setFolder(<a href="#Folder">Folder</a> folder); // устанавливает пользовательскую папку
+};
+</pre>
+
+<p id="IntelCommandType">Типы команд Intel:</p>
+<pre class="code">
+enum IntelCommandType {
+ Unknown, Push, Pop, Mov, Add, Xor, Test, Lea, Ud0, Ret, Ssh, Crc, Call, Jmp,
+ Fstsw, Fsqrt, Fchs, Fstcw, Fldcw, Fild, Fist, Fistp, Fld, Fstp, Fst, Fadd,
+ Fsub, Fsubr, Fisub, Fisubr, Fdiv, Fcomp, Fmul, Repe, Repne, Rep, DB, DW, DD, DQ,
+ Movs, Cmps, Scas, Movzx, Movsx, Inc, Dec, Les, Lds, Lfs, Lgs, Lss, Xadd, Bswap,
+ Jxx, And, Sub, Stos, Lods, Nop, Xchg, Pushf, Popf, Sahf, Lahf, Shl, Shr, Sal,
+ Sar, Rcl, Rcr, Rol, Ror, Shld, Shrd, Loope, Loopne, Loop, Jcxz, In, Ins, Out,
+ Outs, Wait, Cbw, Cwde, Cdqe, Cwd, Cdq, Cqo, Clc, Stc, Cli, Sti, Cld, Std, Not,
+ Neg, Div, Imul, Idiv, Mul, Or, Adc, Cmp, Sbb, Pusha, Popa, Clflush, Pause,
+ Bound, Arpl, Daa, Das, Aaa, Aam, Aad, Aas, Enter, Leave, Int, Into, Iret, Set,
+ Cmov, Addpd, Addps, Addsd, Addss, Andpd, Andps, Andnpd, Andnps, Cmppd, Cmpps,
+ Cmpsd, Cmpss, Comisd, Comiss, Cvtdq2ps, Cvtpd2dq, Cvtdq2pd, Cvtpd2pi, Cvtps2pi,
+ Cvtpd2ps, Cvtps2pd, Cvtpi2pd, Cvtpi2ps, Cvtps2dq, Cvtsd2si, Cvtss2si, Cvtsd2ss,
+ Cvtss2sd, Cvttpd2pi, Cvttps2pi, Cvttpd2dq, Cvttps2dq, Cvttsd2si, Cvttss2si,
+ Divpd, Divps, Divsd, Divss, Maxpd, Maxps, Maxsd, Maxss, Minpd, Minps, Minsd,
+ Minss, Mulpd, Mulps, Mulsd, Mulss, Orpd, Orps, Movd, Movq, Movntq, Movapd, Movaps,
+ Movdqa, Movdqu, Movdq2q, Movq2dq, Movhlps, Movhpd, Movhps, Movlhps, Movlpd,
+ Movlps, Movmskpd, Movmskps, Movnti, Movntpd, Movntps, Movsd, Movss, Movupd,
+ Movups, Pmovmskb, Psadbw, Pshufw, Pshufd, Pshuflw, Pshufhw, Psubb, Psubw, Psubd,
+ Psubq, Psubsb, Psubsw, Psubusb, Psubusw, Paddb, Paddw, Paddd, Paddq, Paddsb,
+ Paddsw, Paddusb, Paddusw, Pavgb, Pavgw, Pinsrw, Pextrw, Pmaxsw, Pmaxub, Pminsw,
+ Pminub, Pmulhuw, Pmulhw, Pmullw, Pmuludq, Psllw, Pslld, Psllq, Pslldq, Psraw,
+ Psrad, Psrlw, Psrld, Psrlq, Psrldq, Punpcklbw, Punpcklwd, Punpckldq, Punpcklqdq,
+ Punpckhqdq, Packusdw, Pcmpgtb, Pcmpgtw, Pcmpgtd, Pcmpeqb, Pcmpeqw, Pcmpeqd,
+ Emms, Packsswb, Packuswb, Punpckhbw, Punpckhwd, Punpckhdq, Packssdw, Pand,
+ Pandn, Por, Pxor, Pmaddwd, Rcpps, Rcpss, Rsqrtss, Movsxd, Shufps, Shufpd, Sqrtpd,
+ Sqrtps, Sqrtsd, Sqrtss, Subpd, Subps, Subsd, Subss, Ucomisd, Ucomiss, Unpckhpd,
+ Unpckhps, Unpcklpd, Unpcklps, Xorpd, Xorps, Bt, Bts, Btr, Btc, Xlat, Cpuid,
+ Rsm, Bsf, Bsr, Cmpxchg, Cmpxchg8b, Hlt, Cmc, Lgdt, Sgdt, Lidt, Sidt, Smsw, Lmsw,
+ Invlpg, Lar, Lsl, Clts, Invd, Wbinvd, Ud2, Wrmsr, Rdtsc, Rdmsr, Rdpmc, Fcom,
+ Fdivr, Fiadd, Fimul, Ficom, Ficomp, Fidiv, Fidivr, Faddp, Fmulp, Fsubp, Fsubrp,
+ Fdivp, Fdivrp, Fbld, Fbstp, Ffree, Frstor, Fsave, Fucom, Fucomp, Fldenv, Fstenvm,
+ Fxch, Fabs, Fxam, Fld1, Fldl2t, Fldl2e, Fldpi, Fldlg2, Fldln2, Fldz, Fyl2x,
+ Fptan, Fpatan, Fxtract, Fprem1, Fdecstp, Fincstp, Fprem, Fyl2xp1, Fsincos, Frndint,
+ Fscale, Fsin, Fcos, Ftst, Fstenv, F2xm1, Fnop, Finit, Fclex, Fcompp, Sysenter,
+ Sysexit, Sldt, Str, Lldt, Ltr, Verr, Verw, Sfence, Lfence, Mfence, Prefetchnta,
+ Prefetcht0, Prefetcht1, Prefetcht2, Prefetch, Prefetchw, Fxrstor, Fxsave, Ldmxcsr,
+ Stmxcsr, Fcmovb, Fcmove, Fcmovbe, Fcmovu, Fcmovnb, Fcmovne, Fcmovnbe, Fcmovnu,
+ Fucomi, Fcomi, Fucomip, Fcomip, Fucompp, Vmcall, Vmlaunch, Vmresume, Vmxoff,
+ Monitor, Mwait, Xgetbv, Xsetbv, Vmrun, Vmmcall, Vmload, Vmsave, Stgi, Clgi,
+ Skinit, Invlpga, Swapgs, Rdtscp, Syscall, Sysret, Femms, Getsec, Pshufb, Phaddw,
+ Phaddd, Phaddsw, Pmaddubsw, Phsubw, Phsubd, Phsubsw, Psignb, Psignw, Psignd,
+ Pmulhrsw, Pabsb, Pabsw, Pabsd, Movbe, Palignr, Rsqrtps, Vmread, Vmwrite, Svldt,
+ Rsldt, Svts, Rsts, Xsave, Xrstor, Vmptrld, Vmptrst, Maskmovq, Fnstenv, Fnstcw,
+ Fstp1, Fneni, Fndisi, Fnclex, Fninit, Fsetpm, Fisttp, Fnsave, Fnstsw, Fxch4,
+ Fcomp5, Ffreep, Fxch7, Fstp8, Fstp9, Haddpd, Hsubpd, Addsubpd, Addsubps, Movntdq,
+ Fcom2, Fcomp3, Haddps, Hsubps, Movddup, Movsldup, Cvtsi2sd, Cvtsi2ss, Movntsd,
+ Movntss, Lddqu, Movshdup, Popcnt, Tzcnt, Lzcnt, Pblendvb, Pblendps, Pblendpd,
+ Ptest, Movsxbw, Movsxbd, Movsxbq, Movsxwd, Movsxwq, Movsxdq, Muldq, Pcmpeqq,
+ Movntdqa, Xsaveopt, Maskmovdqu, Ud1, Pcmpgtq, Movzxbw, Movzxbd, Movzxbq, Movzxwd,
+ Movzxwq, Movzxdq
+};
+</pre>
+
+<p id="IntelSegment">Сегменты Intel:</p>
+<pre class="code">
+enum IntelSegment {
+ None,
+ es,
+ cs,
+ ss,
+ ds,
+ fs,
+ gs
+};
+</pre>
+
+<p id="IntelFlag">Флаги Intel:</p>
+<pre class="code">
+enum IntelFlag {
+ C,
+ P,
+ A,
+ Z,
+ S,
+ T,
+ I,
+ D,
+ O
+};
+</pre>
+
+<p id="IntelRegistr">Регистры Intel:</p>
+<pre class="code">
+enum IntelRegistr {
+ eax,
+ ecx,
+ edx,
+ ebx,
+ esp,
+ ebp,
+ esi,
+ edi,
+ r8,
+ r9,
+ r10,
+ r11,
+ r12,
+ r13,
+ r14,
+ r15
+};
+</pre>
+
+<p id="IntelCommand">Класс для работы с командой Intel:</p>
+<pre class="code">
+class IntelCommand {
+public:
+ uint64 address(); // возвращает адрес команды
+ <a href="#IntelCommandType">IntelCommandType</a> type(); // возвращает тип команды
+ string text(); // возвращает текстовое представление
+ int size(); // возвращает размер команды
+ int dump(int index); // возвращает данные команды по индексу index
+ <a href="#CommandLink">CommandLink</a> link(); // возвращает связь команды
+ int flags(); // возвращает флаги команды
+ <a href="#IntelSegment">IntelSegment</a> baseSegment(); // возвращает базовый сегмент
+ <a href="#IntelCommandType">IntelCommandType</a> preffix(); // возвращает тип преффиксной команды
+ <a href="#IntelOperand">IntelOperand</a> operand(int index); // возвращает операнд с индексом index
+};
+</pre>
+
+<p id="OperandType">Типы операндов:</p>
+<pre class="code">
+enum OperandType {
+ None,
+ Value,
+ Registr,
+ Memory,
+ SegmentRegistr,
+ ControlRegistr,
+ DebugRegistr,
+ FPURegistr,
+ HiPartRegistr,
+ BaseRegistr,
+ MMXRegistr,
+ XMMRegistr
+};
+</pre>
+
+<p id="OperandSize">Размеры операндов:</p>
+<pre class="code">
+enum OperandSize {
+ Byte,
+ Word,
+ DWord,
+ QWord,
+ TByte,
+ OWord,
+ FWord
+};
+</pre>
+
+<p id="IntelOperand">Класс для работы с операндом команды Intel:</p>
+<pre class="code">
+class IntelOperand {
+public:
+ int type(); // возвращает тип операнда
+ <a href="#OperandSize">OperandSize</a> size(); // возвращает размер операнда
+ int registr(); // возвращает регистр
+ int baseRegistr(); // возвращает базовый регистр
+ int scale(); // возвращает коэффициент
+ uint64 value(); // возвращает значение
+};
+</pre>
+
+<p id="CommandLinks">Класс для работы со списком связей:</p>
+<pre class="code" id="CommandLinks">
+class CommandLinks {
+public:
+ <a href="#CommandLink">CommandLink</a> item(int index); // возвращает связь с индексом index
+ int count(); // возвращает количество связей в списке
+};
+</pre>
+
+<p id="LinkType">Типы связей:</p>
+<pre class="code">
+enum LinkType {
+ None,
+ SEHBlock,
+ FinallyBlock,
+ DualSEHBlock,
+ FilterSEHBlock,
+ Jmp,
+ JmpWithFlag,
+ JmpWithFlagNSFS,
+ JmpWithFlagNSNA,
+ JmpWithFlagNSNS,
+ Call,
+ Case,
+ Switch,
+ Native,
+ Offset,
+ GateOffset,
+ ExtSEHBlock,
+ MemSEHBlock,
+ ExtSEHHandler,
+ VBMemSEHBlock
+};
+</pre>
+
+<p id="CommandLink">Класс для работы со связью команды:</p>
+<pre class="code">
+class CommandLink {
+public:
+ uint64 toAddress(); // возвращает адрес, на который ссылается связь
+ <a href="#LinkType">LinkType</a> type(); // возвращает тип связи
+ <a href="#IntelCommand">IntelCommand</a> from(); // возвращает родительскую команду
+};
+</pre>
+
+<p id="FFILibrary">Класс для работы с библиотекой:</p>
+<pre class="code">
+enum ParamType {
+ "void",
+ "byte",
+ "char",
+ "short",
+ "ushort",
+ "int",
+ "uint",
+ "long",
+ "ulong",
+ "size_t",
+ "float",
+ "double",
+ "string",
+ "pointer"
+};
+
+enum CallType {
+ "default",
+ "cdecl",
+ "stdcall"
+};
+
+class FFILibrary {
+public:
+ string name(); // возвращает имя
+ uint64 address(); // возвращает адрес в памяти
+ void close();
+ FFIFunction getFunction(string name, ParamType ret, ParamType param1, ...); // возвращает функцию
+ FFIFunction getFunction(string name, table (ParamType ret, CallType abi, ParamType, ...)); // возвращает функцию
+};
+</pre>
+
+<p id="FFIFunction">Класс для работы с внешней функцией:</p>
+<pre class="code">
+class FFIFunction {
+ string name(); // возвращает имя
+ uint64 address(); // возвращает адрес в памяти
+};
+</pre>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/help/ru/script_events.htm b/help/ru/script_events.htm
new file mode 100644
index 0000000..9022dc0
--- /dev/null
+++ b/help/ru/script_events.htm
@@ -0,0 +1,91 @@
+<!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>События</title>
+</head>
+
+<body>
+ <h1>События</h1>
+
+ <p>Встроенный скриптовый язык является эффективным инструментом
+ автоматизации создания защищенных приложений с помощью VMProtect.
+ Вызов процедур и функций, необходимых на разных этапах создания
+ защищаемого файла, осуществляется через события, обрабатываемые
+ ядром VMProtect. При создании скриптов можно установить
+ собственные обработчики для 5-ти событий, которые вызываются
+ ядром протектора в следующем порядке:</p>
+
+ <ul>
+ <li><a href="#OnBeforeCompilation">OnBeforeCompilation</a></li>
+ <li><a href="#OnBeforeSaveFile">OnBeforeSaveFile</a></li>
+ <li><a href="#OnBeforePackFile">OnBeforePackFile</a></li>
+ <li><a href="#OnAfterSaveFile">OnAfterSaveFile</a></li>
+ <li><a href="#OnAfterCompilation">OnAfterCompilation</a></li>
+ </ul>
+ <a name="OnBeforeCompilation"/><pre class="code">function OnBeforeCompilation()
+
+end</pre>
+
+ <p>Событие вызывается на этапе формирования списка защищаемых
+ объектов. В обработчике OnBeforeCompilation можно добавить в
+ проект новые процедуры, а также изменить или удалить уже
+ существующие.</p>
+ <a name="OnBeforeSaveFile"/><pre class="code">function OnBeforeSaveFile()
+
+end</pre>
+
+ <p>Событие вызывается перед записью в выходной файл всех объектов, созданных в
+ результате компиляции. В обработчике события
+ OnBeforeSaveFile можно изменить как сам файл, так и некоторые его
+ свойства (например, список ресурсов, список экспортируемых
+ функций, имена секций и т.д.), которые впоследствии будут
+ автоматически записаны в выходной файл.</p>
+
+ <a name="OnBeforePackFile"/><pre class="code">function OnBeforePackFile()
+
+end</pre>
+
+ <p>Событие вызывается перед упаковкой защищенного файла
+ приложения. Используя OnBeforePackFile можно внести изменения в
+ файл, который будет упакован. Данное событие вызывается только
+ при использовании опции "Упаковать выходной файл".</p>
+
+ <a name="OnAfterSaveFile"/><pre class="code">function OnAfterSaveFile()
+
+end</pre>
+
+ <p>Событие вызывается после записи всех объектов, созданных в
+ результате компиляции, в выходной файл. В обработчике события
+ можно добавить в выходной файл новые данные или изменить ранее
+ записанные.</p>
+
+ <a name="OnAfterCompilation"/><pre class="code">function OnAfterCompilation()
+
+end</pre>
+
+ <p>Событие вызывается после компиляции всех объектов, входящих в
+ проект. На данном этапе пользователю доступен откомпилированный
+ файл, над которым могут быть выполнены любые необходимые
+ действия, например добавление электронной подписи
+ (сертификата).</p><br/>
+
+ <p>При написании обработчиков событий можно создавать собственные
+ процедуры и функции. Имена событий отображаются в редакторе
+ скрипта жирным шрифтом.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/script_functions.htm b/help/ru/script_functions.htm
new file mode 100644
index 0000000..9b27aee
--- /dev/null
+++ b/help/ru/script_functions.htm
@@ -0,0 +1,53 @@
+<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>Встроенные функции</title>
+</head>
+
+<body>
+ <h1>Встроенные функции</h1>
+
+ <p>Помимо методов и свойств классов скриптового языка
+ пользователю VMProtect доступны функции, дающие возможность
+ выполнить ряд основных операций. Среди этих функций присутствуют
+ как общесистемные функции, позволяющие работать со строками,
+ датами и числами, использовать командную строку программы,
+ выводить различные сообщения и т.д., так и специализированные
+ функции, позволяющие работать с ядром VMProtect и водяными
+ знаками:</p>
+
+ <ul>
+ <li><a href="http://www.lua.org/manual/5.2/manual.html#6.4">string</a></li>
+ <li><a href="http://www.lua.org/manual/5.2/manual.html#6.5">table</a></li>
+ <li><a href="http://www.lua.org/manual/5.2/manual.html#6.6">math</a></li>
+ <li><a href="http://www.lua.org/manual/5.2/manual.html#6.7">bit32</a></li>
+ <li><a href="http://www.lua.org/manual/5.2/manual.html#6.8">io</a></li>
+ <li><a href="http://www.lua.org/manual/5.2/manual.html#6.9">os</a></li>
+ <li><a href="#VMProtect">vmprotect</a></li>
+ </ul>
+ <a name="VMProtect"></a>
+ <pre class="code">
+namespace vmprotect {
+ <a href="script_classes.htm#Core">Core</a> core(); // возвращает ядро VMProtect
+ string extractFilePath(string name); // извлекает путь файла
+ string extractFileName(string name); // извлекает имя файла
+ string extractFileExt(string name); // извлекает расширение файла
+ table commandLine(); // возвращает командную строку
+ <a href="script_classes.htm#FFILibrary">FFILibrary</a> openLib(string name); // открывает библиотеку
+};
+</pre>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/sdk_functions.htm b/help/ru/sdk_functions.htm
new file mode 100644
index 0000000..fb00684
--- /dev/null
+++ b/help/ru/sdk_functions.htm
@@ -0,0 +1,205 @@
+<!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>Функции SDK</title>
+</head>
+
+<body>
+ <h1>Функции SDK</h1>
+
+ <p>Функции SDK предназначены для интеграции в исходный код
+ защищаемого приложения и служат для задания границ защищаемых
+ областей, обнаружения использования средств отладки или
+ виртуализации.</p>
+
+ <p><strong>Маркеры кода</strong></p>
+
+ <ul>
+ <li><a href="#VMProtectBegin">VMProtectBegin</a></li>
+ <li><a href="#VMProtectBeginVirtualization">VMProtectBeginVirtualization</a></li>
+ <li><a href="#VMProtectBeginMutation">VMProtectBeginMutation</a></li>
+ <li><a href="#VMProtectBeginUltra">VMProtectBeginUltra</a></li>
+ <li><a href="#VMProtectBeginVirtualizationLockByKey">VMProtectBeginVirtualizationLockByKey</a></li>
+ <li><a href="#VMProtectBeginUltraLockByKey">VMProtectBeginUltraLockByKey</a></li>
+ <li><a href="#VMProtectEnd">VMProtectEnd</a></li>
+ </ul>
+
+ <p><strong>Сервисные функции</strong></p>
+
+ <ul>
+ <li><a href="#VMProtectIsProtected">VMProtectIsProtected</a></li>
+ <li><a href="#VMProtectIsDebuggerPresent">VMProtectIsDebuggerPresent</a></li>
+ <li><a href="#VMProtectIsVirtualMachinePresent">VMProtectIsVirtualMachinePresent</a></li>
+ <li><a href="#VMProtectIsValidImageCRC">VMProtectIsValidImageCRC</a></li>
+ <li><a href="#VMProtectDecryptStringA">VMProtectDecryptStringA</a></li>
+ <li><a href="#VMProtectDecryptStringW">VMProtectDecryptStringW</a></li>
+ <li><a href="#VMProtectFreeString">VMProtectFreeString</a></li>
+ </ul>
+
+ <p><strong>Функции лицензирования</strong></p>
+
+ <ul>
+ <li><a href="manager/usage/api.htm">VMProtectSetSerialNumber</a></li>
+ <li><a href="manager/usage/api.htm">VMProtectGetSerialNumberState</a></li>
+ <li><a href="manager/usage/api.htm">VMProtectGetSerialNumberData</a></li>
+ <li><a href= "manager/usage/api.htm">VMProtectGetCurrentHWID</a></li>
+ </ul>
+
+ <p id="VMProtectBegin"><strong>VMProtectBegin</strong></p>
+ <pre class="code">void VMProtectBegin(const char *MarkerName);
+</pre>
+
+ <p><a href="use_markers.htm">Маркер</a> начала защищаемой области
+ кода. Вызов VMProtectBegin должен находиться перед первой
+ командой (вызовом процедуры, функции) защищаемого блока кода.
+ MarkerName задает имя маркера, которое в VMProtect будет иметь
+ вид "VMProtectMarker"+MarkerNamе. Например, маркер
+ VMProtectBegin('CheckRegistration') будет выглядеть как
+ VMProtectMarker "CheckRegistration". Если имя маркера не задано,
+ ему будет присвоено уникальное имя вида "VMProtectMarker"+номер
+ маркера по порядку. <a href=
+ "project_functions.htm#CompilationTypes">Тип компиляции</a>
+ защищаемой области задается при обработке проекта в
+ VMProtect.</p>
+
+ <p id="VMProtectBeginVirtualization"><strong>VMProtectBeginVirtualization</strong></p>
+ <pre class="code">void VMProtectBeginVirtualization(const char *MarkerName);
+</pre>
+
+ <p>Маркер начала защищаемой области кода с предустановленным
+ типом компиляции "виртуализация". MarkerName задает <a href="#VMProtectBegin">имя маркера</a>.
+ При дальнейшей работе с VMProtect тип
+ компиляции, заданный маркером, изменить нельзя.</p>
+
+ <p id="VMProtectBeginMutation"><strong>VMProtectBeginMutation</strong></p>
+ <pre class="code">void VMProtectBeginMutation(const char *MarkerName);
+</pre>
+
+ <p>Маркер начала защищаемой области кода с предустановленным
+ типом компиляции "мутация". MarkerName задает <a href="#VMProtectBegin">имя маркера</a>.
+ При дальнейшей работе с VMProtect тип компиляции,
+ заданный маркером изменить, нельзя.</p>
+
+ <p id="VMProtectBeginUltra"><strong>VMProtectBeginUltra</strong></p>
+ <pre class="code">void VMProtectBeginUltra(const char *MarkerName);
+</pre>
+
+ <p>Маркер начала защищаемой области кода с предустановленным
+ типом компиляции "ультра (мутация + виртуализация)". MarkerName
+ задает <a href="#VMProtectBegin">имя маркера</a>. При дальнейшей работе с
+ VMProtect тип компиляции, заданный маркером, изменить
+ нельзя.</p>
+
+ <p id="VMProtectBeginVirtualizationLockByKey"><strong>VMProtectBeginVirtualizationByKey</strong></p>
+ <pre class="code">void VMProtectBeginVirtualizationLockByKey(const char *MarkerName);
+</pre>
+
+ <p>Маркер начала защищаемой области кода с предустановленным
+ типом компиляции "виртуализация" и опцией "<a href=
+ "project_functions.htm#LockToKey">Привязать к ключу</a>".
+ MarkerName задает <a href="#VMProtectBegin">имя маркера</a>. При
+ дальнейшей работе с VMProtect тип компиляции, заданный маркером,
+ изменить нельзя.</p>
+
+ <p id="VMProtectBeginUltraLockByKey"><strong>VMProtectBeginUltraLockByKey</strong></p>
+ <pre class="code">void VMProtectBeginUltraLockByKey(const char *MarkerName);
+</pre>
+
+ <p>Маркер начала защищаемой области кода с предустановленным
+ типом компиляции "ультра (мутация + виртуализация)" и опцией
+ "<a href="project_functions.htm#LockToKey">Привязать к
+ ключу</a>". MarkerName задает <a href="#VMProtectBegin">имя маркера</a>.
+ При дальнейшей работе с VMProtect тип компиляции, заданный
+ маркером, изменить нельзя.</p>
+
+ <p id="VMProtectEnd"><strong>VMProtectEnd</strong></p>
+ <pre class="code">void VMProtectEnd(void);
+</pre>
+
+ <p>Маркер конца защищаемой области кода. Вызов VMProtectEnd
+ должен находиться после последней команды (вызова процедуры,
+ функции) защищаемого блока кода.</p>
+
+ <p id="VMProtectIsProtected"><strong>VMProtectIsProtected</strong></p>
+ <pre class="code">bool VMProtectIsProtected(void);
+</pre>
+
+ <p>Функция MProtectIsProtected возвращает True если файл обработан VMProtect.</p>
+
+ <p id="VMProtectIsDebuggerPresent"><strong>VMProtectIsDebuggerPresent</strong></p>
+ <pre class="code">bool VMProtectIsDebuggerPresent(bool CheckKernelMode);
+</pre>
+
+ <p>Функция VMProtectIsDebuggerPresent позволяет определить факт
+ запуска приложения из-под отладчика. Результат ее работы
+ (True/False) может быть обработан с помощью защитных механизмов,
+ встроенных в приложение. При CheckKernelMode=False функция
+ проверяет наличие отладчика User-mode (OllyDBG, WinDBG и т.п.).
+ При CheckKernelMode=True будет производиться определение как
+ отладчиков User-mode, так и отладчиков Kernel-mode (SoftICE,
+ Syser и т.п.). При защите драйверов значение CheckKernelMode не
+ имеет значения, так как драйвера работают в режиме ядра, поэтому
+ для них всегда проверяется наличие отладчиков
+ Kernel-mode.</p>
+
+ <p id="VMProtectIsVirtualMachinePresent"><strong>VMProtectIsVirtualMachinePresent</strong></p>
+ <pre class="code">bool VMProtectIsVirtualMachinePresent(void);
+</pre>
+
+ <p>Функция VMProtectIsVirtualMachinePresent позволяет определить
+ факт запуска приложения в виртуальной среде: VMware, Virtual PC,
+ VirtualBox, Sandboxie. Результат ее работы (True/False) может
+ быть обработан с помощью защитных механизмов, встроенных в
+ приложение.</p>
+
+ <p id="VMProtectIsValidImageCRC"><strong>VMProtectIsValidImageCRC</strong></p>
+ <pre class="code">bool VMProtectIsValidImageCRC(void);
+</pre>
+
+ <p>Функция VMProtectIsValidImageCRC позволяет определить факт
+ изменения защищенного модуля в памяти процесса (проверяются только неизменяемые сегменты кода и данных).
+ Результат ее работы (True/False) может быть обработан с помощью защитных механизмов, встроенных в
+ приложение.</p>
+
+ <p id="VMProtectDecryptStringA"><strong>VMProtectDecryptStringA</strong></p>
+ <pre class="code">const char * VMProtectDecryptStringA(const char *Value);
+</pre>
+
+ <p>Функция VMProtectDecryptStringA позволяет дешифровать
+ строковую ANSI константу Value. Для шифрации константы её
+ необходимо <a href="project_functions.htm#AddFunction">включить
+ в список защищаемых объектов</a>.</p>
+
+ <p id="VMProtectDecryptStringW"><strong>VMProtectDecryptStringW</strong></p>
+ <pre class="code">const wchar_t * VMProtectDecryptStringW(const wchar_t *Value);
+</pre>
+
+ <p>Функция VMProtectDecryptStringW позволяет дешифровать
+ строковую Unicode константу Value. Для шифрации константы её
+ необходимо <a href="project_functions.htm#AddFunction">включить
+ в список защищаемых объектов</a>.</p>
+
+ <p id="VMProtectFreeString"><strong>VMProtectFreeString</strong></p>
+ <pre class="code">bool VMProtectFreeString(const void *Value);
+</pre>
+
+ <p>Функция VMProtectFreeString освобождает динамическую память, занятую расшифрованной строкой. Освобождение делать не обязательно, но если делать - то только этой функцией.
+ Повторное использование VMProtectDecryptStringA/VMProtectDecryptStringW с тем же параметром и без уничтожения ранее
+ расшифрованной строки не будет приводить к дополнительному выделению памяти.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/software_protection.htm b/help/ru/software_protection.htm
new file mode 100644
index 0000000..6a3a482
--- /dev/null
+++ b/help/ru/software_protection.htm
@@ -0,0 +1,126 @@
+<!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>Изучение, взлом и защита программного обеспечения</title>
+</head>
+
+<body>
+ <h1>Изучение, взлом и защита программного обеспечения</h1>
+
+ <p>Изучение программного продукта может осуществляться методом
+ статического и/или динамического анализа. При статическом анализе
+ разработка алгоритма взлома защиты производится на основе анализа
+ результатов дизассемблирования или декомпиляции взламываемой
+ программы. Динамический анализ чаще всего применяют при взломе
+ программных продуктов, исполняемый код которых зашифрован или
+ динамически изменяется, так как статический анализ подобных
+ программ сопряжен с определенными трудностями.</p>
+
+ <p>Для динамического анализа взламываемую программу запускают в
+ среде отладчика, при этом становится возможным контроль всех
+ изменений, возникающих в процессе функционирования приложения. В
+ процессе динамического анализа, используя режим отладки,
+ производят пошаговое прохождение "защитных" алгоритмов программы,
+ в частности алгоритмов проверки и генерации корректного
+ регистрационного кода. Еще одним средством, применяемым при
+ динамическом анализе, являются мониторы активности, отслеживающие
+ обращение взламываемой программы к файлам, системным сервисам,
+ портам и внешним устройствам.</p>
+
+ <p>Основным инструментом, применяемым для защиты приложений от
+ взлома, являются <a href=
+ "dictionary.htm#Protector">программы-протекторы</a>. Защита,
+ реализуемая большинством протекторов, заключается в том, что они
+ <a href="dictionary.htm#Pack">упаковывают</a> и/или <a href=
+ "dictionary.htm#Crypt">шифруют</a> исходный исполняемый файл,
+ уделяя основное внимание защите процедуры распаковки/расшифровки
+ файла.</p>
+
+ <p>Подобный алгоритм работы протекторов очень часто оказывается
+ причиной недостаточной степени защиты обеспечиваемой большинством
+ из них. В случае если приложение защищено с использованием
+ упаковки, по окончании работы распаковщика в распоряжении
+ злоумышленника может оказаться исходный файл, который может быть
+ получен при дампе определенной области памяти. Более того, для
+ борьбы с самыми распространенными протекторами взломщики
+ разработали множество программных инструментов, позволяющих
+ взламывать защиту в автоматическом режиме. Аналогичный подход
+ применяется при борьбе с шифрованием: после получения
+ лицензионного ключа, который в том числе может быть легально
+ приобретен, взломщик сможет расшифровать защищенные участки
+ кода.</p>
+
+ <p>Ряд программ-протекторов применяют различные антиотладочные
+ приемы. Однако применение антиотладки значительно снижает
+ быстродействие программы. Также следует помнить, что
+ антиотладочные приемы действенны лишь против динамического
+ анализа и совершенно не эффективны против статического. Более
+ того, все антиотладочные приемы, применяемые в современных
+ протекторах, уже давно изучены, а взломщиками написано множество
+ утилит, которые их полностью нейтрализуют. На эффективность
+ использования мониторов активности встроенные в приложение
+ средства защиты от отладки не влияют.</p>
+
+ <p>Более эффективными методами защиты приложения являются
+ <a href="dictionary.htm#Obfuscation">обфускация</a> и <a href=
+ "dictionary.htm#Virtualization">виртуализация</a>, усложняющие
+ анализ кода защищаемого приложения. В общем случае эффективность
+ данных методов достигается за счет использования особенностей
+ человеческого фактора - чем сложнее исходный код, чем больше
+ ресурсов использует приложение, тем человеку его анализирующему
+ тяжелее понять логику работы программы, а следовательно, и
+ взломать примененные средства защиты.</p>
+
+ <p>При обфускации производится запутывание кода приложения за
+ счет введения дополнительных инструкций. При виртуализации
+ исходный код преобразуется в <a href=
+ "dictionary.htm#ByteCode">байт-код</a>, выполнение которого
+ осуществляется на специальном интерпретаторе, имитирующем
+ виртуальную машину со специфической системой команд.
+ Следовательно, применение виртуализации приводит к высокой и
+ неснижаемой степени запутанности результирующего кода, а при
+ определенном подходе к реализации этого метода защищенный код не
+ содержит методов восстановления оригинального кода в явном виде.
+ Таким образом, важнейшим преимуществом виртуализации является то,
+ что в момент выполнения виртуализированного участка кода не
+ происходит его обратного преобразования в машинные коды
+ процессора, а это исключает возможность получения взломщиком
+ оригинального кода приложения.</p>
+
+ <p>Задача обратного инжиниринга виртуализированных фрагментов
+ сводится к изучению архитектуры <a href=
+ "dictionary.htm#VirtualMachine">виртуальной машины</a>, созданию
+ дизассемблера, соответствующего архитектуре имитируемого
+ виртуальной машиной процессора, и анализу дизассемблированного
+ кода. При определенном подходе к реализации виртуальной машины
+ задача создания дизассемблера виртуализированного кода становится
+ достаточно трудоемкой. Единственным недостатком виртуализации
+ является сравнительно низкая скорость работы, поэтому этот метод
+ следует применять только для защиты участков кода, некритичных к
+ скорости исполнения.</p>
+
+ <p>В подавляющем большинстве современных протекторов методы
+ обфускации и виртуализации играют второстепенную роль, а уровень
+ их реализации недостаточен, что позволяет взломщикам выполнять
+ снятие подобной защиты в автоматизированном или ручном режиме.
+ Еще одним слабым местом многих современных протекторов является
+ использование недокументированных функций Windows, что создает
+ ограничения для использования приложения в новых версиях
+ операционной системы или при включенном режиме DEP.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/terms.htm b/help/ru/terms.htm
new file mode 100644
index 0000000..8d96a49
--- /dev/null
+++ b/help/ru/terms.htm
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+ <link rel="Stylesheet" type="text/css" href="default.css" />
+ <meta http-equiv="Content-Type" content=
+ "text/html; charset=utf-8" />
+ <meta name="AppleIcon" content="VMProtect.help/logo.png" />
+ <meta name="AppleTitle" content="VMProtect 3.0 Help" />
+
+ <title>Введение</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ div.c2 {align:center}
+ hr.c1 {height:1px;border-width:0;color:gray;background-color:gray}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Введение</h1>
+
+ <p>Идеального способа защиты программного обеспечения от
+ несанкционированного использования и распространения не
+ существует. Ни одна существующая система не обеспечит абсолютную
+ защиту и не лишит потенциального взломщика самой возможности ее
+ нейтрализации. Однако использование качественной и эффективной
+ защиты может максимально усложнить процесс взлома программного
+ продукта, более того, сделать взлом нецелесообразным с точки
+ зрения потраченного на это времени и усилий. При создании защиты
+ программного продукта могут преследоваться различные цели и
+ решаться разнообразные задачи, однако основа любой схемы защиты -
+ защита приложения от изучения, так как именно устойчивость к
+ обратной инженерии определяет эффективность защиты в целом.</p>
+
+ <ul>
+ <li><a href="dictionary.htm">Словарь терминов</a></li>
+
+ <li><a href="software_protection.htm">Изучение, взлом и
+ защита программного обеспечения</a></li>
+
+ <li><a href="about_vmprotect.htm">Что такое
+ VMProtect?</a></li>
+
+ <li><a href="recommendations.htm">Рекомендации по
+ защите</a></li>
+ </ul>
+
+ <div class=unhide_if_no_site style="visibility:hidden">
+ <h2>См. также</h2>
+
+ <ul>
+ <li><a href="http://vmpsoft.com/support/user-manual-v3/">Версию
+ этого руководства на сайте (самую актуальную)</a></li>
+ </ul>
+ </div>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/toolbar.htm b/help/ru/toolbar.htm
new file mode 100644
index 0000000..2ff8dae
--- /dev/null
+++ b/help/ru/toolbar.htm
@@ -0,0 +1,39 @@
+<!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>Панель инструментов</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Панель инструментов</h1>
+
+ <p>Панель инструментов состоит из следующих элементов:</p>
+
+ <ul>
+ <li>Открытие проекта или защищаемого файла: <img src="images/button_open.png" /></li>
+ <li>Cохранение проекта: <img src="images/button_save.png" /></li>
+ <li>Название защищаемого файла: <br /> <img src="images/button_project.png" /></li>
+ <li>Компиляция проекта: <img src="images/button_compilation.png" /></li>
+ <li>Запуск оригинального/защищенного файла (нажатием на стрелочку можно задать параметры командной строки): <img src="images/button_execute.png" /></li>
+ <li>Часто используемая операция (зависит от выбранного раздела): <br /><img src="images/button_action.png" /></li>
+ <li>Cтрока быстрого поиска: <br /><img src="images/button_search.png" /></li>
+ </ul>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/use_map_file.htm b/help/ru/use_map_file.htm
new file mode 100644
index 0000000..88c0fce
--- /dev/null
+++ b/help/ru/use_map_file.htm
@@ -0,0 +1,55 @@
+<!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>Использование MAP-файла</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Использование MAP-файла</h1>
+
+ <p>Для создания MAP-файла необходимо включить соответствующую
+ опцию в настройках компилятора.</p>
+
+ <h3>Visual Studio</h3>
+
+ <p>Если для разработки приложения используется Visual Studio, эту
+ операцию выполняют следующим образом: используя главное меню IDE
+ Visual Studio, входят в свойства проекта (Project - Properties),
+ где на вкладке "Linker - Debugging" переводят переключатель
+ "Generate MAP File" в положение "Yes (/MAP)":</p>
+ <p><img src="images/visual_studio_map.png" /></p>
+
+ <h3>Borland Delphi</h3>
+
+ <p>Если для разработки приложения используется Borland Delphi,
+ эту операцию выполняют следующим образом: используя главное меню
+ IDE Delphi, входят в свойства проекта (Project - Options), где на
+ вкладке "Linker" переводят переключатель секции "MAP file" в
+ положение "Detailed":</p>
+ <p><img src="images/delphi_map.png" /></p>
+
+ <p>После включения генерации MAP-файла необходимо полностью
+ перекомпилировать проект.</p>
+
+ <p>При загрузке MAP-файла VMProtect сравнивает дату и время
+ модификации защищаемого файла и MAP-файла, и в случае их отличия
+ MAP-файл не будет загружен.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/use_markers.htm b/help/ru/use_markers.htm
new file mode 100644
index 0000000..d86c80f
--- /dev/null
+++ b/help/ru/use_markers.htm
@@ -0,0 +1,134 @@
+<!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>Использование маркеров</title>
+ <style type="text/css">
+/*<![CDATA[*/
+ div.c2 {text-align: center}
+ /*]]>*/
+ </style>
+</head>
+
+<body>
+ <h1>Использование маркеров</h1>
+
+ <p>Для защиты отдельных участков кода, а также для защиты
+ строковых констант в текст программы вставляют маркеры, которые
+ представляют собой вызов импортируемых процедур, находящихся во
+ внешней DLL-библиотеке (для 32-разрядных приложений используется
+ VMProtectSDK32.dll, а для 64-разрядных - VMProtectSDK64.dll; для
+ защиты драйверов используются VMProtectDDK32.sys и
+ VMProtectDDK64.sys соответственно) - далее по тексту
+ VMProtectSDK. Процедуры и функции, находящиеся в VMProtectSDK, не
+ выполняют каких-либо действий и выступают лишь в роли меток, по
+ которым VMProtect определяет границы защищаемого кода. Начало и
+ конец защищаемого блока, соответственно, маркируется следующим
+ образом:</p>
+
+ <ul>
+ <li><strong>Delphi</strong>
+ <pre class="code">uses VMProtectSDK;
+
+VMProtectBegin(НАЗВАНИЕ_МАРКЕРА);
+...
+VMProtectEnd;
+</pre>
+ </li>
+
+ <li><strong>C/C++</strong>
+ <pre class="code">#include "VMProtectSDK.h"
+
+VMProtectBegin(НАЗВАНИЕ_МАРКЕРА);
+...
+VMProtectEnd();
+</pre>
+ </li>
+
+ <li><strong>MASM</strong>
+ <pre class="code">include VMProtectSDK.inc
+
+invoke VMProtectBegin,SADD(НАЗВАНИЕ_МАРКЕРА)
+...
+invoke VMProtectEnd
+</pre>
+ </li>
+
+ <li><strong>Visual Basic</strong>
+ <pre class="code">VMProtectBegin (StrPtr(НАЗВАНИЕ_МАРКЕРА))
+...
+VMProtectEnd
+</pre>
+ </li>
+ </ul>
+
+ <p>Также вместо VMProtectBegin можно использовать маркеры с
+ предустановленными <a href=
+ "project_functions.htm#CompilationTypes">типами
+ компиляции</a>:</p>
+
+ <ul>
+ <li>VMProtectBeginVirtualization - маркер будет использовать
+ тип компиляции "Виртуализация".</li>
+
+ <li>VMProtectBeginMutation - маркер будет использовать тип
+ компиляции "Мутация".</li>
+
+ <li>VMProtectBeginUltra - маркер будет использовать тип
+ компиляции "Ультра".</li>
+ </ul>
+
+ <p>Обработка маркеров производится следующим образом: при анализе
+ кода защищаемого приложения VMProtect находит все вызовы процедур
+ и функций VMProtectSDK. Границы защищаемых блоков определяются по
+ парам маркеров
+ VMProtectBegin/VMProtectBeginVirtualization/VMProtectBeginMutation/VMProtectBeginUltra
+ и VMProtectEnd. В процессе обработки проекта с помощью VMProtect
+ из кода защищаемой программы удаляются как сами маркеры, так и
+ упоминание о библиотеках VMProtectSDK, поэтому нет необходимости
+ включать данные библиотеки в дистрибутив программы. Маркеры
+ удаляются независимо от того, были они включены в компиляцию или
+ нет. При использовании именованных маркеров их имена также
+ удаляются.</p>
+
+ <p>Если задано название маркера, ему будет присвоено имя вида
+ "VMProtectMarker НАЗВАНИЕ_МАРКЕРА". Если название маркера не
+ задано, ему будет присвоено уникальное имя вида
+ "VMProtectMarker"+номер маркера по порядку. Однако использование
+ неименованных маркеров имеет один серьезный недостаток,
+ заключающийся в том, что при вставке в исходный код программы
+ нового маркера нумерация неименованных маркеров изменится,
+ поэтому при защите программ всегда целесообразно использовать
+ именованные маркеры.</p>
+
+ <p>Важным моментом, который необходимо учитывать при работе с
+ маркерами, является то, что нельзя допускать переходы из
+ незащищенных участков внутрь маркера, что может произойти,
+ например, при пометке маркером только части цикла. В случае если
+ приложение после защиты с использованием маркеров стало
+ неработоспособным, адреса переходов из незащищенных участков
+ можно определить с помощью включения опции "Режим отладки". В
+ данном режиме, при работе защищенного приложения из-под
+ отладчика, на месте обнаружения переходов из незащищенного
+ участка кода в защищенный отладчик будет прерывать выполнение
+ программы. После обнаружения всех подобных переходов необходимо
+ изменить местоположение маркеров в коде программы либо, если это
+ невозможно, пометить эти адреса как внешние, используя
+ графическую версию VMProtect.</p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/watermarks.htm b/help/ru/watermarks.htm
new file mode 100644
index 0000000..248e3a4
--- /dev/null
+++ b/help/ru/watermarks.htm
@@ -0,0 +1,45 @@
+<!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>Водяные знаки</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Водяные знаки</h1>
+
+ <p>VMProtect предоставляет уникальную возможность добавления в
+ защищаемый файл скрытой информации о владельце файла. Водяной
+ знак представляет собой массив байт, который должен быть уникален
+ для каждого вашего пользователя. После включения водяных знаков в
+ защищаемый файл в дальнейшем (например, в случае распространения
+ взломанной программы) вы всегда сможете определить его владельца
+ и принять соответствующие меры. Файл базы данных с водяными файлами
+ хранится в файле "%ApplicationData%/VMProtect Software/VMProtect.dat"
+ для Windows и в файле "/Users/Shared/VMProtect Software/VMProtect.dat"
+ для Mac OS X.</p>
+
+ <p>Диалоговое окно "Водяные знаки" содержит две вкладки:</p>
+
+ <ul>
+ <li><a href="watermarks_setup.htm">Настройка</a></li>
+ <li><a href="watermarks_search.htm">Поиск</a></li>
+ </ul><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/watermarks_search.htm b/help/ru/watermarks_search.htm
new file mode 100644
index 0000000..eeeba7f
--- /dev/null
+++ b/help/ru/watermarks_search.htm
@@ -0,0 +1,65 @@
+<!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>Поиск водяных знаков</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Поиск водяных знаков</h1>
+
+ <p>Вкладка "Поиск" диалога "водяные знаки" служит для поиска водяных знаков в исполняемом
+ файле или в определенном процессе защищенного
+ приложения:</p>
+ <p><img src="images/watermarks_search.png" /></p>
+
+ <ul>
+ <li><strong>Поиск в файле</strong> - искать в исполняемом файле
+ приложения. В поле "Имя файла" выберите файл, в котором
+ необходимо произвести поиск водяных знаков;</li>
+
+ <li><strong>Поиск в модуле</strong> - искать в модуле
+ выбранного процесса. После выбора в выпадающем списке "Процесс"
+ нужного процесса в выпадающем списке "Модуль" выберите модуль
+ этого процесса, в котором необходимо произвести поиск водяных
+ знаков.</li>
+ </ul>
+
+ <p>Результаты поиска водяных знаков отображаются в списке,
+ расположенном в нижней части окна:</p>
+
+ <ul>
+ <li><strong>Название</strong> - название найденного водяного
+ знака;</li>
+
+ <li><strong>Количество</strong> - количество копий найденного
+ водяного знака.</li>
+ </ul>
+
+ <p><strong>Важно:</strong><br />
+ При поиске водяных знаков в неупакованном исполняемом файле может
+ использоваться любой из этих режимов. Однако, если исполняемый
+ файл <a href="dictionary.htm#Pack">упакован</a>, то водяные знаки
+ следует искать только в запущенном приложении (режим "Поиск в
+ модуле"), так как их поиск в исполняемом файле не даст
+ каких-либо результатов, из-за того что водяные знаки, как и
+ остальной код и данные, хранятся в сжатом виде, а распаковка
+ осуществляется только после запуска приложения.</p><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>
diff --git a/help/ru/watermarks_setup.htm b/help/ru/watermarks_setup.htm
new file mode 100644
index 0000000..80cec4d
--- /dev/null
+++ b/help/ru/watermarks_setup.htm
@@ -0,0 +1,49 @@
+<!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>Настройка водяных знаков</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Настройка водяных знаков</h1>
+
+ <p>Вкладка "Настройка" диалога "Водяные знаки" служит для управления водяными
+ знаками:</p>
+ <p><img src="images/watermarks_setup.png" alt="Настройка водяных знаков" /></p>
+
+ <p>Для добавления водяного знака служит одноименная кнопка. При этом откроется диалоговое
+ окно:</p>
+ <p><img src="images/watermarks_add.png" alt="Добавить водяной знак" /></p>
+
+ <ul>
+ <li><strong>Название</strong> - название водяного знака;</li>
+
+ <li><strong>Значение</strong> - значение водяного знака. При
+ помощи кнопки "Сгенерировать" можно задать случайное значение
+ водяного знака. Поле "Значение" состоит из двух столбцов: в
+ левом столбце можно ввести значение в Hex режиме, в правом
+ столбце - в виде текста. При вставке водяного знака в
+ защищаемый файл позиции, имеющие символ "?", будут иметь
+ случайные значения.</li>
+ </ul>
+ <p>Для удаления или переименования водяного знака используйте контекстное меню:</p>
+ <p><img src="images/watermarks_menu.png" alt="Меню водяного знака" /></p>
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/help/ru/work.htm b/help/ru/work.htm
new file mode 100644
index 0000000..1d8f846
--- /dev/null
+++ b/help/ru/work.htm
@@ -0,0 +1,35 @@
+<!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>Работа с VMProtect</title>
+ <style type="text/css">
+ </style>
+</head>
+
+<body>
+ <h1>Работа с VMProtect</h1>
+
+ <p>Перед началом работы с VMProtect ознакомьтесь со следующими разделами:</p>
+
+ <ul>
+ <li><a href="create_project.htm">Подготовка проекта</a></li>
+ <li><a href="main_window.htm">Главное окно</a></li>
+ <li><a href="mode_console.htm">Консольная версия</a></li>
+ </ul><br />
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>