- •Лабораторная работа №5 «Основные функции программы OllyDbg»
- •Раздел 1
- •«Работа с регистрами»
- •1.1 Регистры
- •1.1.1 Изменение значения регистра
- •1.1.2 Использование частей 32-битных регистров
- •1.2 Ascii – символы
- •Раздел 2 «Дизассемблирование и анализ машинных программ»
- •1.1 Установка обычной точки останова
- •1.2 Редактирование команды
- •1.3 Операция Go to
- •1.4 Операция Undo selection
- •1.5 Entry Point (Точка входа)
- •1.6 Способы адресации
- •1.6.1 Прямая адресация
- •1.6.2 Косвенная адресация
- •1.7 Dll (динамические библиотеки)
- •1.8 Операции с api функциями
- •1.9 Сохранение изменений
1.1.2 Использование частей 32-битных регистров
В ассемблере можно обращаться к частям 32-битных регистров. Пример: использование части EDX - DX. DХ – 16-битный регистр. Если EDX = 7C90EB94, то DX – это последние 4 цифры EB94. Значение регистра DX можно просмотреть в OllyDbg при помощи Command Bar: в строке Command введите «? DX», и нажать Enter. Справа от строки Command шестнадцатеричное значение (hex) так же равно EB94, это также отображено на рисунке 1.5.
Рисунок 1.5 – Значение регистра DX
Также существуют регистры DL и DH, значения которых также можно посмотреть в OllyDbg. Подобное деление существует для всех остальных регистров.
1.2 Ascii – символы
Каждому символу присваивается шестнадцатеричное значение, что позволяет интерпретировать его как букву, символьное значение. В таблице 1.1 ASCII – символов можно увидеть три столбца: Character - символьное значение, Dec - десятеричное значение, Hex - соответствующее ему шестнадцатеричное значение.
Таблица 1.1 - ASCII-символы
Charact |
Dec |
Hex |
Charact |
Dec |
Hex |
Charact |
Dec |
Hex |
Charact |
Dec |
Hex |
esp |
32 |
20 |
8 |
56 |
38 |
P |
80 |
50 |
h |
104 |
68 |
! |
33 |
21 |
9 |
57 |
39 |
Q |
81 |
51 |
I |
105 |
69 |
" |
34 |
22 |
: |
58 |
3A |
R |
82 |
52 |
j |
106 |
6A |
# |
35 |
23 |
; |
59 |
3B |
S |
83 |
53 |
k |
107 |
6B |
$ |
36 |
24 |
< |
60 |
3C |
T |
84 |
54 |
l |
108 |
6C |
% |
37 |
25 |
= |
61 |
3D |
U |
85 |
55 |
m |
109 |
6D |
& |
38 |
26 |
> |
62 |
3E |
V |
86 |
56 |
n |
110 |
6E |
' |
39 |
27 |
? |
63 |
3F |
W |
87 |
57 |
o |
111 |
6F |
( |
40 |
28 |
@ |
64 |
40 |
X |
88 |
58 |
p |
112 |
70 |
) |
41 |
29 |
A |
65 |
41 |
Y |
89 |
59 |
q |
113 |
71 |
* |
42 |
2A |
B |
66 |
42 |
Z |
90 |
5A |
r |
114 |
72 |
+ |
43 |
2B |
C |
67 |
43 |
[ |
91 |
5B |
s |
115 |
73 |
, |
44 |
2C |
D |
68 |
44 |
\ |
92 |
5C |
t |
116 |
74 |
- |
45 |
2D |
E |
69 |
45 |
] |
93 |
5D |
u |
117 |
75 |
. |
46 |
2E |
F |
70 |
46 |
^ |
94 |
5E |
v |
118 |
76 |
/ |
47 |
2F |
G |
71 |
47 |
_ |
95 |
5F |
w |
119 |
77 |
0 |
48 |
30 |
H |
72 |
48 |
` |
96 |
60 |
x |
120 |
78 |
1 |
49 |
31 |
I |
73 |
49 |
a |
97 |
61 |
y |
121 |
79 |
2 |
50 |
32 |
J |
74 |
4A |
b |
98 |
62 |
z |
122 |
7A |
3 |
51 |
33 |
K |
75 |
4B |
c |
99 |
63 |
{ |
123 |
7B |
4 |
52 |
34 |
L |
76 |
4C |
d |
100 |
64 |
¦ |
124 |
7C |
5 |
53 |
35 |
M |
77 |
4D |
e |
101 |
65 |
} |
125 |
7D |
6 |
54 |
36 |
N |
78 |
4E |
f |
102 |
66 |
~ |
126 |
7E |
7 |
55 |
37 |
O |
79 |
4F |
g |
103 |
67 |
⌂ |
127 |
7F |
Символьное значение шестнадцатеричного числа можно узнать с помощью Command Bar: в строку Command через символ «?» вводится шестнадцатеричное число символьное значение которого, необходимо узнать. Далее Enter. Справа от строки Command, появятся соответствующие десятеричное и символьное значения, показанные на рисунке 1.6.
Рисунок 1.6 – Строка Command Bar
Также в окне Dump есть столбец с ASCII – символами, который изображен на рисунке 1.6.
Рисунок 1.6 – Окно Dump
Задание:
Используя методические указания, разобраться, как происходит изменение значений регистров, на примере файла Crackme.
Требования к зачету:
Научиться изменять значения регистров: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI.
Обратить внимание на изменение значений регистра EIP.
Уметь обращаться к частям 32-х битных регистров.
Уметь определять коды символов.
