VMProtect/help/ru/use_markers.htm

135 lines
6.7 KiB
HTML
Raw Normal View History

2023-05-14 16:21:09 +03:00
<!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>