VMProtect/help/ru/project_options_external_addresses.htm

81 lines
4.3 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>
</head>
<body>
<h1>Внешние адреса</h1>
При защите кода место, освободившееся в
процессе компиляции, VMProtect использует для своих нужд, в
том числе для хранения различных данных
(завиртуализированного, промутированного кода, исполнителей
ВМ и т.п.). В связи с этим могут возникать различные
ситуации, когда "внутрь" защищенного кода может происходить
переход из других частей программы (адреса, на которые может
происходить переход, называются внешними). Подобные ситуации
могут возникать при использовании маркеров кода, когда
происходит переход из незащищенного участка программы внутрь
маркера:
<pre class="code">VMProtectBegin(nil);
for I:=0 to 10 do
begin
Inc(J);
VMProtectEnd;
end;
</pre>
<p>В виде ассемблерных команд данный цикл выглядит следующим
образом:</p>
<pre class="code">----------------- начало маркера ----------------
0044D12C mov eax, 0000000B
0044D131 inc ebx
----------------- конец маркера -----------------
0044D132 dec eax
0044D133 jnz 0044D131
</pre>
<p>Очевидно, что после виртуализации команд с адресами
0044D12C и 0044D131 при выполнении незавиртуализированной
команды условного перехода по адресу 0044D133 возникнет
ошибка (т.к. по адресу 0044D131 вместо оригинального кода
будут записаны различные данные или просто мусор). Для
рассматриваемого примера адрес 0044D131 будет являться
внешним.</p>
<p>При включении опции "Режим отладки" на место оригинального
кода будет записана команда INT 03, являющаяся обычной точкой
останова и служебной командой при работе под отладчиком. При
запуске защищенной программы из-под отладчика в случае
передачи управления по адресу 0044D131 произойдет вызов точки
останова, а при открытии окна отладчика можно будет увидеть,
по какому адресу произошел данный переход.</p>
<p>При обнаружении подобных переходов рекомендуется проверить
правильность расстановки маркеров кода. Если защищаемый код
не помечен маркерами или невозможно изменить логику
приложения так, чтобы внутрь защищаемого кода не было
перехода из других частей программы, то, используя
графическую версию приложения, данные адреса <a href=
"project_functions.htm#ExtAddress">следует пометить как
внешние</a>.</p>
<br />
<br />
<br />
<br />
<hr noshade="noshade" size="1" />
<div align="center">
© 2006-2015 Copyright VMProtect Software
</div>
</body>
</html>