forked from wangyif2/RE-for-beginners
-
Notifications
You must be signed in to change notification settings - Fork 1
/
tools.tex
127 lines (97 loc) · 6.6 KB
/
tools.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
\part{\RU{Инструменты}\EN{Tools}}
\chapter{\RU{Дизассемблер}\EN{Disassembler}}
\section{IDA}
\label{IDA}
\RU{Старая бесплатная версия доступна для скачивания}\EN{An older freeware version is available for download}
\footnote{\href{http://go.yurichev.com/17031}{hex-rays.com/products/ida/support/download\_freeware.shtml}}.
\ifx\LITE\undefined
\ShortHotKeyCheatsheet: \myref{sec:IDA_cheatsheet}
\fi
\chapter{\RU{Отладчик}\EN{Debugger}}
\ifdefined\IncludeOlly
\section{\olly}
\index{\olly}
\RU{Очень популярный отладчик пользовательской среды win32}\EN{Very popular user-mode win32 debugger}:\\
\href{http://go.yurichev.com/17032}{ollydbg.de}.
\ShortHotKeyCheatsheet: \myref{sec:Olly_cheatsheet}
\fi
\ifdefined\IncludeGDB
\section{GDB}
\index{GDB}
\RU{Не очень популярный отладчик у реверсеров, тем не менее, крайне удобный}\EN{Not very popular
debugger among reverse engineers, but very comfortable nevertheless}.
\RU{Некоторые команды}\EN{Some commands}: \myref{sec:GDB_cheatsheet}.
\fi
\section{tracer}
\index{tracer}
\label{tracer}
\RU{Автор часто использует}\EN{The author often use} \IT{tracer}\footnote{\EN{\href{http://go.yurichev.com/17338}{yurichev.com}}\RU{\href{http://go.yurichev.com/17339}{yurichev.com}}}
\RU{вместо отладчика}\EN{instead of a debugger}.
\RU{Со временем, автор этих строк отказался использовать отладчик, потому что всё что ему нужно от него это иногда подсмотреть
какие-либо аргументы какой-либо функции во время исполнения или состояние регистров в определенном месте.
Каждый раз загружать отладчик для этого это слишком, поэтому родилась очень простая утилита \IT{tracer}.
Она консольная, запускается из командной строки, позволяет перехватывать исполнение функций,
ставить точки останова на произвольные места, смотреть состояние регистров, модифицировать их, \etc.}
\EN{The author of these lines stopped using a debugger eventually, since all he need from it is to spot function arguments while
executing, or registers state at some point.
Loading a debugger each time is too much, so a small utility called \IT{tracer} was born.
It works from command line, allows intercepting function execution,
setting breakpoints at arbitrary places, reading and changing registers state, etc.}
\RU{Но для учебы очень полезно трассировать код руками в отладчике, наблюдать как меняются значения регистров
(например, как минимум классический SoftICE, OllyDbg, WinDbg подсвечивают измененные регистры),
флагов, данные, менять их самому, смотреть реакцию, \etc.}
\EN{However, for learning purposes it is highly advisable to trace code in a debugger manually, watch how the registers state
changes (e.g. classic SoftICE, OllyDbg, WinDbg highlight changed registers), flags, data, change them
manually, watch the reaction, \etc{}.}
\ifx\LITE\undefined
\chapter{\RU{Трассировка системных вызовов}\EN{System calls tracing}}
\label{strace}
\index{strace}
\index{dtruss}
\subsection{strace / dtruss}
\index{syscall}
\RU{Позволяет показать, какие системные вызовы (syscalls(\myref{syscalls})) прямо сейчас вызывает процесс.}
\EN{It shows which system calls (syscalls(\myref{syscalls})) are called by a process right now.}
\RU{Например}\EN{For example}:
\begin{lstlisting}
# strace df -h
...
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220\232\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1770984, ...}) = 0
mmap2(NULL, 1780508, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb75b3000
\end{lstlisting}
\index{\MacOSX}
\RU{В \MacOSX для этого же имеется dtruss}\EN{\MacOSX has dtruss for doing the same}.
\index{Cygwin}
\RU{В Cygwin также есть strace, впрочем, насколько известно,
он показывает результаты только для .exe-файлов скомпилированных для среды самого cygwin.}%
\EN{Cygwin also has strace, but as far as it's known, it works only for .exe-files
compiled for the cygwin environment itself.}
\fi
\chapter{\RU{Декомпиляторы}\EN{Decompilers}}
\RU{Пока существует только один публично доступный декомпилятор в Си высокого качества}
\EN{There is only one known, publicly available, high-quality decompiler to C code}: Hex-Rays:\\
\href{http://go.yurichev.com/17033}{hex-rays.com/products/decompiler/}
% TODO Java, .NET, VB, etc
\chapter{\RU{Прочие инструменты}\EN{Other tools}}
\begin{itemize}
\item
Microsoft Visual Studio Express\footnote{\href{http://go.yurichev.com/17034}{visualstudio.com/en-US/products/visual-studio-express-vs}}:
\RU{Усеченная бесплатная версия Visual Studio, пригодная для простых экспериментов.}
\EN{Stripped-down free version of Visual Studio, convenient for simple experiments.}
\ifx\LITE\undefined
\RU{Некоторые полезные опции}\EN{Some useful options}: \myref{sec:MSVC_options}.
\fi
\item
\label{Hiew}
Hiew\footnote{\href{http://go.yurichev.com/17035}{hiew.ru}} \RU{для мелкой модификации кода в исполняемых файлах.}
\EN{for small modifications of code in binary files.}
\item
\index{binary grep}
binary grep: \RU{небольшая утилита для поиска констант (либо просто последовательности байт)
в большом количестве файлов, включая неисполняемые: \BGREPURL.}
\EN{a small utility for searching any byte sequence in a big pile of files,
including non-executable ones: \BGREPURL.}
\end{itemize}