forked from wangyif2/RE-for-beginners
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.tex
executable file
·96 lines (79 loc) · 7.25 KB
/
main.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
\chapter{\IFRU{Поиск в коде того что нужно}{Finding important/interesting stuff in the code}}
\IFRU{Современное ПО, в общем-то, минимализмом не отличается.}{Minimalism it is not a significant feature
of modern software.}
\IFRU{Но не потому, что программисты слишком много пишут,
а потому что к исполняемым файлам обыкновенно прикомпилируют все подряд библиотеки.
Если бы все вспомогательные библиотеки всегда выносили во внешние DLL, мир был бы иным.
(Еще одна причина для Си++ ~--- STL и прочие библиотеки шаблонов.)}
{But not because programmers are writing a lot, but in a reason that all libraries are commonly linked statically
to executable files.
If all external libraries were shifted into external DLL files, the world would be different.
(Another reason for C++~---STL and other template libraries.)}
\newcommand{\FOOTNOTEBOOST}{\footnote{\url{http://www.boost.org/}}}
\newcommand{\FOOTNOTELIBPNG}{\footnote{\url{http://www.libpng.org/pub/png/libpng.html}}}
\IFRU{Таким образом, очень полезно сразу понимать, какая функция из стандартной библиотеки или
более-менее известной (как Boost\FOOTNOTEBOOST, libpng\FOOTNOTELIBPNG),
а какая ~--- имеет отношение к тому что мы пытаемся найти в коде.}
{Thus, it is very important to determine origin of a function, if it is from standard library or
well-known library (like Boost\FOOTNOTEBOOST, libpng\FOOTNOTELIBPNG),
and which one~---is related to what we are trying to find in the code.}
\IFRU{Переписывать весь код на \CCpp, чтобы разобраться в нем, безусловно, не имеет никакого смысла.}
{It is just absurdly to rewrite all code to \CCpp to find what we looking for.}
\IFRU{Одна из важных задач reverse engineer-а это быстрый поиск в коде того что собственно его интересует.}
{One of the primary reverse engineer's task is to find quickly in the code what is needed.}
\index{\GrepUsage}
\IFRU{Дизассемблер \IDA позволяет делать поиск как минимум строк, последовательностей байт, констант.
Можно даже сделать экспорт кода в текстовый файл .lst или .asm и затем натравить на него \TT{grep}, \TT{awk}, и т.д.}
{\IDA disassembler allow us search among text strings, byte sequences, constants.
It is even possible to export the code into .lst or .asm text file and then use \TT{grep}, \TT{awk}, etc.}
\IFRU{Когда вы пытаетесь понять, что делает тот или иной код, это запросто может быть какая-то
опенсорсная библиотека вроде libpng. Поэтому, когда находите константы, или текстовые строки которые
выглядят явно знакомыми, всегда полезно их \IT{погуглить}.
А если вы найдете искомый опенсорсный проект где это используется,
то тогда будет достаточно будет просто сравнить вашу функцию с ней.
Это решит часть проблем.}
{When you try to understand what a code is doing, this easily could be some open-source library like libpng.
So when you see some constants or text strings looks familiar, it is always worth to \IT{google} it.
And if you find the opensource project where it is used,
then it will be enough just to compare the functions.
It may solve some part of problem.}
\IFRU{К примеру, если программа использует какие-то XML-файлы, первым шагом может быть
установление, какая именно XML-библиотека для этого используется, ведь часто используется какая-то
стандартная (или очень известная) вместо самодельной.}
{For example, if program use a XML files, the first step may be determining, which
XML-library is used for processing, since standard (or well-known) library is usually used
instead of self-made one.}
\index{SAP}
\index{PDB}
\IFRU{К примеру, однажды я пытался разобраться как происходит компрессия/декомпрессия сетевых пакетов в SAP 6.0.
Это очень большая программа, но к ней идет подробный .PDB-файл с отладочной информацией, и это очень удобно.
Я в конце концов пришел к тому что одна из функций декомпрессирующая пакеты называется CsDecomprLZC().
Не сильно раздумывая, я решил погуглить и оказалось что функция с таким же названием имеется в MaxDB
(это опен-сорсный проект SAP)\footnote{Больше об этом в соответствующей секции~(\ref{sec:SAPGUI})}.}
{For example, once upon a time I tried to understand how SAP 6.0 network packets compression/decompression
is working.
It is a huge software, but a detailed .PDB with debugging information is present,
and that is cozily.
I finally came to idea that one of the functions doing decompressing of network packet called CsDecomprLZC().
Immediately I tried to google its name and I quickly found the function named as the same is used in MaxDB
(it is open-source SAP project)\footnote{More about it in relevant section~(\ref{sec:SAPGUI})}.}
\url{http://www.google.com/search?q=CsDecomprLZC}
\IFRU{Каково же было мое удивление, когда оказалось, что в MaxDB используется точно такой же алгоритм,
скорее всего, с таким же исходником.}
{Astoundingly, MaxDB and SAP 6.0 software shared likewise code for network packets compression/decompression.}
% sections here
\input{digging_into_code/identification/exec}
% binary files might be also here
\input{digging_into_code/communication_win32}
\input{digging_into_code/strings}
\input{digging_into_code/assert}
\input{digging_into_code/constants}
\input{digging_into_code/instructions}
\input{digging_into_code/suspicious_code}
\input{digging_into_code/magic_numbers_tracing}
\section{\IFRU{Прочее}{Other things}}
\ac{RTTI}~(\ref{RTTI})-\IFRU{информация также может быть полезна для идентификации
Си++-классов}{data may be also useful for C++ classes identification}.
\section{\IFRU{Старые методы, тем не менее, интересные}
{Old-school techniques, nevertheless, interesting to know}}
\input{digging_into_code/snapshots_comparing}