aboutsummaryrefslogtreecommitdiff
path: root/help/ru/manager/usage/step25_codelock.htm
diff options
context:
space:
mode:
Diffstat (limited to 'help/ru/manager/usage/step25_codelock.htm')
-rw-r--r--help/ru/manager/usage/step25_codelock.htm144
1 files changed, 144 insertions, 0 deletions
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>