VMProtect/help/ru/use_markers.htm
VNGhostMans 5ec92ee05e first commit
Version 3.x.x
2023-05-14 20:21:09 +07:00

135 lines
6.7 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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