forked from wangyif2/RE-for-beginners
-
Notifications
You must be signed in to change notification settings - Fork 0
/
preface.tex
executable file
·179 lines (144 loc) · 10.5 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
172
173
174
175
176
177
178
179
\section*{\RU{Предисловие}\EN{Preface}}
\RU{Здесь (будет) немного моих заметок о \gls{reverse engineering} на русском языке для начинающих,
для тех кто хочет научиться понимать создаваемый \CCpp компиляторами код для x86 (коего,
практически, больше всего остального) и ARM.}
\EN{Here are some of my notes in English for beginners about \gls{reverse engineering}
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.}
\RU{У термина ``\gls{reverse engineering}'' несколько популярных значений:
1) исследование скомпилированных
программ; 2) сканирование трехмерной модели для последующего копирования;
3) восстановление структуры СУБД. Настоящий сборник заметок
связан с первым значением}
\EN{There are several popular meanings of the term ``\gls{reverse engineering}'':
1) reverse engineering of software: researching compiled programs;
2) 3D model scanning and reworking in order to make a copy of it;
3) recreating \ac{DBMS} structure.
This book is related to the first meaning.}
\ifx\LITE\undefined
\subsection*{\RU{Рассмотренные темы}\EN{Topics discussed}}
x86/x64, ARM/ARM64, MIPS.
\subsection*{\RU{Затронутые темы}\EN{Topics touched}}
\oracle (\ref{oracle}),
Itanium (\ref{itanium}),
\RU{донглы для защиты от копирования}\EN{copy-protection dongles} (\ref{dongles}),
LD\_PRELOAD (\ref{ld_preload}),
\RU{переполнение стека}\EN{stack overflow},
\ac{ELF},
\RU{формат файла PE в win32}\EN{win32 PE file format} (\ref{win32_pe}),
x86-64 (\ref{x86-64}),
\RU{критические секции}\EN{critical sections} (\ref{critical_sections}),
\RU{сисколлы}\EN{syscalls} (\ref{syscalls}),
\ac{TLS},
\RU{адресно-независимый код}\EN{position-independent code} (\ac{PIC}) (\ref{sec:PIC}),
profile-guided optimization (\ref{PGO}),
C++ STL (\ref{cpp_STL}),
OpenMP (\ref{openmp}),
SEH (\ref{sec:SEH}).
\fi
\subsection*{\RU{Еще кое-что}\EN{Notes}}
\newcommand{\FNURLREDDIT}{\footnote{\href{http://go.yurichev.com/17027}{reddit}}}
\EN{Why one should learn assembly language these days?}
\RU{Зачем в наше время нужно изучать язык ассемблера?}
\EN{Unless you are OS developer, you probably don't need to write in assembly:
modern compilers perform optimizations much better than humans do.}
\RU{Если вы не разработчик OS, вам наверное не нужно писать на ассемблере:
современные компиляторы оптимизируют код намного лучше человека}
\footnote{\RU{Очень хороший текст на эту тему}\EN{A very good text about this topic}: \cite{AgnerFog}}.
\EN{Also, modern \ac{CPU}s are very complex devices and assembly knowledge would
not help you understand its internals.}
\RU{Современные \ac{CPU} это также крайне сложные устройства, и знание ассемблера вряд ли
поможет узнать его внутренности.}
\EN{That said, there are at least two areas where a good understanding of assembly may help:
first, security/malware research. Second, gaining a better understanding of your compiled code
while debugging.}
\RU{Но все-таки остается по крайней мере две области, где знание ассемблера может хорошо
помочь:
1) исследование malware (\IT{зловредов}) в целях security research; 2) лучшее понимание
вашего скомпилированного кода в процессе отладки.}
\EN{Therefore, this book is intended for those who want to understand assembly language rather
than to write in it, which is why there are many examples of compiler output.}
\RU{Таким образом, эта книга предназначена для тех, кто хочет скорее понимать ассемблер,
нежели писать на нем, и вот почему здесь масса примеров связанных с результатами
работы компиляторов.}\\
\\
\RU{Как можно найти работу reverse engineer-а}\EN{How would one find a reverse engineering job}? \\
\RU{На reddit, посвященному RE\FNURLREDDIT, время от времени бывают hiring thread}
\EN{There are hiring threads that appear from time to time on reddit devoted to RE\FNURLREDDIT}
(\href{http://go.yurichev.com/17333}{2013 Q3},
\href{http://go.yurichev.com/17334}{2014}).
\RU{Посмотрите там}\EN{Try looking there}.
\EN{A somewhat related hiring thread can be found in the ``netsec'' subreddit}\RU{В смежном субреддите ``netsec'' имеется похожий тред}:
\href{http://go.yurichev.com/17335}{2014 Q2}.\\
\\
\RU{Куда пойти учиться в Украине?
\begin{itemize}
\item НТУУ <<КПИ>>: ``Аналіз програмного коду та бінарних вразливостей'' \url{http://go.yurichev.com/17336}.
\item \url{http://go.yurichev.com/17337} (факультативы).
\end{itemize}}
\subsection*{\RU{Об авторе}\EN{About the author}}
\begin{tabularx}{\textwidth}{ l X }
\raisebox{-\totalheight}{
\includegraphics[scale=0.60]{Dennis_Yurichev.jpg}
}
&
\RU{Денис Юричев ~--- опытный reverse engineer и программист.
С его резюме можно ознакомиться на его сайте}
\EN{Dennis Yurichev is an experienced reverse engineer and programmer.
His CV is available on his website}\footnote{\href{http://go.yurichev.com/17141}{yurichev.com}}. \\
% FIXME: no link. \tablefootnote doesn't work
\end{tabularx}
\subsection*{\RU{Благодарности}\EN{Thanks}}
\RU{Тем, кто много помогал мне отвечая на массу вопросов}\EN{For patiently answering all my questions}:
\HERMIT, \RU{Слава ''Avid'' Казаков}\EN{Slava ''Avid'' Kazakov}.
\RU{Тем, кто присылал замечания об ошибках и неточностях}\EN{For sending me notes
about mistakes and inaccuracies}:
\RU{Станислав ''Beaver'' Бобрицкий, Александр Лысенко}
\EN{Stanislav ''Beaver'' Bobrytskyy, Alexander Lysenko}, Shell Rocket, Zhu Ruijin, Changmin Heo.
\RU{Просто помогали разными способами}\EN{For helping me in other ways}:
\RU{Андрей Зубинский}\EN{Andrew Zubinski},
Arnaud Patard (rtp \RU{на}\EN{on} \#debian-arm IRC).
\RU{Переводчику на китайский язык}\EN{For translating to Chinese simplified}: Xian Chi.
\RU{Переводчику на корейский язык}\EN{For translating to Korean}: Byungho Min.
\RU{Корректорам}\EN{For proofreading}:
\RU{Александр ''Lstar'' Черненький}\EN{Alexander ''Lstar'' Chernenkiy},
\RU{Владимир Ботов}\EN{Vladimir Botov},
\RU{Андрей Бражук}\EN{Andrei Brazhuk},
\RU{Марк}\EN{Mark} ``Logxen'' \RU{Купер}\EN{Cooper},
Yuan Jochen Kang, \RU{Васил Колев}\EN{Vasil Kolev}.
\RU{За иллюстрации и обложку: Андрей Нечаевский.}\EN{For illustrations and cover art: Andy Nechaevsky.}
\RU{И еще всем тем на github.com кто присылал замечания и коррективы}
\EN{Thanks also to all the folks on github.com who have contributed notes and corrections}.
\RU{Было использовано множество пакетов \LaTeX\: их авторов я также хотел бы поблагодарить}
\EN{Many \LaTeX\ packages were used: I would like to thank the authors as well}.
\input{donate}
\input{FAQ}
\ifdefined\ebook
\RU{Это версия формата A5 для электронных читалок}\EN{This is the A5-format version for e-book readers}.
\RU{Хотя, тут всё то же самое, но иллюстрации уменьшены и не очень хорошо читаемы}
\EN{Although the content is mostly the same, the illustrations are resized and probably not readable}.
\RU{Извините}\EN{Sorry about that}! \RU{Вы всегда можете посмотреть их в версии формата A4 здесь}
\EN{You can always view them in A4-format version here}: \href{http://go.yurichev.com/17009}{beginners.re}.
\fi
% {\RU{Целевая аудитория}\EN{Target audience}}
\subsection*{\RU{О переводе на корейский язык}\EN{About Korean translation}}
\EN{Acorn publishing company (\href{http://www.acornpub.co.kr}{www.acornpub.co.kr}) in South Korea did huge amount of work in translating and publishing
my book (state which is it in January 2015) in Korean language.}
\RU{Издательство Acorn в Южной Корее сделало много работы в переводе
и издании моей книги (по состоянию на январь 2015) на корейский язык.}
\RU{Она теперь доступна на}\EN{Now it's available at}
\href{http://go.yurichev.com/17343}{\EN{their website}\RU{их сайте}}.
\begin{figure}[H]
\centering
\includegraphics[scale=0.3]{acorn_cover.jpg}
\end{figure}
\RU{Переводил}\EN{Translator is} Byungho Min (\href{http://go.yurichev.com/17344}{twitter/tais9}).
\EN{Cover pictures was done by my artist friend Andy Nechaevsky}
\RU{Обложку нарисовал мой хороший знакомый художник Андрей Нечаевский}:
\href{http://go.yurichev.com/17023}{facebook/andydinka}.
\RU{Они также имеют права на издании книги на корейском языке.}
\EN{They are also the Korean translation copyright holder.}
\RU{Так что если вы хотите иметь \IT{настоящую} книгу на полке на корейском языке и/или
хотите поддержать мою работу, вы можете купить её.}
\EN{So if you want to have a \IT{real} book on your shelf in Korean language and/or
want to support my work, now you may buy it.}