mirror of
https://github.com/Obfuscator-Collections/VMProtect.git
synced 2026-09-01 04:04:42 +03:00
FILE / ScuroNeko/VMProtect
help/ru/project_options_external_addresses.htm
Исходный файл и его история в репозитории.
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>
|