Skip to content

Commit 42cddfb

Browse files
committed
forgot couple of files
1 parent 16f506c commit 42cddfb

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

Dennis_Yurichev.jpg

22.6 KB
Loading

other/patching.tex

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
\chapter{\IFRU{Модификация исполняемых файлов}{Executable files patching}}
2+
3+
\section{\IFRU{Текстовые строки}{Text strings}}
4+
5+
\IFRU{Сишные строки проще всего модифицировать (если они не зашифрованы) в любом шестнадцатеричном редакторе}
6+
{C strings are most easily patched (unless they are encrypted) in any hex editor}.
7+
\IFRU{Эта техника доступна даже для тех, кто вовсе не разбирается в машинном коде и форматах исполняемых
8+
файлов}{This technique available even for those who are not aware of machine code and executabe file formats}.
9+
\IFRU{Новая строка не должна быть длиннее старой, потому что имеется риск затереть какую-то другую переменную
10+
или код}{New string should not be bigger than old, because it's a risk to overwrite some other value or code
11+
there}.
12+
\index{MS-DOS}
13+
\IFRU{Используя этот метод, очень много ПО было \IT{локализовано} во времена MS-DOS, как минимум,
14+
в странах бывшего СССР, в 80-х и 90-х}
15+
{Using this method, a lot of software was \IT{localized} in MS-DOS era, at least in ex-USSR countries in 80's
16+
and 90's}.
17+
\IFRU{Отсюда наличие очень странных аббревиатур и сокращений в \IT{локализованном} ПО:
18+
там просто не было места для более
19+
длинных строк}{It was a reason why so weird abbreviations was present in \IT{localized} software: it was no room for
20+
longer strings}.
21+
22+
\index{Borland Delphi}
23+
\IFRU{В строках в Delphi, длина строки также должна быть поправлена, если нужно}
24+
{As of Delphi strings, a string size should also be corrected, if needed}.
25+
26+
\section{x86\IFRU{-код}{ code}}
27+
28+
\IFRU{Часто необходимые задачи}{Frequent patching tasks are}:
29+
30+
\begin{itemize}
31+
32+
\item \IFRU{Часто нужно просто запретить исполнение какой-либо инструкции}
33+
{One of the most frequently job is to disable some instruction}.
34+
\IFRU{И чаще всего, это можно сделать заполняя её байтом}{It is often done by filling it by byte}
35+
\TT{0x90} (\ac{NOP}).
36+
37+
\item \IFRU{Условные переходы, имеющие опкод вроде}{Conditional jumps, which have opcode like} \TT{74 xx} (\JZ),
38+
\IFRU{так же могут быть заполнены двумя \ac{NOP}-ами}{may also be filled by two \ac{NOP}s}.
39+
\IFRU{Также возможно запретить исполнение условного перехода записав 0 во второй байт}
40+
{It is also possible to disable conditional jump by writing 0 at the second byte} (\IT{jump offset}).
41+
42+
\item \IFRU{Еще одна часто необходимая задача это сделать условный переход всегда срабатывающим}
43+
{Another frequent job is to make conditional jump to trigger always}:
44+
\IFRU{это возможно при помощи записи}{this can be done by writing} \TT{0xEB} \IFRU{вместо опкода, это значит}
45+
{instead of opcode, it mean} \JMP.
46+
47+
\index{stdcall}
48+
\item \IFRU{Исполнение ф-ции может быть запрещено, если записать}{A function execution can be disabled by writing}
49+
\RETN (0xC3) \IFRU{в её начале}{at its beginning}.
50+
\IFRU{Это справедливо для всех ф-ций кроме}{This is true for all functions excluding} \TT{stdcall}
51+
(\ref{sec:stdcall}).
52+
\IFRU{При модификации ф-ций}{While patching} \TT{stdcall}\IFRU{, нужно в начале определить количество аргументов
53+
(например, отыскав \RETN в этой ф-ции),
54+
и использовать}{ functions, one should determine number of arguments (for example,
55+
by finding \RETN in this function),
56+
and use} \RETN \IFRU{с 16-битным аргументом}{with 16-bit argument} (0xC2).
57+
58+
\item \IFRU{Иногда, запрещенная ф-ция должна возвращать}{Sometimes, a disabled functions should return} 0 \OrENRU 1.
59+
\IFRU{Это можно сделать при помощи}{This can be done by} \TT{MOV EAX, 0} \OrENRU \TT{MOV EAX, 1},
60+
\IFRU{но это слишком многословно}{but it's slightly verbose}.
61+
\IFRU{Способ получше это}{Better way is} \TT{XOR EAX, EAX} (2 \IFRU{байта}{bytes}) \OrENRU
62+
\TT{XOR EAX, EAX / INC EAX} (3 \IFRU{байта}{bytes}).
63+
64+
\end{itemize}
65+
66+
\IFRU{ПО может быть защищено от модификаций}{A software may be protected against modifications}.
67+
\IFRU{Эта защита чаще всего реализуется путем чтения кода и вычисления контрольной суммы}
68+
{This protection is often done by reading executable code and doing some checksumming}.
69+
\IFRU{Следовательно, код должен быть прочитан перед тем как защита сработает}{Therefore,
70+
the code should be read before protection will be triggered}.
71+
\IFRU{Это можно определить установив брякпойнт на чтение памяти}
72+
{This can be determined by setting breakpoint on reading memory}.
73+
74+
\index{tracer}
75+
\IFRU\tracer имеется опция BPM для этого}{\tracer has BPM option for this}.
76+
77+
\IFRU{Релоки в исполняемых PE-файлах}{PE executable file relocs} (\ref{subsec:relocs})
78+
\IFRU{не должны быть тронуты, потому что загрузчик Windows перезапишет ваш новый код}
79+
{should not be touched while patching,
80+
because Windows loader will overwrite a new code}.
81+
\index{Hiew}
82+
(\IFRU{Они выделяются серым в Hiew, например}{They are grayed in Hiew, for example}:
83+
\figname \ref{fig:scanf_ex3_hiew_1}).
84+
\IFRU{В качестве последней меры, можно записать \JMP для обхода релока, либо же придется модифицировать таблицу
85+
релоков}{As a last resort, it is possible to write jumps circumventing relocs,
86+
or one will need to edit relocs table}.
87+

0 commit comments

Comments
 (0)