HHIDE_DUMP
Гость
H
HHIDE_DUMP
Гость
Привет всем. Сегодня я буду описывать OllyDebugger. OllyDebugger(далее Olly) – это суперский отладчик(ring-3). Популярность данного отладчика растёт не по дням, а по часам. Для новичков этот отладчик – самое то, для профессионалов умеющих его очень хорошо использовать – незаменимый инструмент. Данная статья опишет всё, что я умею делать в Olly.
11. Что из себя представляет Olly Debugger
Взято из справки: Olly - 32-битный отладчик уровня ассемблера, с интуитивным интерфейсом. Особенно полезен, если исходный текст не доступен или когда Вы испытываете проблемы с вашим компилятором.
Поддерживаемые процессоры. Olly поддерживает все 80x86, Pentium, MMX, 3DNow!, включая Athlon extentions, команды SSE и соответствующие форматы данных.
Форматы данных. Окна дампа отображают данные во всех обычных форматах: шестнадцатеричный, ASCII, Unicode, 16-и 32-разрядные целые числа со знаком/без знака/шестнадцатеричные, дизассемблеры (MASM, IDEAL или HLA).
Запуск. Вы можете определить исполняемый файл в командной строке, выбрать в меню, перетаскивать файл в Olly, перезапускать последнюю отлаживаемую программу или присоединяться к уже выполняющемуся процессу. Инсталляция не необходима, Вы можете запустить Olly с гибкого диска!
Отладка DLL. С Olly, Вы можете отладить автономные библиотеки динамической связи (DLL). Olly автоматически запускает маленькую выполнимую программу, которая загружает библиотеку и позволяет Вам вызывать её экспортируемые функции.
Анализ. Анализатор - одна из наиболее значительных частей Olly. Он распознает процедуры, циклы, таблицы, константы и строки, внедренные в код, хитрые конструкции, запросы к функциям API, номера параметров функции, секции импорта и так далее. Анализ делает двойной код намного более читаемым, облегчает отладку и уменьшает вероятность сбоев. Анализатор не ориентируется на компилятор и одинаково хорошо работает со всеми Windows программами.
Объектный сканер. Olly просматривает объектные файлы или библиотеки (форматы OMF И COFF), извлекает из них код, сегментирует и определяет местонахождение их в отлаживаемой программе.
Полная поддержка Unicode`а. Почти все операции, доступные для строк ASCII также доступны для строк Unicode`а, и наоборот.
22. Горячие клавиши
Именно с “горячих клавиш” я хочу начать рассказ, т.к. без них придётся много времени тратить на ползание по меню и отладчик сразу потеряет своё удобство. Начнём с панели управления:
Первая кнопка – открыть файл (гор. кл. F3)
Вторая кнопка – перезапустить файл (гор. кл. Ctrl+F2)
Третья кнопка – закрыть файл (гор. кл. Alt+F2)
Четвёртая кнопка – запустить программу (гор. кл. F9)
Пятая кнопка – приостановить запуск (гор. кл. F12)
Шестая кнопка – трассировать с заходом в подпрограммы (гор. кл. F7)
Седьмая кнопка - трассировать без захода в подпрограммы (гор. кл. F8)
Восьмая кнопка – запустить автоматическую трассировку заходя в подпрограммы (гор. кл. Ctrl+F11)
Девятая кнопка - запустить автоматическую трассировку без захода в подпрограммы (гор. кл. Ctrl+F12)
Десятая кнопка – выполнить программу до выхода из подпрограммы (гор. кл. Ctrl+F9)
Одиннадцатая кнопка – перейти на адрес (гор. кл. Ctrl+G)
Все остальные кнопки на панели управления будут рассмотрены позже.
Необходимые команды:
Ctrl+A – провести анализ кода
Ctrl+C – копировать данные
Ctrl+F7 – включить режим, когда код будет выполняться, как будто бы Вы нажали и не отпускаете кнопку F7
Ctrl+F8 – включить режим, когда код будет выполняться, как будто бы Вы нажали и не отпускаете кнопку F8
Shift+F8 – продолжить трассировку программы, даже если возникла исключительная ситуация
Shift+F9 – продолжить запуск программы, даже если возникла исключительная ситуация
Ctrl+T – настройки авто-трейсера
Ctrl+F11 – Запуск автоматической трассировки с заходом в подпрограммы
Ctrl+F12 – Запуск автоматической трассировки без захода в подпрограммы
F2 – Поставить брейкпоинт на выделенной строке
33. Плагины
Вы, наверное, начали возмущаться, почему я говорю про всё, но не про сам отладчик. В ответ я скажу: “Я посмотрю на тебя, как ты будешь отлаживать программу, хотя бы без плагина CommandBar”. Да, действительно без плагинов отлаживать программу намного труднее. Сейчас я приведу список установленных у меня плагинов и попутно буду объяснять, что к чему:
3. Olly Script – позволяет писать скрипты для помощи в отладке. Я не пользуюсь данным плагином, т.к. не считаю нужным автоматизировать отладку.
4. Olly Dump – позволяет дампить отлаживаемый процесс и за одно восстанавливает у него импорт. Супер плагин. Советую всем.
5. Command Bar – позволяет творить чудеса. В отладчике появляется строка, где можно вводить очень умные команды. IMHO без данного плагина отладка не возможна. Я перевёл справку от плагиа и приведу её в дополнении №1.
44. Первое знакомство
Как я уже говорил, с отладчиком очень легко работать. Приведу стандартный вид главного окна с загруженной для отладки программой:
Я сказал, что стандартное окно, я соврал, я поменял цвета . Теперь всё по порядку. В порядке описания: Главное окно, Окно регистров, Панель стека, Панель меню.
Главное окно: В этом окне происходит собственно сама отладка. Все инструкции приведены в дизассемблированном виде. Вы можете перемещать указательную строку при помощи курсора. При помощи указательной строки Вы можете выбирать, какие скопировать данные(здесь всё намного проще, чем в SoftIce`е. Выделил. Ctrl+C, зашёл куда надо Ctrl+V), какую изменить команду, куда поставить брейкпоинт и т.д. Сбоку выделен адрес, который должен выполниться следующим. Между колонкой адресов и колонкой дизассемблированного листинга есть колонка с машинным кодом инструкции. Самая последняя колонка содержит в себе комментарии.
Окно регистров: В окне регистров отображаются все 32-битные регистры, регистры флагов и различные другие регистры. Для того, чтобы изменить регистр надо щёлкнуть по его значению 2 раза и ввести новое значение. Реверсировать регистр флага можно путём двойного щелчка по одному из них.
Панель стека: В панели стека, можно изменить нужные вам байты в памяти, ставить брейкпоинты, подсматривать правильные рег. коды и т.д.
Панель меню: Панель меню будет рассматриваться в большой главе, т.к. эта тема очень важна.
55. Знакомство с главным меню
Начнём с меню под названием File. В данном меню есть вкладки: Open, Attach, Exit. Open – открыть файл для отладки, Attach – присоединиться к уже запущенному процессу для отладки, Exit – выйти.
View
Log – Просмотреть лог о загрузке файла и т.д. (горячая клавиша: Alt+L)
Executable modules – Посмотреть все модули, которые использует отлаживаемое приложение. (горячая клавиша: Alt+E)
Memory – Просмотреть карту памяти. Вот её приблизительный вид:
Первая колонка – адрес, по которому загружены различные секции файла, DLL библиотек. Вторая колонка – размер в памяти секции. Третья колонка – обычно название модуля. Четвёртая колонка – название секций. Пятая колонка – что содержится в секции. Все остальные колонки не важны, т.к. в них отражены атрибуты секций в памяти. (горячая клавиша: Alt+M)
Threads – Посмотреть все потоки программы, заморозить их, p`glnpnghr| их, изменить их приоритет, убить их.
Windows – Просмотреть до х.. информации об окнах, классах и т.д. используемых программой.
Handles – Просмотреть Handle`ы.
CPU – Открыть главное окно. (горячая клавиша: Alt+C)
SEH Chain – Посмотреть, поставить брейкпоинт на все объявленные Seh`и.
Patches – Просмотреть список всех изменений, которые Вы сделали в программе, отменить все изменения и т.д. (горячая клавиша: Ctrl+P)
Call Stack – Просмотреть все вызовы выполнения код в стеке. (горячая клавиша: Alt+K)
Breakpoints – Просмотреть все брейкпоинты, отключить, удалить их. (горячая клавиша: Alt+B)
Run Trace – Просмотреть лог трассировки.
File – Шестнадцатеричный редактор файлов.
Debug
Run – Запуск приложения.
Pause – Приостановить выполнение приложения.
Restart – Перезапуск отлаживаемой программы.
Close – Закрытие отлаживаемой программы.
Step into – Эквивалент F7.
Step over – Эквивалент F8.
Animate into – Эквивалент постоянно нажатой F7.
Animate over – Эквивалент постоянно нажатой F8.
Execute till return – Выполнить программу до выхода из подпрограммы.
Trace into – Авто трассировка с заходом в подпрограммы.
Trace over – Авто трассировка без захода в подпрограммы.
Set condition – Назначить условие для авто трассировки.
Close run trace – Остановить авто трассировку.
Hardware breakpoints – Просмотр hardware брейкпоинтов.
Всё остальное в данном меню не важно.
Options
Appearance – Настройки интерфейса отладчика. На данных настройках я не буду останавливать внимание, т.к. они не обязательны и в них Вы сами разберётесь.
Debugging options (гор. кл – Alt+O) – Настройки отладчика. Это самое интересное, этому пункту меню я посвящу следующую главу.
Just-in-time debugging – В данных настройках, можно назначить Olly, как отладчиком, который будет запускаться, когда какое- нибудь приложение вызовет серьёзную ошибку.
Add to Explorer – добавить в контекстное меню Explorer`a пункт для отладки программы.
66. Главные настройки программы
Я буду объяснять только самые важные опции.
Security
Warn when breakpoint is outside the code section – Сообщать, если Вы хотите поставить брейкпоинт вне секции кода. Конечно, эта опция не должна быть выбрана.
Warn when terminating active process – Спрашивать:”Действительно ли Вы хотите завершить процесс?”. Данная опция должна быть выбрана.
Warn if not administrator – Доставать Вас, если Вы не администратор. Данная опция для садо-мазо
Debug
Set high priority when tracing debugged process – Установить b{qnjhi приоритет для приложения при трассировке. Данную опцию надо выбирать “по вкусу” (у меня выбрана).
Events
Make first pause at – Сделать первую остановку на. В данном случае предлагается три варианта: Системный брейкпоинт, Точка входа в главный модуль, Главное окно. Опять же всё надо выбрать оптимальный вариант. Я выбрал точку входа в главный модуль.
Break on new module DLL – останавливаться на каждой новой подгруженной библиотеке.
Break on module unloading – Останавливаться при выгрузке DLL библиотек из памяти.
Break on new thread – Останавливаться при создании нового потока.
Break on thread end – Останавливаться при окончании потока.
Exceptions
Ignore memory access violations in KERNEL32 – Игнорировать ошибки памяти в Kernel32.
Int3 breaks – Не останавливаться на командах int3. Данная опция ОЧЕНЬ помогает при распаковке некоторых протекторов. Подробнее читайте мою статью по распаковке.
Trace
Size of run trace buffer – Размер буфера для трассировки. Лучше ставить максимальное значение.
Log commands – Вести лог работы трассировщика. Эта опция слегка тормозит трассировку, по этому надо ставить, когда есть нужда.
Always trace over system DLLs – Всегда трассировать мимо системных библиотек. Данная опция должна быть выбрана у всех и каждого.
After Executing till RET, step over RET – Данная опция позволяет останавливаться при нажатии Ctrl+F9 не на RET, а после его выполнения. Эту опцию я считаю очень удобной, по этому советую выбрать её.
SFX
When main module is self-exetractable - Здесь нам предлагают выбрать одну из трёх опций: Остановиться на начале кода распаковщика, Трассировать до ОЕР блоками, Трассировать до ОЕР по байту. Ну что сказать опции для халавщиков. Авто поиск ОЕР! Правда иногда Olly не правильно определяет запакована прога или нет.
Strings
Ну, здесь всё понятно. Декодировка различных символов.
Addresses
Данные опции не важны, т.к. они определяют, как будут показываться адреса.
Commands
Данные опции нужны только для людей, которые очень любят очень красивые асм листинги.
Disasm
Настройки дизассемблера. Можете пощёлкать по всем опциям, и посмотреть как будет выглядеть асм листинг. Все остальные настройки на мой взгляд не важны.
77. Первая отладка
Отлаживать мы будем Fant0m crackme 4. Скачать его можно от сюда:
00401217 E8 62010000 CALL <JMP.&USER32.GetDlgItemTextA>
0040121C 68 00010000 PUSH 100
00401221 68 84314000 PUSH 00403184
00401226 68 E9030000 PUSH 3E9 ; |ControlID = 3E9 (1001.)
0040122B FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
0040122E E8 4B010000 CALL <JMP.&USER32.GetDlgItemTextA>
00401233 FF75 08 PUSH DWORD PTR SS:[EBP+8]
00401236 E8 BE000000 CALL 004012F9
0040123B 83F8 00 CMP EAX, 0
0040123E 74 15 JE SHORT 00401255
00401240 6A 40 PUSH 40
00401242 68 29304000 PUSH 00403029 ; |Title = "Check Serial"
00401247 68 60304000 PUSH 00403060 ; |Text = "You got it! Congrats! "
0040124C 6A 00 PUSH 0 ; |hOwner = NULL
0040124E E8 49010000 CALL <JMP.&USER32.MessageBoxA>>
Сразу видно, что в процедуре по адресу 004012F9 происходит проверка на зарегистрированность. Доходим до её вызова по F8 и заходим в неё по F7. Что мы видим:
004012F9 55 PUSH EBP
004012FA 8BEC MOV EBP, ESP
004012FC 56 PUSH ESI
004012FD 57 PUSH EDI
004012FE 8D3584304000 LEA ESI, DWORD PTR DS:[403084]
00401304 8D3D84324000 LEA EDI, DWORD PTR DS:[403284]
0040130A 33C0 XOR EAX, EAX
0040130C 33C9 XOR ECX, ECX
0040130E B31A MOV BL, 1A
00401310 803E00 CMP BYTE PTR DS:[ESI], 0
00401313 7415 JE SHORT 0040132A
00401315 8A06 MOV AL, BYTE PTR DS:[ESI]
00401317 02C1 ADD AL, CL
00401319 32C1 XOR AL, CL
0040131B F6F3 DIV BL
0040131D 66C1E808 SHR AX, 8
00401321 0441 ADD AL, 41
00401323 8807 MOV BYTE PTR DS:[EDI], AL
00401325 47 INC EDI
00401326 46 INC ESI
00401327 41 INC ECX
00401328 EBE6 JMP SHORT 00401310
0040132A C60700 MOV BYTE PTR DS:[EDI], 0
0040132D 33C0 XOR EAX, EAX
0040132F 83F900 CMP ECX, 0
00401332 741A JE SHORT 0040134E
00401334 6884324000 PUSH 00403284 ; /String2 = ""
00401339 6884314000 PUSH 00403184 ; |String1 = "qwerty"
0040133E E8A1000000 CALL <JMP.&KERNEL32.lstrcmpA>
00401343 83F800 CMP EAX, 0
00401346 7404 JE SHORT 0040134C
00401348 33C0 XOR EAX, EAX
0040134A EB02 JMP SHORT 0040134E
0040134C 8BC1 MOV EAX, ECX
0040134E 5F POP EDI
0040134F 5E POP ESI
00401350 C9 LEAVE
00401351 C20400 RETN 4
Из данного кода ясно, что по адресу 0040133E сравнивается Ваш код с правильным. Поставьте брейкпоинт по этому адресу и нажмите F9. Комментарий String2 = "" сменится на подобный этому String2 = "ODMZAMHN". Дак вот, за место ODMZAMHN у Вас будет Ваш рег. код для Вашего имени. Жмите F9, вводите правильный код, жмите Check снимайте все брейкпоинты, жмите F9 и радуйтесь.
ППриложение №1
Помощь по Command Bar. Объяснение команд для Command Bar. Все команды, которые я посчитал лишними, были удалены из данного списка.
Выражения
CALC [выражение] - Вычеслить значение выражения
Дизассемблер
AT [выражение] - Перейти на адрес в дезассемблере
FOLLOW [выражением] - Перейти на адрес в дезассемблере
ORIG - Перейти на текущий адрес(EIP)
D [выражение] - Перейти на адрес в дампе
DUMP [выражение] - Перейти на адрес в дампе
DA [выражение] - Дамп в формате ассемблера
DB [выражение] - Дамп в шестнадцатеричной системе
DC [выражение] - Дамп в ASCII кодировке
DD [выражение] - Дамп как адреса (стек формат)
DU [выражение] - Дамп в UNICODE кодировке
DW [выражение] - Дамп в шестнадцатеричном word формате
STK [выражение] - Перейти на адрес в стеке
Трансляция
A [выражение] [, команда] - Дезассемблировать адрес
Метки и комментарии
L выражение, метка - Связывает символическую метку с адресом
C выражение, комментарий - Устанавливает комментарий для адреса
Брейкпоинты
BP [выражение] [,условие] - Устанавить брейкпоинт
BPX [имя функции] - Установить брейкпоинты на все инструкции в модуле, которые вызывают [имя функции]
BC [адрес] - Удалить контрольную точку по адресу
MR expression1 [,expression2] - Установить брейкпоинт на память на доступ на определённый участок
МВТ expression1 [, expression2] - Установить брейкпоинт на память на запись на определённый участок
MD - Удалить брейкпоинт на память
HR [адрес] - Установить Hardware брейкпоинт на один байт на доступ на адрес
HW [адрес] - Установить Hardware брейкпоинт на один байт на запись по адресу
HE [адрес] - Установить Hardware брейкпоинт на выполнение комманды по адресу
HD [номер брейкпоинта] - Удалить Hardware брейкпоинт под номером
Комманды трассировки
STOP - Сделать паузу в трассировке
PAUSE - Сделать паузу в трассировке
RUN - Запустить программу
G [адрес] - Выполнить до адреса
GE [expression] - Выполнить до адреса
S - Эквевалент F7
SI - Эквевалент F7
SO - Эквевалент F8
TR - Выполнить программу до выхода из подпрограммы
OllyDbg окна
LOG - Окно просмотра лога
MOD - Посмотреть выполняемые модули
MEM - Открыть окно карты памяти
CPU - Открыть главное окно программы
BRK - Открыть окно просмотра брейкпоинтов
OPT - Настройки
Разные команды
EXIT - Выйти из Olly
QUIT - Выйти из Olly
OPEN [имя файла] - Открыть файл для отладки
CLOSE - Закрыть отлаживаеммую программу
RST - Перезапустить отлаживаеммую программу
HELP - показывают справку(данный текст, но непереведённый)
HELP - Olly показывают справку Oll
HELP APIfunction - справка по API функциям
ППриложение №2
Брейкпоинты. Olly поддерживает несколько видов брейкпоинтов:
- Обычный брейкпоинт, где первый байт команды, на которой Вы хотите прерваться заменяется на INT3 (Trap to Debugger). Вы можете разместить брейкпоинт, выбирая команду в дизассемблере и нажимая F2, или через всплывающее меню. Когда Вы нажимаете F2 второй раз, когда брейкпоинт уже установлен, он будет удалён. Количество брейкпоинтов INT3 неограниченно. Когда Вы закрываете отлаживаемую программу, или отладчик, Olly автоматически сохраняет брейкпоинты. Никогда не пробуйте установить брейкпоинт на данных или в середине команды! Olly предупредит Вас, если Вы пытаетесь устанавливать брейкпоинт вне секции кода. Вы можете выключить это предупреждение в настройках защиты. В некоторых случаях Отладчик может вставить собственные временные контрольные точки брейкпоинты INT3.
- Условный брейкпоинт (гор. кл. Shift+F2) - обычный брейкпоинт INT3 с условием. Каждый раз, когда отладчик сталкивается с таким брейкпоинтом, оценивает его выражение и, если результат является ненулевым, или выражение недействительно, останавливает отлаживаемую программу.
- Условный брейкпоинт с ведением лога (гор. кл. Shift+F4) - условный брейкпоинт с ведением лога, чтобы регистрировать значение выражения или параметров известной функции каждый раз, когда брейкпоинт выполняется.
- Брейкпоинт на память. Olly позволяет ставить единственный брейкпоинт на память одновременно. Вы выбираете некоторую часть памяти в дезассемблере или дампе центрального процессора и используете всплывающее меню, чтобы установить брейкпоинт на o`lr|. Предыдущий брейкпоинт на память, если таковой вообще имеется, будет автоматически удален. У Вас есть два варианта: остановка на доступе к памяти (чтение, запись или выполнение) и только на запись. Чтобы установить брейкпоинт, Olly изменяет атрибуты блоков памяти, содержащих данные.
- Аппаратный брейкпоинт (доступен только при использовании отладчика под Windows ME, NT, 2000 или XP). 80x86-совместимые процессоры позволяют Вам устанавливать 4 аппаратных брейкпоинта. В отличие от брейкпоинта на память, аппаратные брейкпоинты не замедляют скорость выполнения, но охватывают только до 4 байтов.
- Однократная остановка на доступе к памяти (доступна только под Windows NT, 2000 и XP). Вы можете установить его в окне Memory на целый блок памяти через всплывающее меню или нажимая F2. Этот брейкпоинт особенно полезен, если Вы хотите перехватить запросы к некоторому модулю.
- Автотрассировка – Вы должны указать условие(гор. кл. Ctrl+T), при котором отладчик остановит программу. Обратите внимание, что эта опция может значительно (до 20 %), замедлить скорость выполнения программы.
OllyDbg также может остановить выполнение программы на некоторых событиях, например при загрузке или выгрузке DLL, зарождению или завершению потока.
ППриложение №3
Мои настройки отладчика.
Если Вы хотите использовать мои настройки, замените все данные этим текстом в файле ollydbg.ini, который находится в той же папке, где и установлен отладчик.
ЗЗавершение
Вот и закончилось ваше знакомство с замечательным отладчиком OllyDebugger. Конечно, все возможности этого отладчика не возможно описать в статье, но я попытался, и надеюсь, у меня получилось. Некоторые возможности остались за гранью этой статьи, но я уверен, что Вы сами для себя откроете эти возможности. Я учил Olly абсолютно без статей, и у Вас получится продолжить ознакомление с отладчиком без чьей либо помощи.
11. Что из себя представляет Olly Debugger
Взято из справки: Olly - 32-битный отладчик уровня ассемблера, с интуитивным интерфейсом. Особенно полезен, если исходный текст не доступен или когда Вы испытываете проблемы с вашим компилятором.
Поддерживаемые процессоры. Olly поддерживает все 80x86, Pentium, MMX, 3DNow!, включая Athlon extentions, команды SSE и соответствующие форматы данных.
Форматы данных. Окна дампа отображают данные во всех обычных форматах: шестнадцатеричный, ASCII, Unicode, 16-и 32-разрядные целые числа со знаком/без знака/шестнадцатеричные, дизассемблеры (MASM, IDEAL или HLA).
Запуск. Вы можете определить исполняемый файл в командной строке, выбрать в меню, перетаскивать файл в Olly, перезапускать последнюю отлаживаемую программу или присоединяться к уже выполняющемуся процессу. Инсталляция не необходима, Вы можете запустить Olly с гибкого диска!
Отладка DLL. С Olly, Вы можете отладить автономные библиотеки динамической связи (DLL). Olly автоматически запускает маленькую выполнимую программу, которая загружает библиотеку и позволяет Вам вызывать её экспортируемые функции.
Анализ. Анализатор - одна из наиболее значительных частей Olly. Он распознает процедуры, циклы, таблицы, константы и строки, внедренные в код, хитрые конструкции, запросы к функциям API, номера параметров функции, секции импорта и так далее. Анализ делает двойной код намного более читаемым, облегчает отладку и уменьшает вероятность сбоев. Анализатор не ориентируется на компилятор и одинаково хорошо работает со всеми Windows программами.
Объектный сканер. Olly просматривает объектные файлы или библиотеки (форматы OMF И COFF), извлекает из них код, сегментирует и определяет местонахождение их в отлаживаемой программе.
Полная поддержка Unicode`а. Почти все операции, доступные для строк ASCII также доступны для строк Unicode`а, и наоборот.
22. Горячие клавиши
Именно с “горячих клавиш” я хочу начать рассказ, т.к. без них придётся много времени тратить на ползание по меню и отладчик сразу потеряет своё удобство. Начнём с панели управления:
Первая кнопка – открыть файл (гор. кл. F3)
Вторая кнопка – перезапустить файл (гор. кл. Ctrl+F2)
Третья кнопка – закрыть файл (гор. кл. Alt+F2)
Четвёртая кнопка – запустить программу (гор. кл. F9)
Пятая кнопка – приостановить запуск (гор. кл. F12)
Шестая кнопка – трассировать с заходом в подпрограммы (гор. кл. F7)
Седьмая кнопка - трассировать без захода в подпрограммы (гор. кл. F8)
Восьмая кнопка – запустить автоматическую трассировку заходя в подпрограммы (гор. кл. Ctrl+F11)
Девятая кнопка - запустить автоматическую трассировку без захода в подпрограммы (гор. кл. Ctrl+F12)
Десятая кнопка – выполнить программу до выхода из подпрограммы (гор. кл. Ctrl+F9)
Одиннадцатая кнопка – перейти на адрес (гор. кл. Ctrl+G)
Все остальные кнопки на панели управления будут рассмотрены позже.
Необходимые команды:
Ctrl+A – провести анализ кода
Ctrl+C – копировать данные
Ctrl+F7 – включить режим, когда код будет выполняться, как будто бы Вы нажали и не отпускаете кнопку F7
Ctrl+F8 – включить режим, когда код будет выполняться, как будто бы Вы нажали и не отпускаете кнопку F8
Shift+F8 – продолжить трассировку программы, даже если возникла исключительная ситуация
Shift+F9 – продолжить запуск программы, даже если возникла исключительная ситуация
Ctrl+T – настройки авто-трейсера
Ctrl+F11 – Запуск автоматической трассировки с заходом в подпрограммы
Ctrl+F12 – Запуск автоматической трассировки без захода в подпрограммы
F2 – Поставить брейкпоинт на выделенной строке
33. Плагины
Вы, наверное, начали возмущаться, почему я говорю про всё, но не про сам отладчик. В ответ я скажу: “Я посмотрю на тебя, как ты будешь отлаживать программу, хотя бы без плагина CommandBar”. Да, действительно без плагинов отлаживать программу намного труднее. Сейчас я приведу список установленных у меня плагинов и попутно буду объяснять, что к чему:
- IsDebuggerPresent – Прячет отладчик от обнаружения при помощи функции IsDebuggerPresent.
3. Olly Script – позволяет писать скрипты для помощи в отладке. Я не пользуюсь данным плагином, т.к. не считаю нужным автоматизировать отладку.
4. Olly Dump – позволяет дампить отлаживаемый процесс и за одно восстанавливает у него импорт. Супер плагин. Советую всем.
5. Command Bar – позволяет творить чудеса. В отладчике появляется строка, где можно вводить очень умные команды. IMHO без данного плагина отладка не возможна. Я перевёл справку от плагиа и приведу её в дополнении №1.
44. Первое знакомство
Как я уже говорил, с отладчиком очень легко работать. Приведу стандартный вид главного окна с загруженной для отладки программой:
Я сказал, что стандартное окно, я соврал, я поменял цвета . Теперь всё по порядку. В порядке описания: Главное окно, Окно регистров, Панель стека, Панель меню.
Главное окно: В этом окне происходит собственно сама отладка. Все инструкции приведены в дизассемблированном виде. Вы можете перемещать указательную строку при помощи курсора. При помощи указательной строки Вы можете выбирать, какие скопировать данные(здесь всё намного проще, чем в SoftIce`е. Выделил. Ctrl+C, зашёл куда надо Ctrl+V), какую изменить команду, куда поставить брейкпоинт и т.д. Сбоку выделен адрес, который должен выполниться следующим. Между колонкой адресов и колонкой дизассемблированного листинга есть колонка с машинным кодом инструкции. Самая последняя колонка содержит в себе комментарии.
Окно регистров: В окне регистров отображаются все 32-битные регистры, регистры флагов и различные другие регистры. Для того, чтобы изменить регистр надо щёлкнуть по его значению 2 раза и ввести новое значение. Реверсировать регистр флага можно путём двойного щелчка по одному из них.
Панель стека: В панели стека, можно изменить нужные вам байты в памяти, ставить брейкпоинты, подсматривать правильные рег. коды и т.д.
Панель меню: Панель меню будет рассматриваться в большой главе, т.к. эта тема очень важна.
55. Знакомство с главным меню
Начнём с меню под названием File. В данном меню есть вкладки: Open, Attach, Exit. Open – открыть файл для отладки, Attach – присоединиться к уже запущенному процессу для отладки, Exit – выйти.
View
Log – Просмотреть лог о загрузке файла и т.д. (горячая клавиша: Alt+L)
Executable modules – Посмотреть все модули, которые использует отлаживаемое приложение. (горячая клавиша: Alt+E)
Memory – Просмотреть карту памяти. Вот её приблизительный вид:
Первая колонка – адрес, по которому загружены различные секции файла, DLL библиотек. Вторая колонка – размер в памяти секции. Третья колонка – обычно название модуля. Четвёртая колонка – название секций. Пятая колонка – что содержится в секции. Все остальные колонки не важны, т.к. в них отражены атрибуты секций в памяти. (горячая клавиша: Alt+M)
Threads – Посмотреть все потоки программы, заморозить их, p`glnpnghr| их, изменить их приоритет, убить их.
Windows – Просмотреть до х.. информации об окнах, классах и т.д. используемых программой.
Handles – Просмотреть Handle`ы.
CPU – Открыть главное окно. (горячая клавиша: Alt+C)
SEH Chain – Посмотреть, поставить брейкпоинт на все объявленные Seh`и.
Patches – Просмотреть список всех изменений, которые Вы сделали в программе, отменить все изменения и т.д. (горячая клавиша: Ctrl+P)
Call Stack – Просмотреть все вызовы выполнения код в стеке. (горячая клавиша: Alt+K)
Breakpoints – Просмотреть все брейкпоинты, отключить, удалить их. (горячая клавиша: Alt+B)
Run Trace – Просмотреть лог трассировки.
File – Шестнадцатеричный редактор файлов.
Debug
Run – Запуск приложения.
Pause – Приостановить выполнение приложения.
Restart – Перезапуск отлаживаемой программы.
Close – Закрытие отлаживаемой программы.
Step into – Эквивалент F7.
Step over – Эквивалент F8.
Animate into – Эквивалент постоянно нажатой F7.
Animate over – Эквивалент постоянно нажатой F8.
Execute till return – Выполнить программу до выхода из подпрограммы.
Trace into – Авто трассировка с заходом в подпрограммы.
Trace over – Авто трассировка без захода в подпрограммы.
Set condition – Назначить условие для авто трассировки.
Close run trace – Остановить авто трассировку.
Hardware breakpoints – Просмотр hardware брейкпоинтов.
Всё остальное в данном меню не важно.
Options
Appearance – Настройки интерфейса отладчика. На данных настройках я не буду останавливать внимание, т.к. они не обязательны и в них Вы сами разберётесь.
Debugging options (гор. кл – Alt+O) – Настройки отладчика. Это самое интересное, этому пункту меню я посвящу следующую главу.
Just-in-time debugging – В данных настройках, можно назначить Olly, как отладчиком, который будет запускаться, когда какое- нибудь приложение вызовет серьёзную ошибку.
Add to Explorer – добавить в контекстное меню Explorer`a пункт для отладки программы.
66. Главные настройки программы
Я буду объяснять только самые важные опции.
Security
Warn when breakpoint is outside the code section – Сообщать, если Вы хотите поставить брейкпоинт вне секции кода. Конечно, эта опция не должна быть выбрана.
Warn when terminating active process – Спрашивать:”Действительно ли Вы хотите завершить процесс?”. Данная опция должна быть выбрана.
Warn if not administrator – Доставать Вас, если Вы не администратор. Данная опция для садо-мазо
Debug
Set high priority when tracing debugged process – Установить b{qnjhi приоритет для приложения при трассировке. Данную опцию надо выбирать “по вкусу” (у меня выбрана).
Events
Make first pause at – Сделать первую остановку на. В данном случае предлагается три варианта: Системный брейкпоинт, Точка входа в главный модуль, Главное окно. Опять же всё надо выбрать оптимальный вариант. Я выбрал точку входа в главный модуль.
Break on new module DLL – останавливаться на каждой новой подгруженной библиотеке.
Break on module unloading – Останавливаться при выгрузке DLL библиотек из памяти.
Break on new thread – Останавливаться при создании нового потока.
Break on thread end – Останавливаться при окончании потока.
Exceptions
Ignore memory access violations in KERNEL32 – Игнорировать ошибки памяти в Kernel32.
Int3 breaks – Не останавливаться на командах int3. Данная опция ОЧЕНЬ помогает при распаковке некоторых протекторов. Подробнее читайте мою статью по распаковке.
Trace
Size of run trace buffer – Размер буфера для трассировки. Лучше ставить максимальное значение.
Log commands – Вести лог работы трассировщика. Эта опция слегка тормозит трассировку, по этому надо ставить, когда есть нужда.
Always trace over system DLLs – Всегда трассировать мимо системных библиотек. Данная опция должна быть выбрана у всех и каждого.
After Executing till RET, step over RET – Данная опция позволяет останавливаться при нажатии Ctrl+F9 не на RET, а после его выполнения. Эту опцию я считаю очень удобной, по этому советую выбрать её.
SFX
When main module is self-exetractable - Здесь нам предлагают выбрать одну из трёх опций: Остановиться на начале кода распаковщика, Трассировать до ОЕР блоками, Трассировать до ОЕР по байту. Ну что сказать опции для халавщиков. Авто поиск ОЕР! Правда иногда Olly не правильно определяет запакована прога или нет.
Strings
Ну, здесь всё понятно. Декодировка различных символов.
Addresses
Данные опции не важны, т.к. они определяют, как будут показываться адреса.
Commands
Данные опции нужны только для людей, которые очень любят очень красивые асм листинги.
Disasm
Настройки дизассемблера. Можете пощёлкать по всем опциям, и посмотреть как будет выглядеть асм листинг. Все остальные настройки на мой взгляд не важны.
77. Первая отладка
Отлаживать мы будем Fant0m crackme 4. Скачать его можно от сюда:
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
. Из этого crackme мы попытаемся достать правильный рег. номер для Вашего имени. Загружаем crackme под отладчиком и жмём F9 для запуска. Вводим имя чела, на которого мы хотим зарегить данный crackme. Вводим любой пароль. Так, теперь нам надо поставить брейкпоинт на считывание имени и пароля. Переключаемся в Olly и в командной qrpnje пишем bpx GetDlgItemTextA [Enter]. Жмём Check. Сразу оказались в Olly в таком месте:00401217 E8 62010000 CALL <JMP.&USER32.GetDlgItemTextA>
0040121C 68 00010000 PUSH 100
00401221 68 84314000 PUSH 00403184
00401226 68 E9030000 PUSH 3E9 ; |ControlID = 3E9 (1001.)
0040122B FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
0040122E E8 4B010000 CALL <JMP.&USER32.GetDlgItemTextA>
00401233 FF75 08 PUSH DWORD PTR SS:[EBP+8]
00401236 E8 BE000000 CALL 004012F9
0040123B 83F8 00 CMP EAX, 0
0040123E 74 15 JE SHORT 00401255
00401240 6A 40 PUSH 40
00401242 68 29304000 PUSH 00403029 ; |Title = "Check Serial"
00401247 68 60304000 PUSH 00403060 ; |Text = "You got it! Congrats! "
0040124C 6A 00 PUSH 0 ; |hOwner = NULL
0040124E E8 49010000 CALL <JMP.&USER32.MessageBoxA>>
Сразу видно, что в процедуре по адресу 004012F9 происходит проверка на зарегистрированность. Доходим до её вызова по F8 и заходим в неё по F7. Что мы видим:
004012F9 55 PUSH EBP
004012FA 8BEC MOV EBP, ESP
004012FC 56 PUSH ESI
004012FD 57 PUSH EDI
004012FE 8D3584304000 LEA ESI, DWORD PTR DS:[403084]
00401304 8D3D84324000 LEA EDI, DWORD PTR DS:[403284]
0040130A 33C0 XOR EAX, EAX
0040130C 33C9 XOR ECX, ECX
0040130E B31A MOV BL, 1A
00401310 803E00 CMP BYTE PTR DS:[ESI], 0
00401313 7415 JE SHORT 0040132A
00401315 8A06 MOV AL, BYTE PTR DS:[ESI]
00401317 02C1 ADD AL, CL
00401319 32C1 XOR AL, CL
0040131B F6F3 DIV BL
0040131D 66C1E808 SHR AX, 8
00401321 0441 ADD AL, 41
00401323 8807 MOV BYTE PTR DS:[EDI], AL
00401325 47 INC EDI
00401326 46 INC ESI
00401327 41 INC ECX
00401328 EBE6 JMP SHORT 00401310
0040132A C60700 MOV BYTE PTR DS:[EDI], 0
0040132D 33C0 XOR EAX, EAX
0040132F 83F900 CMP ECX, 0
00401332 741A JE SHORT 0040134E
00401334 6884324000 PUSH 00403284 ; /String2 = ""
00401339 6884314000 PUSH 00403184 ; |String1 = "qwerty"
0040133E E8A1000000 CALL <JMP.&KERNEL32.lstrcmpA>
00401343 83F800 CMP EAX, 0
00401346 7404 JE SHORT 0040134C
00401348 33C0 XOR EAX, EAX
0040134A EB02 JMP SHORT 0040134E
0040134C 8BC1 MOV EAX, ECX
0040134E 5F POP EDI
0040134F 5E POP ESI
00401350 C9 LEAVE
00401351 C20400 RETN 4
Из данного кода ясно, что по адресу 0040133E сравнивается Ваш код с правильным. Поставьте брейкпоинт по этому адресу и нажмите F9. Комментарий String2 = "" сменится на подобный этому String2 = "ODMZAMHN". Дак вот, за место ODMZAMHN у Вас будет Ваш рег. код для Вашего имени. Жмите F9, вводите правильный код, жмите Check снимайте все брейкпоинты, жмите F9 и радуйтесь.
ППриложение №1
Помощь по Command Bar. Объяснение команд для Command Bar. Все команды, которые я посчитал лишними, были удалены из данного списка.
Выражения
CALC [выражение] - Вычеслить значение выражения
Дизассемблер
AT [выражение] - Перейти на адрес в дезассемблере
FOLLOW [выражением] - Перейти на адрес в дезассемблере
ORIG - Перейти на текущий адрес(EIP)
- - Перейти на текущий адрес(EIP)
D [выражение] - Перейти на адрес в дампе
DUMP [выражение] - Перейти на адрес в дампе
DA [выражение] - Дамп в формате ассемблера
DB [выражение] - Дамп в шестнадцатеричной системе
DC [выражение] - Дамп в ASCII кодировке
DD [выражение] - Дамп как адреса (стек формат)
DU [выражение] - Дамп в UNICODE кодировке
DW [выражение] - Дамп в шестнадцатеричном word формате
STK [выражение] - Перейти на адрес в стеке
Трансляция
A [выражение] [, команда] - Дезассемблировать адрес
Метки и комментарии
L выражение, метка - Связывает символическую метку с адресом
C выражение, комментарий - Устанавливает комментарий для адреса
Брейкпоинты
BP [выражение] [,условие] - Устанавить брейкпоинт
BPX [имя функции] - Установить брейкпоинты на все инструкции в модуле, которые вызывают [имя функции]
BC [адрес] - Удалить контрольную точку по адресу
MR expression1 [,expression2] - Установить брейкпоинт на память на доступ на определённый участок
МВТ expression1 [, expression2] - Установить брейкпоинт на память на запись на определённый участок
MD - Удалить брейкпоинт на память
HR [адрес] - Установить Hardware брейкпоинт на один байт на доступ на адрес
HW [адрес] - Установить Hardware брейкпоинт на один байт на запись по адресу
HE [адрес] - Установить Hardware брейкпоинт на выполнение комманды по адресу
HD [номер брейкпоинта] - Удалить Hardware брейкпоинт под номером
Комманды трассировки
STOP - Сделать паузу в трассировке
PAUSE - Сделать паузу в трассировке
RUN - Запустить программу
G [адрес] - Выполнить до адреса
GE [expression] - Выполнить до адреса
S - Эквевалент F7
SI - Эквевалент F7
SO - Эквевалент F8
TR - Выполнить программу до выхода из подпрограммы
OllyDbg окна
LOG - Окно просмотра лога
MOD - Посмотреть выполняемые модули
MEM - Открыть окно карты памяти
CPU - Открыть главное окно программы
BRK - Открыть окно просмотра брейкпоинтов
OPT - Настройки
Разные команды
EXIT - Выйти из Olly
QUIT - Выйти из Olly
OPEN [имя файла] - Открыть файл для отладки
CLOSE - Закрыть отлаживаеммую программу
RST - Перезапустить отлаживаеммую программу
HELP - показывают справку(данный текст, но непереведённый)
HELP - Olly показывают справку Oll
HELP APIfunction - справка по API функциям
ППриложение №2
Брейкпоинты. Olly поддерживает несколько видов брейкпоинтов:
- Обычный брейкпоинт, где первый байт команды, на которой Вы хотите прерваться заменяется на INT3 (Trap to Debugger). Вы можете разместить брейкпоинт, выбирая команду в дизассемблере и нажимая F2, или через всплывающее меню. Когда Вы нажимаете F2 второй раз, когда брейкпоинт уже установлен, он будет удалён. Количество брейкпоинтов INT3 неограниченно. Когда Вы закрываете отлаживаемую программу, или отладчик, Olly автоматически сохраняет брейкпоинты. Никогда не пробуйте установить брейкпоинт на данных или в середине команды! Olly предупредит Вас, если Вы пытаетесь устанавливать брейкпоинт вне секции кода. Вы можете выключить это предупреждение в настройках защиты. В некоторых случаях Отладчик может вставить собственные временные контрольные точки брейкпоинты INT3.
- Условный брейкпоинт (гор. кл. Shift+F2) - обычный брейкпоинт INT3 с условием. Каждый раз, когда отладчик сталкивается с таким брейкпоинтом, оценивает его выражение и, если результат является ненулевым, или выражение недействительно, останавливает отлаживаемую программу.
- Условный брейкпоинт с ведением лога (гор. кл. Shift+F4) - условный брейкпоинт с ведением лога, чтобы регистрировать значение выражения или параметров известной функции каждый раз, когда брейкпоинт выполняется.
- Брейкпоинт на память. Olly позволяет ставить единственный брейкпоинт на память одновременно. Вы выбираете некоторую часть памяти в дезассемблере или дампе центрального процессора и используете всплывающее меню, чтобы установить брейкпоинт на o`lr|. Предыдущий брейкпоинт на память, если таковой вообще имеется, будет автоматически удален. У Вас есть два варианта: остановка на доступе к памяти (чтение, запись или выполнение) и только на запись. Чтобы установить брейкпоинт, Olly изменяет атрибуты блоков памяти, содержащих данные.
- Аппаратный брейкпоинт (доступен только при использовании отладчика под Windows ME, NT, 2000 или XP). 80x86-совместимые процессоры позволяют Вам устанавливать 4 аппаратных брейкпоинта. В отличие от брейкпоинта на память, аппаратные брейкпоинты не замедляют скорость выполнения, но охватывают только до 4 байтов.
- Однократная остановка на доступе к памяти (доступна только под Windows NT, 2000 и XP). Вы можете установить его в окне Memory на целый блок памяти через всплывающее меню или нажимая F2. Этот брейкпоинт особенно полезен, если Вы хотите перехватить запросы к некоторому модулю.
- Автотрассировка – Вы должны указать условие(гор. кл. Ctrl+T), при котором отладчик остановит программу. Обратите внимание, что эта опция может значительно (до 20 %), замедлить скорость выполнения программы.
OllyDbg также может остановить выполнение программы на некоторых событиях, например при загрузке или выгрузке DLL, зарождению или завершению потока.
ППриложение №3
Мои настройки отладчика.
Если Вы хотите использовать мои настройки, замените все данные этим текстом в файле ollydbg.ini, который находится в той же папке, где и установлен отладчик.
Код:
[Settings]
Check DLL versions=0
Show toolbar=1
Status in toolbar=0
Use hardware breakpoints to step=1
Restore windows=104191
Scroll MDI=1
Horizontal scroll=0
Topmost window=0
Index of default font=1
Index of default colours=0
Index of default syntax highlighting=0
Log buffer size index=0
Run trace buffer size index=7
Group adjacent commands in profile=1
Highlighted trace register=-1
IDEAL disassembling mode=0
Disassemble in lowercase=0
Separate arguments with TAB=0
Extra space between arguments=1
Show default segments=1
NEAR jump modifiers=0
Use short form of string commands=0
Size sensitive mnemonics=1
SSE size decoding mode=0
Top of FPU stack=1
Always show memory size=1
Decode registers for any IP=0
Show symbolic addresses=1
Show local module names=0
Gray data used as filling=1
Show jump direction=0
Show jump path=0
Show jumpfrom path=0
Show path if jump is not taken=0
Underline fixups=1
Center FOLLOWed command=0
Show stack frames=1
Show local names in stack=1
Extended stack trace=0
Synchronize source with CPU=1
Include SFX extractor in code=1
SFX trace mode=0
Use real SFX entry from previous run=1
Ignore SFX exceptions=1
First pause=1
Stop on new DLL=0
Stop on DLL unload=0
Stop on new thread=0
Stop on thread end=0
Stop on debug string=0
Decode SSE registers=0
Enable last error=1
Ignore access violations in KERNEL32=1
Ignore INT3=1
Ignore TRAP=0
Ignore access violations=0
Step in unknown commands=1
Ignore division by 0=0
Ignore illegal instructions=0
Ignore all FPU exceptions=0
Warn when frequent breaks=0
Warn when break not in code=0
Autoreturn=1
Save original command in trace=1
Show traced ESP=1
Animate over system DLLs=1
Trace over string commands=1
Synchronize CPU and Run trace=0
Ignore custom exceptions=1
Smart update=1
Set high priority=1
Append arguments=1
Use ExitProcess=1
Allow injection to get WinProc=0
Sort WM_XXX by name=0
Type of last WinProc breakpoint=0
Snow-free drawing=1
Demangle symbolic names=0
Keep ordinal in name=1
Only ASCII printable in dump=0
Allow diacritical symbols=1
String decoding=0
Warn if not administrator=0
Warn when terminating process=1
Align dialogs=1
Use font of calling window=0
Specified dialog font=0
Restore window positions=1
Restore width of columns=0
Highlight sorted column=0
Compress analysis data=1
Backup UDD files=1
Fill rest of command with NOPs=1
Reference search mode=0
Global search=0
Aligned search=0
Allow error margin=0
Keep size of hex edit selection=0
Modify tag of FPU register=1
Hex inspector limits=1
MMX display mode=0
Last selected options card=15
Last selected appearance card=6
Ignore case in text search=1
Letter key in Disassembler=1
Looseness of code analysis=1
Decode pascal strings=1
Guess number of arguments=1
Accept far calls and returns=0
Accept direct segment modifications=0
Decode VxD calls=0
Accept privileged commands=0
Accept I/O commands=0
Accept NOPs=1
Accept shifts out of range=0
Accept superfluous prefixes=0
Accept LOCK prefixes=0
Accept unaligned stack operations=1
Accept non-standard command forms=1
Show ARG and LOCAL in procedures=0
Save analysis to file=1
Analyse main module automatically=1
Analyse code structure=1
Decode ifs as switches=0
Save trace to file=0
Trace contents of registers=1
Functions preserve registers=0
Decode tricks=0
Automatically select register type=1
Show decoded arguments=1
Show decoded arguments in stack=1
Show arguments in call stack=1
Show induced calls=1
Label display mode=0
Label includes module name=0
Highlight symbolic labels=0
Highlight RETURNs in stack=1
Ignore path in user data file=1
Ignore timestamp in user data file=1
Ignore CRC in user data file=1
Default sort mode in Names=1
Tabulate columns in log file=0
Append data to existing log file=0
Flush gathered data to log file=0
Skip spaces in source comments=1
Hide non-existing source files=1
Tab stops=8
File graph mode=2
Show internal handle names=0
Hide irrelevant handles=0
Use RET instead of RETN=0
Show traced flags=1
Number of lines that follow EIP=0
Save out-of-module user data=0
[Placement]
CPU=194,324,812,360,3
CPU subwindows=327,798,321,798,537,771,479,909
OllyTest=0,0,1024,746,1
References=256,420,256,210,1
Breakpoints=75,248,626,168,1
Run trace=246,391,432,176,1
Patches=0,210,256,210,1
Executable modules=263,41,636,175,1
Memory map=357,41,519,274,1
Bookmarks=110,145,624,175,1
Profile=132,174,624,182,1
Windows=132,177,614,179,1
Threads=155,204,492,124,1
Log data=421,107,378,221,1
Source=256,210,256,210,1
Handles=196,325,647,175,1
Source files=205,268,473,168,1
Call stack=0,420,256,210,1
Call tree=132,132,791,175,1
SEH chain=0,0,256,210,1
Watch expressions=256,0,256,210,1
[Appearance]
CPU scheme=0
CPU Disassembler=7,0,0,0,0
CPU Dump=7,0,1,0,4353,0
CPU Stack=7,0,0,0
CPU Info=7,0,0,0
CPU Registers=7,0,0,0
References=7,0,1,0,0
Breakpoints=1,0,1,0,0
Run trace=1,0,1,0,0
Patches=1,0,1,0,0
Executable modules=1,0,1,0,0
Memory map=1,0,1,0,0
ANAME=7,0,1,0,0
Bookmarks=1,0,1,1,0
Profile=1,0,1,0,0
Windows=1,0,1,0,0
Threads=1,0,1,0,0
Log data=1,0,1,0,0
Source=1,0,0,0,0
Handles=1,0,1,0,0
Source files=1,0,1,0,0
Call stack=1,0,1,0,0
Call tree=1,0,1,0,0
SEH chain=1,0,1,0,0
Watch expressions=1,0,1,0,0
[Columns]
CPU Disassembler=63,119,280,1792
CPU Dump=63,336,119
CPU Stack=63,70,1792
References=63,280,1792
Breakpoints=54,54,150,216,1536
Run trace=54,54,54,54,192,1536
Patches=54,30,48,192,192,1536
Executable modules=54,54,54,54,96,1536
Memory map=54,54,54,54,72,30,48,48,1536
ANAME=63,63,63,266,1792
Bookmarks=54,54,192,1536
Profile=54,54,192,1536
Windows=78,192,54,54,54,54,54,54,54,1536
Threads=54,54,66,108,60,54,72,72
Log data=54,1536
Source=48,1536
Handles=54,90,36,54,18,72,1536
Source files=54,96,1536
Call stack=54,54,216,168,54
Call tree=192,192,192,192
SEH chain=54,192
Watch expressions=216,1536
[History]
Executable[1]=D:Unpackyoda Protector(criptor)Project1.exe
Executable[2]=D:UnpackTitaniumbitarts_evaluation.EXE
Executable[3]=D:UnpackARM ProtectorAsprDbgr.exe
Executable[4]=D:UnpackARM Protectorarmp.exe
Executable[5]=D:UnpackARM ProtectorProject2.exe
Executable[0]=D:Crack toolsCrackmehaskmifant-
cm4CRACKME4.EXE
View file=D:Crack toolsPakersObsidiumobsidium.exe
View text file=D:Delphi!!!GO TO SITE!!Unit1.pas
Object file=
Import library=
Log file=C:Program FilesUlead Photo Explorer 7.0log.txt
Run trace file=D:GamesGMChessrtrace.txt
API help file=
Text save file=
Symbolic data path=D:Crack tools
UDD path=D:Crack toolsDebuggersodbg109d
Plugin path=D:Crack toolsDebuggersodbg109d
[Arguments]
Executable[1]=
Executable[2]=
Executable[3]=
Executable[4]=
Executable[5]=
Executable[0]=
Argument[0]=bp GetDriveTypeA
Argument[1]=Fack you
[Plugin Bookmarks]
Restore bookmarks window=0
[Plugin Command line]
Restore command line window=0
Command line window X=365
Command line window Y=186
[Plugin Command Bar]
Show Command Bar Window=1
FontFace=
FontHeight=-16
CharSet=128
[Colours]
Scheme[0]=5,12,5,17,7,8,7,13
Scheme name[0]=Black on white
Scheme[1]=14,12,7,1,3,7,3,13
Scheme name[1]=Yellow on blue
Scheme[2]=1,12,3,11,14,2,7,13
Scheme name[2]=Marine
Scheme[3]=15,12,7,0,8,11,7,13
Scheme name[3]=Mostly black
Scheme[4]=0,12,8,18,7,8,7,13
Scheme name[4]=Scheme 4
Scheme[5]=14,12,7,1,3,7,3,13
Scheme name[5]=Scheme 5
Scheme[6]=1,12,3,11,14,2,7,13
Scheme name[6]=Scheme 6
Scheme[7]=15,12,7,0,8,11,7,13
Scheme name[7]=Scheme 7
[Fonts]
Font[0]=12,8,400,0,0,0,255,2,49,0
Face name[0]=Terminal
Font name[0]=OEM fixed font
Font[1]=9,6,700,0,0,0,255,0,48,1
Face name[1]=Terminal
Font name[1]=Terminal 6
Font[2]=16,8,400,0,0,0,204,2,33,0
Face name[2]=Fixedsys
Font name[2]=System fixed font
Font[3]=14,0,400,0,0,0,1,2,5,0
Face name[3]=Courier New
Font name[3]=Courier (UNICODE)
Font[4]=10,6,400,0,0,0,1,2,5,0
Face name[4]=Lucida Console
Font name[4]=Lucida (UNICODE)
Font[5]=9,6,700,0,0,0,255,0,48,0
Face name[5]=Terminal
Font name[5]=Font 5
Font[6]=16,8,400,0,0,0,204,2,33,0
Face name[6]=Fixedsys
Font name[6]=Font 6
Font[7]=14,0,400,0,0,0,1,2,5,0
Face name[7]=Courier New
Font name[7]=Font 7
[Syntax]
Commands[0]=0,0,0,0,0,0,0,0,0,0,0,0,0,0
Operands[0]=0,0,0,0,0,0,0,0,0,0,0,0,0,0
Scheme name[0]=No highlighting
Commands[1]=0,4,124,112,9,64,64,13,111,8,12,0,0,0
Operands[1]=1,0,4,13,65,1,112,6,0,0,0,0,0,0
Scheme name[1]=Christmas tree
Commands[2]=0,0,124,112,0,64,64,0,96,0,0,0,0,0
Operands[2]=0,0,0,0,0,0,0,0,0,0,0,0,0,0
Scheme name[2]=Jumps’n’calls
Commands[3]=0,0,0,0,0,0,0,0,0,0,0,0,0,0
Operands[3]=0,0,0,0,0,0,0,0,0,0,0,0,0,0
Scheme name[3]=Hilite 3
Commands[4]=0,0,0,0,0,0,0,0,0,0,0,0,0,0
Operands[4]=0,0,0,0,0,0,0,0,0,0,0,0,0,0
Scheme name[4]=Hilite 4
[System]
Options position=550,113
[Plugin OllyScript]
ScriptDir=D:Crack toolsTools for soft Iceodbg109dscripts
[Plugin IsDebugPresent]
idb_Sleeptime=1000
idb_Autoload=1
[AeDebug]
Debugger="C:Program FilesBorlandDelphi7Binbordbg70.exe" -
aeargs %ld %ld
[Exceptions]
Custom[0]=0EEDFADE,0EEDFADE
Custom[1]=40000005,40000005
Custom[2]=80000004,80000004
Custom[3]=A3410001,A3410001
Custom[4]=C0000005,C0000005
Custom[5]=C0000008,C0000008
Custom[6]=C000001D,C000001D
Custom[7]=C000001E,C000001E
Custom[8]=C000008C,C000008C
Custom[9]=C000008F,C000008F
Custom[10]=C0000094,C0000094
Custom[11]=C0000096,C0000096
Custom[12]=C00000FD,C00000FD
Custom[13]=E06D7363,E06D7363
Вот и закончилось ваше знакомство с замечательным отладчиком OllyDebugger. Конечно, все возможности этого отладчика не возможно описать в статье, но я попытался, и надеюсь, у меня получилось. Некоторые возможности остались за гранью этой статьи, но я уверен, что Вы сами для себя откроете эти возможности. Я учил Olly абсолютно без статей, и у Вас получится продолжить ознакомление с отладчиком без чьей либо помощи.