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>
|