forked from wangyif2/RE-for-beginners
-
Notifications
You must be signed in to change notification settings - Fork 0
/
preface.tex
executable file
·171 lines (137 loc) · 10.7 KB
/
preface.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
\section{\IFRU{Предисловие}{Preface}}
\IFRU
{Здесь (будет) немного моих заметок о \gls{reverse engineering} на русском языке для начинающих,
для тех кто хочет научиться понимать создаваемый \CCpp компиляторами код для x86 (коего,
практически, больше всего остального) и ARM.}
{Here are some of my notes about \gls{reverse engineering} in English language for
those beginners who would like to learn to understand x86 (which accounts for almost
all executable software in the world) and ARM code created by \CCpp compilers.}
\IFRU{У термина ``\gls{reverse engineering}'' несколько популярных значений:
1) исследование скомпилированных
программ; 2) сканирование трехмерной модели для последующего копирования;
3) восстановление структуры СУБД. Настоящий сборник заметок
связан с первым значением}
{There are several popular meanings of the term ``\gls{reverse engineering}'':
1) reverse engineering of software: researching of compiled programs;
2) 3D model scanning and reworking in order to make a copy of it;
3) recreating \ac{DBMS} structure.
These notes are related to the first meaning.}
\subsection*{\IFRU{Рассмотренные темы}{Topics discussed}}
x86, ARM.
\subsection*{\IFRU{Затронутые темы}{Topics touched}}
\oracle (\ref{oracle}),
Itanium (\ref{itanium}),
\IFRU{донглы для защиты от копирования}{copy-protection dongles} (\ref{dongles}),
LD\_PRELOAD (\ref{ld_preload}),
\IFRU{переполнение стека}{stack overflow},
\ac{ELF},
\IFRU{формат файла PE в win32}{win32 PE file format} (\ref{win32_pe}),
x86-64 (\ref{x86-64}),
\IFRU{критические секции}{critical sections} (\ref{critical_sections}),
\IFRU{сисколлы}{syscalls} (\ref{syscalls}),
\ac{TLS},
\IFRU{адресно-независимый код}{position-independent code} (\ac{PIC}) (\ref{sec:PIC}),
profile-guided optimization (\ref{PGO}),
C++ STL (\ref{cpp_STL}),
OpenMP (\ref{openmp}),
SEH (\label{sec:SEH}).
\subsection*{\IFRU{Мини-}{Mini-}\ac{FAQ}}
\newcommand{\FNURLREDDIT}{\footnote{\url{http://www.reddit.com/r/ReverseEngineering/}}}
\begin{itemize}
\item
Q: \IFRU{Нужно ли учиться понимать язык ассемблера в наше время?}
{Should one learn to understand assembly language these days?} \\
A: \IFRU{Да: ради того чтобы понимать лучше внутреннее устройство, отлаживать код лучше и быстрее.}
{Yes: in order to have deeper understanding of the internals and to debug your software better and faster.}
\item
Q: \IFRU{Нужно ли учиться писать на языке ассемблера в наше время?}
{Should one learn to write in assembly language these days?} \\
A: \IFRU{Пожалуй, нет, если только не писать низкоуровневый код для \ac{OS}.}
{Unless one writes low-level \ac{OS} code, probably no.}
\item
Q: \IFRU{Но для написания очень оптимизированных процедур?}
{But what about writing highly optimized routines?} \\
A: \IFRU{Нет, современные компиляторы \CCpp делают это лучше.}
{No, modern \CCpp compilers do this job better.}
\item
Q: \IFRU{Нужно ли знать внутреннее устройство микропроцессоров}
{Should I learn microprocessor internals}? \\
A: \IFRU{Современные}{Modern} \ac{CPU}\IFRU{ очень сложные}{-s are very complex}.
\IFRU{Если вы не собираетесь писать очень оптимизированный код
или не работаете над кодегенератором компилятора,
тогда устройство CPU можно изучать только в общих чертах}
{If you do not plan to write highly optimized code or if you do not work on compiler's code generator
then you may still learn internals in bare outlines.}
\footnote{\IFRU{Очень хороший текст на эту тему}{Very good text about it}: \cite{AgnerFog}}.
\IFRU{В то же время для понимания и анализа кода
достаточно только знать \ac{ISA}, назначения регистров, т.е., ``внешнюю'' часть \ac{CPU}, доступную
для прикладного программиста}
{At the same time, in order to understand and analyze compiled code it is enough to know
only \ac{ISA}, register's descriptions, i.e., the ``outside'' part of a \ac{CPU} that is available to
an application programmer}.
\item
Q: \IFRU{И всё-таки, зачем мне учить ассемблер}{So why should I learn assembly language anyway}? \\
A: \IFRU{В основном для лучшего понимания происходящего во время отладки и для исследования
программ без наличия исходных кодов, включая зловреды (или вредоносы)
\footnote{современные (2013) русскоязычные термины для malware}}
{Mostly to better understand what is going on while debugging and for \gls{reverse engineering} without source code, including, but not limited to, malware}.
\item
Q: \IFRU{Как можно найти работу reverse engineer-а}{How would I search for a reverse engineering job}? \\
A: \IFRU{На reddit, посвященному RE\FNURLREDDIT, время от времени бывают hiring thread}
{There are hiring threads that appear from time to time on reddit devoted to RE\FNURLREDDIT}
(\href{http://www.reddit.com/r/ReverseEngineering/comments/1hywvr/rreverseengineerings_q3_2013_hiring_thread/}{2013 Q3},
\href{http://www.reddit.com/r/ReverseEngineering/comments/1vui22/rreverseengineerings_2014_hiring_thread/}{2014}).
\IFRU{Посмотрите там}{Try to take a look there}.
\end{itemize}
\subsection*{\IFRU{Об авторе}{About the author}}
\begin{tabularx}{\textwidth}{ l X }
\raisebox{-\totalheight}{
\includegraphics[scale=0.60]{Dennis_Yurichev.jpg}
}
&
\IFRU{Денис Юричев ~--- опытный reverse engineer и программист.
С его резюме можно ознакомиться на его сайте}
{Dennis Yurichev is an experienced reverse engineer and programmer.
His CV is available on his website}\footnote{\url{http://yurichev.com/Dennis_Yurichev.pdf}}. \\
% FIXME: no link. \tablefootnote doesn't work
\end{tabularx}
\subsection*{\IFRU{Благодарности}{Thanks}}
\HERMIT, \IFRU{Слава ''Avid'' Казаков, Станислав ''Beaver'' Бобрицкий, Александр Лысенко,
Александр ''Lstar'' Черненький, Андрей Зубинский, Владимир Ботов}
{Slava ''Avid'' Kazakov, Stanislav ''Beaver'' Bobrytskyy, Alexander Lysenko,
Alexander ''Lstar'' Chernenkiy, Andrew Zubinski, Vladimir Botov}, \IFRU{Марк}{Mark} ``Logxen'' \IFRU{Купер}{Cooper},
Shell Rocket, Yuan Jochen Kang, Arnaud Patard (rtp \IFRU{на}{on} \#debian-arm IRC),
\IFRU{и всем тем на github.com кто присылал замечания и коррективы}{and all the folks on github.com
who have contributed notes and corrections}.
\IFRU{Было использовано множество пакетов \LaTeX{}: их авторов я также хотел бы поблагодарить}
{A lot of \LaTeX{} packages were used: I would thank their authors as well}.
\subsection*{\IFRU{Отзывы об этой книге}{Praise for \IT{\TITLE}}}
\begin{itemize}
\item ``It's very well done .. and for free .. amazing.''\footnote{\url{https://twitter.com/daniel_bilar/status/436578617221742593}} Daniel Bilar, Siege Technologies, LLC.
\item ``...excellent and free''\footnote{\url{https://twitter.com/petefinnigan/status/400551705797869568}} Pete Finnigan, \RU{гуру по безопасности }\oracle\EN{ security guru}.
\item ``... book is interesting, great job!'' Michael Sikorski, \IFRU{автор книги}{author of} \IT{Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software}.
\item ``... my compliments for the very nice tutorial!'' Herbert Bos, \IFRU{профессор университета}{full professor at the} Vrije Universiteit Amsterdam.
\item ``... It is amazing and unbelievable.'' Luis Rocha, CISSP / ISSAP, Technical Manager, Network \& Information Security at Verizon Business.
\item ``Thanks for the great work and your book.'' Joris van de Vis, SAP Netweaver \& Security specialist.
\end{itemize}
\input{donate}
\subsection*{\IFRU{Об иллюстрациях}{About illustrations}}
\IFRU{Читатели, привыкшие читать интернет-страницы, вероятно привыкли к тому что иллюстрации
находятся там же, где и должны}{Those readers who are used to read a lot in the Internet, expects
seeing illustrations at the places where they should be}.
\IFRU{Это потому что там нет разбивок на страницы, там она только одна}{It's because there
are no pages at all, only single one}.
\IFRU{В книгах же, иллюстрации далеко не всегда удается вставить в том контексте где нужно}
{It's not possible to place illustrations in the book at the suitable context}.
\IFRU{Так что, здесь бывает так, что они все находятся в конце секции,
и по тексту на них ставятся ссылки вроде}{So, in this book, illustrations can be at the end of section,
and a referenceses in the text may be present, like}
``\figname{}1.1''.
\ifdefined\ebook
\IFRU{Это версия формата A5 для электронных читалок}{This is A5-format version for e-book readers}.
\IFRU{Хотя, тут всё то же самое, но иллюстрации уменьшены и не очень хорошо читаемы}
{Although, it mostly the same, but illustrations are resized and probably not readable}.
\IFRU{Извините}{Sorry for this}! \IFRU{Вы всегда можете посмотреть их в версии формата A4 здесь}
{You can always view them in A4-format version here}: \url{http://yurichev.com/RE-book.html}.
\fi
% {\IFRU{Целевая аудитория}{Target audience}}