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