Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа5.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
491.01 Кб
Скачать

1.3 Операция Go to

Эта операция служит для перехода по адресу на нужные байты. Чтобы ее выполнить нужно в любом из окон CPU window, кроме окна Registers window, в контекстном меню выбрать команду Go to - Expression(Ctrl+G), как показано на рисунке 1.3.

Рисунок 1.3 – Dump

Откроется окно Enter expression to follow in . Далее вводится адрес с клавиатуры. Если раньше уже осуществлялся переход по некоторому адресу то его можно выбрать из вкладки, отображенной на рисунке 1.4, которая хранит некоторые последние введенные адреса.

Рисунок 1.4 Enter expression to follow in …

Для перехода по указанному адресу необходимо нажать кнопку OK.

1.4 Операция Undo selection

Эта операция служит для возврата обратного значения измененных байтов. Сначала в окне Disassembler window или в Dump необходимо выделить строки с байтами, значения которых надо вернуть. Затем в контекстном меню выбрать команду Undo selection (Alt+BkSp), как показано на рисунке 1.5.

Рисунок 1.5 Dump

1.5 Entry Point (Точка входа)

Entry Point (Точка входа) - адрес команды, с которой стартует программа. При загрузке приложения в программе OllyDbg, отладчик останавливается на точке входа, анализирует код и ждёт дальнейших команд от пользователя.

Для разбора точки останова необходимо открыть в программе OllyDbg файл Crackme.exe. В данном случае точка входа соответствует адресу 401000 - рисунок 1.6.

Рисунок 1.6 Disassembler window

Обычно в строке состояния выводится причина, по которой остановлен отладчик. Сейчас там находится сообщение о том, что программа остановлена на точке останова - Program entry point - рисунок 1.7.

Рисунок 1.7 Вид окна программы OllyDbg

Почти все программы на старте останавливаются на точке входа. Есть такие, которые не останавливаются, так как используют способы обхода отладчика.

1.6 Способы адресации

1.6.1 Прямая адресация

Это самый простой способ - адрес явно указывается в одном из операндов команды. Например:

MOV dword ptr [00513450], ecx

MOV ax, word ptr [00510A25]

MOV al, byte ptr [00402811]

CALL 452200

JMP 421000

Не нужно производить какие-либо вычисления для разрешения адреса, так как его значение указано открытым текстом в программе.

1.6.2 Косвенная адресация

MOV dword ptr [eax], ecx

CALL EAX

JMP [ebx + 4]

Чтобы узнать настоящий адрес в любой из предыдущих команд, необходимо остановить отладчик на нужной команде и посмотреть значения регистров или, что гораздо удобнее, посмотреть в окно подсказки.

Для того, чтобы наглядно разобраться как происходит косвенная адресация, необходимо в программе OllyDbg открыть файл Crackme.exe. Далее выделив строку с командой PUSH DWORD PTR SS: [EBP+8] по адресу 004010E9 и нужно установить точку останова, как показано на рисунке 1.8.

Рисунок 1.8 – Disassembler window

Так как программа находится на точке входа (Entry Point), нельзя заранее узнать значение регистра EBP к моменту выполнения команды PUSH.

После нажатия клавиши F9, в окне подсказки высвечивается настоящий адрес EBP+8 = 12FFF8, показанный на рисунке 1.9. Он может отличаться - это свойственно стековым адресам. Значение EBP в данный момент равно 12FFF0, на основании чего и получилось, что EBP+8 = 12FFF8.

Рисунок 1.9 – Disassembler window

Чтобы узнать, что хранится в дампе по адресу EBP+8 необходимо в окне Dump выполнить команду: Go to - Expression = EBP+8. Это значение, отображенное на рисунке 1.10, будет 00104000 и помещено в стек.

Рисунок 1.10 Dump

Далее требуется выделить строку в окне Disassembler window по адресу 004010E9 и нажать клавишу F7. В окне Stack window можно увидеть, что по адресу 0012FFB8 теперь хранится значение 00401000 – это можно увидеть и на рисунке 1.11.

Рисунок 1.11 – Stack window

В случае любой команды с косвенной адресацией, настоящее значение адреса можно получить только в момент выполнения данной команды.