135 lines
6.7 KiB
HTML
135 lines
6.7 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<link rel="Stylesheet" type="text/css" href="default.css" />
|
||
<meta http-equiv="Content-Type" content=
|
||
"text/html; charset=utf-8" />
|
||
|
||
<title>Использование маркеров</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>
|