81 lines
4.3 KiB
HTML
81 lines
4.3 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>
|
||
</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>
|