Ollydbg в играх выбор меню. Olly Debugger от А до Я

Целью данного «Введения в крэкинг с нуля, используя OllyDbg», является дать тем, кто только начал осваивать искусство крэкнинга, базовые знания и, вместе с тем, сделать это так, чтобы эти знания позволили в дальнейшем читать и понимать более продвинутые туториалы – такие, которые можно встретить в «Новом курсе от CracksLatinos», который, разумеется, остаётся открытым для новых добавлений и пополнений.

Идея создания курса родилась из-за того, что многие туториалы в «Новом курсе от CracksLations» оказывались слишком сложными для новичков, и те, не сумев достигнуть нужного уровня, оказывались разочарованными и во многих случаях отказывались продолжать. Поэтому целью данного «Введения...» является не повторение прекрасных туториалов из «Нового курса...», число которых уже перевалило за 500, но заложить основу, чтобы те, кто закончит данный курс, смогли читать более сложные пособия. Это, как и всё в нашем ремесле, требует значительных усилий, и главной задачей является сократить их количество, дав базовые знания и позволив в дальнейшем понимать более сложный материал.

Почему OLLYDBG?

Мы не будем здесь рассуждать о вечном противостоянии Soft-Ice против OllyDbg, думаю, что даже фанатики от Soft-Ice признают, что проще начать с OllyDbg, так как о нём много информации и его проще изучать. Нам нужно войти в мир крэкинга через дверь под названием «OllyDbg», а уже потом тот, кому нужно, сможет перейти на любой другой отладчик, который потребуется, так как меняются лишь их способы использования, но суть остаётся неизменной.

Начнём с начала

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

Поскольку мы начинаем с нуля, то для начала нам нужно распаковать скачанный архив в такую папку на жёстком диске, до которой можно легко добраться. Хорошей идеей будет создать папку на диске C:/. Хотя будет работать и в любом другом месте, я буду исходить из того, что выбран диск C:/.

После того, как файл был распакован, заходим в созданную папку и видим:

В ней находится исполняемый файл OLLYDBG.exe, который нам и нужно запустить и ярлык которого я для удобства сделал на своём рабочем столе.

Ок, всё готово к запуску. Кликаем на OllyDbg:

Перед нами повляется сообщение о том, что DLL, находящаяся в библиотеке, старше, чем такая же системная DLL, и если выберем «Да», то тогда старая DLL будет стёрта из папки, а использоваться будет системная. Хотя я не вижу особых различий между этими двумя, тем не менее, предпочитаю ту, которая идёт с дистрибутивом, и поэтому всегда нажимаю «Нет».

Это чистый OllyDbg, и первой программой, которую мы откроем только для того, чтобы ознакомиться с OllyDbg, станет знаменитый CrackMe CrueHead’а, который приложен к данному туториалу.

Чтобы открыть файл в OllyDbg, идём в File -> Open или нажимаем на иконку:

Откроется окно, с помощью которого можно найти нужный файл, в данном случае это crackme CrueHead’а.

Откроется вышеупомянутый crackme, и на данный момент неважно, что совершенно непонятно, что означает открывшийся нам вид – пока мы только пройдёмся по различным частям и функциям OllyDbg и некоторым настройкам, чтобы когда в последующих туториалах будет написано, скажем, «зайдите в DUMP», вы, по крайней мере, знали, где находится эта опция.

Здесь мы рассмотрим четыре части главного окна OllyDbg:

1) Дизассемблированный код

Также называется листингом. Тут Олли показывает нам дизассемблированный код программы, которую мы собираемся отлаживать; по умолчанию Олли сконфигурирована так, чтобы анализировать программу при её открытии. Это можно изменить в Options -> DEBUGGING OPTIONS.

То есть, если отмечена галочка «AUTO START ANALISIS OF MAIN MODULE», OllyDbg проанализирует программу и покажет о ней дополнительную информацию.

Это начало проанализированного листинга крэкми CrueHead’а, и если мы откроем его без анализа, то сможем увидеть разницу.

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

Зачастую OllyDbg отображает некоторые части программы некорректно, так как ошибочно интерпретирует исполняемый код как данные, и тогда она отображает примерно следующее:

В этом случае можно вручную убрать анализ, кликнув на листинге правой кнопкой мыши и выбрав «ANALISIS -> REMOVE ANALYSIS FROM MODULE».

И тогда листинг отобразится корректно.

Другой опцией, которой вы можете воспользоваться для облегчения раобты и которая мне лично не очень нравится (но вкусы бывают разные), является подсветка jump (переходов) и call (вызовов) – кликните на листинге правой кнопкой мыши и выберите «APPEARENCE -> HIGHLIGHTING -> JUMPS AND CALLS».

Получится следующее:

Здесь мы видим, что call’ы подсвечены лазурным цветом, а переходы – жёлтым.

Теперь листинг стал более читаемым, но пока у нас нет ни малейшей идеи, что это означает, но хорошо иметь инструмент подготовленным к дальнейшему использованию.

2) Регистры

Второе важное окно – это окно регистров.

Вспомним, что окно регистров находится в самой правой части OllyDbg, и там отображается значительное количество информации.

Есть значительно больше информации, которую мы не видим, но можно устанавливать режим отображения в три состояния («VIEW FPU REGISTERS» – отображать FPU-регистры, «VIEW 3D NOW REGISTERS» – отображать “3D NOW”-регистры и «VIEW DEBUG REGISTERS» – отображать отладочные регистры). По умолчанию отображаются первые.

3) Стек или «куча»

Теперь переходим к «стеку или куче». Здесь не слишком много конфигурационных опций – разве что возможность отобразить информацию, касающуюся регистров ESP и EBP.

По умолчанию стоить режим отображения информации, связанной с ESP (и он же является самым полезным), но его можно сменить на режим отображения информации, связанной с EBP, для чего необходим кликнуть в этом окне правой кнопкой мыши и выбрать пункт «GO TO EBP», а дальнейшее использование пункта «GO TO ESP» вернёт нас в прежний режим.

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

4) Дамп

У окно дампа есть много режимов отображения, которые можно менять, кликнув правую кнопку мыши в окне дампа и выбрав тот, который нужен. По умолчанию используется используется режим 8-ми байтовый Hex/ASCII.

Режим, используемый по умолчанию, также является и чаще всего используемым, но вместе с тем, у нас есть возможность изменять его на показ дизассемблированного кода (DISASSEMBLE), текста (TEXT) и других форматов (SHORT, LONG, FLOAT).

И, накоец, опция SPECIAL -> PE HEADER, которая, как мы это увидим в ближайших главах, может быть очень полезной.

Теперь мы знаем основные части главного окна OllyDbg, но есть ещё окна, которые недоступны напрямую, но могут быть вызваны как через меню, так и через кнопки на панели управления.

Рассмотрим каждую из них.

Кнопка L или VIEW->LOG показывает нам то, что OllyDbg пишет в окне лога. Его можно сконфигурировать на отображение различного рода информации, а по умолчанию в окне лога сохраняется вся информация о запуске, а также информация, связанная с «BREAKPOINTS CONDICIONAL LOGS» (условными логами точек останова). С последней мы встретимся гораздо позднее, а пока давайте посмотрим информацию о запущенном процессе (в нашем случае это крэкми CrueHead’а) и библиотеках, которые он загружает.

Одна из самых главных опций данного окна – это ведение лога в файле на тот случай, если мы хотим сохранять информацию в текстовом файле. Чтобы активировать эту опцию, нажмите на правую кнопку мыши и выберите «LOG TO FILE».

Кнопка E или VIEW->EXECUTABLES показывает нам список модулей, которые использует программа: exe, dll, ocx и прочие.

Здесь также правая кнопка мыши вызывает множество опций, которые пока мы смотреть не будем, но которые мы уже видели при исследовании главного окна OllyDbg.

Кнопка M или VIEW->MEMORY отображает память, занятую нашей программой. Здесь мы видим секции приложения, библиотеки, использующиеся процессом, стек и различные секции, занятые системой, и зачастую программы в процессе выполнения занимают новые секции памяти.

Кликнув правой кнопкой мыши можем сделать SEARCH в памяти, чтобы найти в ней строки различных родов (текстовые, шестнадцатиричные, юникодовые), также есть возможность подстветить точки останова в секциях, равно как и возможность изменить права доступа к последним (выберите SET ACCESS).

Кнопка T или VIEW->THREADS показывает нам список нитей (потоков) программы.

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

Кнопка W или VIEW->WINDOWS отображает нам окна программы, но поскольку она ещё не выполняется, то и список окон остаётся пустым.

Кнопка H или VIEW->HANDLES отображает хэндлы, позже я объясню, для чего они служат.

Кнопка C или VIEW->CPU возвращает нас к главному окно OllyDbg.

Кнопка / или VIEW->PATCHES показывает список наложенных патчей, если программа была изменена. Поскольку пока никаких изменений не вносилось, сейчас окно остаётся пустым.

Кнопка K или VIEW->CALL STACK отображает «call stack», списко вызовов, которые нам встретились до того места, где программа остановилась.

Кнопка B или VIEW->BREAKPOINTS вызывает список обычных точек останова, расположенных в программе. Здесь нет ни точек останова аппаратного обеспечения, ни точек останова памяти, только обычные.

Кнопка R или VIEW->REFERENCES показывает окно ссылок, полученных нами в результате поиска ссылок в Олли

Кнопка «…» или VIEW->RUN TRACE отображает результат выполнения команды RUN TRACE. Здесь мы также можем выбрать опцию LOG TO FILE), чтобы сохраненить результаты трассировки в текстовом файле.

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

Как сконфигуровать OllyDbg стала JIT (JUST IN TIME DEBUGGER)

Конечно, мы не будем всё время использовать JIT, а только в специальных случаях, так как если случится ошибка с какой-либо запущенной программой на нашей машине, то нам совсем не нужно, чтобы использовалась Олли (по умолчанию в качестве JIT используется dr.watson).

Чтобы сделать OllyDbg JIT-отладчиком, нужно перейти в OPTIONS->JUST IN TIME DEBUGGING

И нажать последовательно кнопки MAKE OLLYDBG JUST IN TIME DEBUGGER y DONE

Чтобы убрать эту функцию, нужно в том же месте нажать на RESTORE JUST IN TIME DEBUGGER и DONE.

Подключение плагинов в OllyDbg

OllyDbg позволяет подключать плагины, которые могут оказаться полезными для решения той или иной задачи. Пока мы ограничимся подключением плагина COMMAND BAR, чтобы научиться как это делать.

После этого распаковываем плагин и смотрим содержимое папки, где это было сделано:

Прежде всего нужно создать папку для плагинов. Я создам её на C:/ и назову PLUGINS.

Разумеется, плагины могут находиться где угодно, но мне нравится размещать всё на C. Как бы то ни было, теперь мы должны сконфигурировать OllyDbg, чтобы она распознавала эту папку как местонахождение всех плагинов.

Для этого идём в OPTIONS->APPEARANCE.

И в открывшемся окне открываем вкладку DIRECTORIES.

Видим, что в качестве пути к плагинам указана директория, где находится сам OllyDbg.exe, и можно было бы помещать плагины туда, но мне нравится держать их отдельно, и тогда нажимем на PLAGIN PATH->BROWSE, чтобы найти созданную нами папку.

Выбираем папку PLUGINS и сохраняем изменения.

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

Копируем всё содержимое архива в папку PLUGINS.

Теперь все файлы плагина «Command Bar» находятся в папке PLUGINS, в неё же следует помещать и остальные (зачастую можно копировать не все файлы в архиве, а только dll).

Теперь закрываем OllyDbg, если она всё ещё была закрыта, и запускаем по новой. Видим, что в меню PLUGINS появился COMMAND BAR и его опции.

В нижней части OllyDbg видим установленный COMMAND BAR.

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

Чтобы деинсталлировать PLUGIN достаточно просто стереть соответствующую dll из папки PLUGINS и перезапустить OllyDbg, и плагин исчезнет. Вместе с тем, благоразумно всегда держать COMMAND BAR включённым.

Снова открываем крэкми CrueHead’в в OllyDbg.

Наиболее полезные клавиши в OllyDbg следующие:

F7: Выполняет одну строку кода (если находимся на CALL, то переходим внутрь вызванного участка кода)

F8: Выполняет одну строку кода (если находимся на CALL, то просто выполняет вызов без перехода внутрь и переходит на следующую за CALL строку).

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

F2: устанавливает обычную точку останова на отмеченной линии. Чтобы убрать эту точку останова, надо ещё раз нажать F2.

Например:

Хотим установить точку установа в позиции 40101A, поэтому отмечаем эту линию с помощью мыши.

С помощью одного клика мыши она помечается и становится серого цвета как на картинке. Затем нажимаем F2.

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

F9: Запускает программу, которая будет выполняться до тех пор, пока не встретить точку останова, не совершиться какое-либо исключение или же просто прекратит работу по каким-либо причинам. Когда программа запущена, в нижнем правом угле OllyDbg отображается слово RUNNING.

Запустив крэкми CrueHead’а, мы увидим следующее:

Чтобы временно прекратить выполнение программы, нужно нажать F12 или DEBUG->PAUSE.

Видим, что OllyDbg отображает слово PAUSED (пауза). Продолжить выполнение программы можно нажав F9 или DEBUG->RUN.

Чтобы закрыть отлаживаемую программу выберите DEBUG->CLOSE.

Это был краткий обзор OllyDbg, более глубокое изучение множества опций и возможностей которой мы продолжим изучать в последующих главах. Главное, чтобы вы скачали программу, сконфигурировали, ещё раз посмотрели всё, о чём было рассказано в этом туториале, так же подключили плагин, позапускали и поостанавливали крэкми CrueHead’а, попробовали поставить точки останова, чтобы в следующей главе все эти вещи не вызывали у вас колебаний и сомнений.

Песочница

new player 7 января 2016 в 13:36

Основы работы с OllyDebug, на примере «лечения» архиватора

  • Assembler

Сегодня покажу как можно с помощью «Ольки», «вылечить» один известный архиватор. Для этого нам понадобится: OllyDBG, плагин «CommandBar».

Ставим архиватор, через 40 дней некоторое время наблюдаем картину:


Первое что приходит в голову - изменить проверку на наличие лицензии или проверку на время использования программы. Пойдем по легкому пути - ищем WinAPI функцию которая получает настоящее время GetLocalTime. В контекстном меню выбираем

Search for -> Name (label) in current module.


Ищем функции связанные со временем, ах вот же она, чуть не пропустили.

Теперь необходимо поставить брейкпоинт на эту функцию. В окне плагина CommandBar вводим

и теперь при вызове этой функции наш отладчик остановится в нужном нам месте.

Запускаем отладку, клавиша F9. Наша точка останова успешно отработала и мы оказались в начале функции GetLocalTime, давайте дойдем до места выхода из этой функции (Ctr+F9), сделаем один шаг (F7). Вот мы видим, что после получения времени, вызывается функция по адресу 004B8C00, предлагаю зайти в неё и посмотреть что там может быть интересного, используем шаг с заходом (F7).

Видим благоприятные знаки.

Трассируем программу по F8, до проверки по адресу 004B8C26, наблюдаем TEST AL,AL.

Напоминаю, AL - является младшим регистром EAX, там у нас сейчас пусто. Команда TEST AL,AL проверяет, равен ли регистр AL нулю, если равен, то флаг ZF будет включен.Следующая команда JE SHORT 004B8C44, отправляет на с по адресу 004B8C44, в случае если ZF флаг включен. Что же, предлагаю убрать эту проверку с переходом. Нажимаем пробел и вводим nop, несколько раз нажимаем Assemble, пока не затрутся эти две команды.

Запускаем отладку (F9) и видим что опять остановились на нашем брейкпоинте, давайте уберем его (F2) и снова продолжим отладку (F9). Теперь видим что нам ничего не мешает работать и в поле о регистрации появилась надпись о там что программа зарегистрирована.

Теги: Реверс-инжиниринг, Assembler, OllyDebug

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

Многие реверсеры не понаслышке знакомы с OllyDbg - бесплатным 32-битным отладчиком пользовательского режима (ring 3). Основные плюсы данного отладчика: бесплатность, малый размер, интуитивно понятный интерфейс, простота управления и поддержка плагинов, которые существенно расширяют его функциональность. На сегодняшний день насчитывается свыше 500 плагинов, и среди этого разнообразия мы постарались выделить для тебя наиболее интересные.

OllyDumpEx

При решении различных задач, связанных с реверс-инжинирингом, а если точнее - при работе с вредоносным программным обеспечением, которое активно использует различные обфускаторы и упаковщики, довольно часто приходится производить дамп памяти процесса для последующего его анализа. Так как процесс активен, то большинство его упаковщиков и обфускаторов уже отработали и можно видеть почти истинное лицо негодяя. Так что дампер памяти процесса в таких задачах вещь незаменимая. Каждый исследователь отдает предпочтение тому или иному отладчику, например из-за набора плагинов, но порой необходимо их варьировать, а интерфейс и возможности плагинов хотелось бы иметь одинаковые вне зависимости от отладчика. OllyDumpEx Plugin решает данную проблему - он позволяет очень гибко дампить память и поддерживает несколько самых популярных отладчиков: OllyDbg 1/2, Immunity Debugger 1.7/1.8, IDA Pro, WinDbg. Особенности инструмента:

Выбор для дампа EXE-файла, DLL или иного модуля; - поиск MZ/PE-сигнатур в памяти; - поддержка PE32+; - поддержка нативных 64-битных процессов (пока только в IDA Pro); - дамп любого адресного пространства как секции (даже если ее нет в заголовке секций); - добавление пустых секций; - правка RVA в DataDirectory для последующего изменения ImageBase; - автовычисление большого количества параметров (RawSize, RawOffset, VirtualOffset и других).

Проект активно развивается и постоянно тестируется автором на совместимость с последними версиями поддерживаемых отладчиков.

Как устанавливать плагины?

Для начала необходимо создать в директории программы папку с названием Plugins. Это позволит в дальнейшем избежать замусоривания основной директории, а в случае необходимости без труда отыскать неработоспособный/конфликтный плагин. Далее копируем DLL-файл плагина в созданную директорию, после чего запускаем отладчик и указываем путь к этой папке:

  • OllyDBG v1.10: выбираем Options -> Appearance и закладку Directories. В пункте Plugin path указываем путь к папке с плагинами.
  • OllyDBG v2.01h: выбираем Options -> Options и раздел Directories. В пункте Plugin directory указываем путь к папке с плагинами.

Перезапускаем отладчик и ищем появившийся пункт в меню Plugins.

OllyMigrate

  • Для: OllyDbg 1.10/2.01, ImmunityDbg 1.7/1.8, IDA Pro, WinDbg 6

Каждый дебаггер имеет как сильные, так и слабые стороны, и у каждого они свои - идеального инструмента нет. В одном удобно обходить антиотладочные приемы, в другом использовать огромный арсенал уже готовых плагинов, а в третьем писать собственные скрипты. С недавних пор стало возможно работать последовательно сразу в OllyDbg, Immunity Debugger, WinDbg и IDA Pro. Как? Встречай OllyMigrate Plugin - данный плагин позволяет передавать процесс отладки другому отладчику без перезапуска исследуемого приложения. Так что мы можем задействовать только сильные стороны каждого отладчика, используя миграцию от одного к другому. Например, мы можем начать с OllyDbg для обхода антиотладочных приемов и нахождения OEP (Original Entry Point), а затем передать управление Immunity Debugger и, благодаря его поддержке Python-скриптов, править обфусцированную Import Table. Как ты уже понял, плагин поддерживает: OllyDbg 1/2, Immunity Debugger 1.7/1.8, IDA Pro, WinDbg. Особенности:

Многопоточность и возможность приостанавливать потоки; - перенос настроек софтверных точек останова (сохраняя статус включен/выключен).


Настройка графической схемы

Стандартная цветовая схема OllyDbg достаточно скучна и не очень информативна. К ней, конечно, со временем можно привыкнуть, но лучше настроить внешний вид так, чтобы глаз мгновенно ориентировался в ассемблерном листинге. В конце концов от этого зависит продуктивность работы. Настроить цветовую схему можно двумя способами: непосредственно из меню «Опции -> Оформление -> Colours» или через правку файла ollydbg.ini. Ищешь в файле секцию и играешься с настройками цветов по своему желанию. Подробно этот процесс описан на официальном сайте bit.ly/1cGR2zr .

OllySocketTrace

  • Для: OllyDbg v1.10

Плагин для трассировки всех операций с сокетами, выполняемых процессом. Во время выполнения программы записывает все отправленные и принятые буферы, а также все параметры, переданные в сетевые функции, и возвращенные этими функциями значения.

В настоящее время поддерживаются следующие операции с сокетами: WSASocket, WSAAccept, WSAConnect, WSARecv, WSARecvFrom, WSASend, WSASendTo, WSAAsyncSelect, WSAEventSelect, WSACloseEvent, listen, ioctlsocket, connect, bind, accept, socket, closesocket, shutdown, recv, recvfrom, send и sendto.

Просто запусти плагин, когда захочешь отследить операции, проводимые над сокетами. OllySocketTrace автоматически расставит все необходимые брейкпоинты и будет записывать всю необходимую информацию, как только они будут срабатывать. Чтобы посмотреть получившийся результат, надо выбрать пункт меню OllySocketTrace Log.


OllyHeapTrace

  • Для: OllyDbg v1.10

Плагин для трассировки манипуляций с кучей. Предназначен в первую очередь для отладки переполнений кучи, когда необходимо контролировать расположение кучи во время перезаписи определенной структуры, например заголовка блока, структуры критической секции или других прикладных данных. При активации плагин автоматически создает точки останова (RtlAllocateHeap, RtlFreeHeap, RtlCreateHeap, RtlDestroyHeap, RtlReAllocateHeap, RtlSizeHeap, GetProcessHeap and RtlInitializeCriticalSection, RtlDeleteCriticalSection) и записывает необходимую информацию, когда их достигает. Особенности:

  • просмотр трассировки кучи;
  • подсветка разными цветами каждой отдельной трассировки кучи;
  • фильтрация «лишней» информации для конкретной кучи.

Pyllow

  • Для: OllyDbg v2.01

Почему так много реверсеров пользуются Immunity Debugger? Да потому, что он, как и IDA, имеет встроенную поддержку Python. Этот скриптовый язык позволяет здорово упростить задачу исследования бинарного кода, позволяя быстренько накидать небольшой скриптик, автоматизирующий ту или иную рутинную задачу. К сожалению, «голый» OllyDbg поддерживает только свой ассемблероподобный язык для написания автоматизирующих скриптов. К счастью, парень под ником Pablo Escobar решил не мириться с таким положением дел и написал плагин для OllyDbg, интегрирующий в него поддержку Python, - Pyllow. Теперь можно писать скрипты, автоматизирующие рутинную работу реверсера, которые будут запускаться внутри отладчика и иметь доступ к большинству OllyDbg API. Плагин распространяется в исходниках, поэтому скажу пару слов про его сборку. Для его компиляции понадобится Visual Studio 2010, библиотека Boost, скомпилированный Boost.Python и 32-разрядная версия Python 3.x (было протестировано на 3.2). В зависимости от настроек ОС тебе, возможно, придется указать Boost все установленные в твоей системе версии Python, а затем выбрать нужную во время сборки. Это можно сделать, добавив в файл /boost-dir/tools/build/v2/user-config.jam строки вида:

Using python: 3.2: "C:/Program Files (x86)/Python32/python.exe" # path to your Python setup: : : 32 # x86-32 only ;

Главное тут - указать правильный путь до интерпретатора. После чего собрать Boost.Python с помощью команды:

Bjam --toolset=msvc-10.0 --build-type=complete --with-python python=3.2 address-model=32

Если возникнут какие-то трудности, то официальный мануал Boost должен помочь bit.ly/14FU7xP

OllyGraph

  • Для: OllyDbg v2.01

Одна из фич, которая меня особенно привлекает в IDA Pro, - возможно представить функцию в виде графа. Так намного удобнее анализировать код, сразу становится видно, каким образом мы дошли до того или иного участка, какие условия и как сработали. Плюс можно еще посмотреть граф вызовов, чтобы понять, из каких мест программы вызывается исследуемая функция. К счастью, данная возможность есть теперь и в OllyDbg, надо лишь установить плагин OllyGraph. Он позволяет представить программу в виде блок-схем, схожих с теми, что строятся в IDA Pro. Более того, для визуализации используется тулза wingraph32, входящая в состав иды. Для версии 1.10 есть альтернативный плагин OllyFlow bit.ly/14lNtpb - немного улучшенная версия OllyGraph от того же автора.


InjectHookLib

  • Для: OllyDBG v1.10

Довольно любопытное расширение, которое позволяет перехватывать системные вызовы из пользовательского режима. Техника перехвата интересна, поэтому рекомендую ознакомиться с ней в блоге автора (bit.ly/OjxUMj для Windows XP, bit.ly/NZW6Ci для Windows 7). Все, что требуется от пользователя, - установить плагин и написать свою DLL-библиотеку, в которой будут реализованы обработчики перехватываемых функций. Как ее реализовать, можно посмотреть по ссылкам или изучить исходный код примера bit.ly/168kcF2 , который любезно предоставил автор данного расширения. Такой плагин может пригодиться для решения различных задач, например при анализе вредоносных программ и распаковке.


uberstealth

  • Для: OllyDbg v2.01, IDA Pro

На какие только ухищрения не пойдут разработчики программ, чтобы защитить свое детище от исследования! Особенно такими подарками изобилуют различные упаковщики, хотя и среди обычных программ тоже довольно часто встречаются особи, нашпигованные антиотладочными приемами. Вручную обходить все эти защиты просто заморишься - тут уже одной правкой возвращаемого функцией IsDebuggerPresent значения не обойдешься. Вот и приходится использовать спецсредства в виде данного плагина. Поставляется он в исходниках, так что придется собирать вручную. Для этого понадобится библиотека Boost>=1.48.0, WTL (Windows Template Library)>=8.1, Windows Driver Kit >= 7.0, DDKBuild. Да-да, зрение тебе не изменило - WDK & DDK, так как для своего сокрытия отладчик использует драйверы. Ну и конечно же, Visual Studio 2008. Что интересно, плагин работает не только в OllyDbg, но и в IDA Pro.

Плагины первой необходимости

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

  • Command Bar bit.ly/14GHQcr - аналог встроенного плагина Command Line. Добавляет панель с командной строкой для ввода команд управления отладчиком, что позволяет ускорить процесс отладки.
  • PhantOm Plugin bit.ly/qyNqJO - антиотладочный плагин от российского разработчика для скрытия OllyDbg и исправления уязвимостей отладчика, эксплуатируемых протектором. Помогает от большинства распространенных методов обнаружения.
  • Похожим функционалом обладает плагин китайского происхождения StrongODbit.ly/gzazAd . Ходили даже слухи про обнаруженный в нем рипнутый код из PhantOm.
  • Антиотладочные свойства также присутствуют и в Olly Advanced bit.ly/14GI0An . Это своего рода швейцарский армейский нож, который, помимо прочего, расширяет функционал OllyDbg и устраняет некоторые раздражающие вещи и ошибки данного отладчика.
  • Не менее важный плагин - ODBGScript bit.ly/17Is2AM , позволяющий писать и выполнять скрипты для автоматизации необходимого процесса, например распаковки файлов.
  • Замыкает список OllyDump bit.ly/17Is4si - отличный дампер процесса со встроенным реконструктором таблицы импорта.

OllyMSDN

  • Для: OllyDbg v1.10, Immunity Debugger 1.7/1.8

Количество функций WinAPI огромно, и знать их все как свои пять пальцев просто нереально. Поэтому иногда приходится заглядывать в документацию, чтобы уточнить/узнать, что возвращает та или иная функция или какие параметры принимает на вход. К сожалению, стандартный файл помощи не может предоставить всю необходимую информацию, поэтому приходится запускать браузер и идти на MSDN. Так почему бы полностью не заменить этот файл online-документацией? Для этого всего-то надо установить плагин OllyMSDN, убедиться, что в качестве справки у нас стоит файл WIN32.HLP (Помощь -> Выбрать справку по API). Если такого файла нет, то необходимо создать пустой с таким именем и указать его Olly. Теперь, когда ты попытаешься в отладчике получить доступ к файлу справки, плагин перехватит функцию WinHelp() API и вместо старого файла откроет тебе сайт MSDN. А чтобы получить информацию о конкретной функции во время отладки, надо кликнуть правой кнопкой мыши на инструкцию call и выбрать пункт Help on symbolic name или просто нажать .


DetachMe

  • Для: OllyDbg v1.10

Одной из полезных фич, появившихся во второй версии OllyDbg, была функция Detach, которая позволяла «отсоединить» отладчик от исследуемого процесса, чтобы процесс мог дальше самостоятельно работать. К сожалению, в версии 1.10, любимой многими, такой функции нет - можно только присоединиться к исследуемому процессу. Но это можно исправить, поставив плагин DetachMe, который позволяет в любое время отсоединить отлаживаемые программы от OllyDbg и продолжить осуществлять внешний контроль над отладчиком. Кроме того, отключение программных и процессорных точек останова никак не повлияет на соответствующие udd-файлы.

OllyDbg PDK

Плагинов на все случаи жизни не бывает, поэтому рано или поздно может настать момент, когда придется «шить наряд» для Оли самому, чтобы решить очередную амбициозную задачу. В таком случае тебе понадобится PDK - Plugin Development Kit, который можно скачать с официального сайта bit.ly/18oD7t6 .

Ollydbg-backup

  • Для: OllyDbg v1.10 / v2.01

Во время работы над очередным бинарником реверсеру приходится добавлять достаточно много своей информации: писать комментарии к отреверсенным функциям, чтобы на следующий день не изучать заново алгоритм их работы и входные параметры, ставить брейкпоинты и так далее. Вся эта служебная информация автоматически сохраняется отладчиком в UDD-файле. Но случается так, что во время падений дебаггера или его очередной переустановки эти файлы теряются. И надо начинать анализ заново. Чтобы избежать такой печальной ситуации, можно воспользоваться плагином ollydbg-backup, который позволяет сделать бэкап этой информации, сохранив ее в CSV-файл, из которого ее можно легко загрузить обратно в отладчик. CSV-файл имеет следующую структуру:

RVA,label,comment

Заключение

OllyDbg очень популярный отладчик, плагинов для него существует достаточно много, и про них можно долго рассказывать. Нашей целью не было рассмотреть их все, мы лишь старались подобрать наиболее интересные «наряды» для нашей боевой подруги Оли. Надеюсь, что нам это удалось.

Целью данного «Введения в крэкинг с нуля, используя OllyDbg», является дать тем, кто только начал осваивать искусство крэкнинга, базовые знания и, вместе с тем, сделать это так, чтобы эти знания позволили в дальнейшем читать и понимать более продвинутые туториалы – такие, которые можно встретить в «Новом курсе от CracksLatinos», который, разумеется, остаётся открытым для новых добавлений и пополнений.

Идея создания курса родилась из-за того, что многие туториалы в «Новом курсе от CracksLations» оказывались слишком сложными для новичков, и те, не сумев достигнуть нужного уровня, оказывались разочарованными и во многих случаях отказывались продолжать. Поэтому целью данного «Введения...» является не повторение прекрасных туториалов из «Нового курса...», число которых уже перевалило за 500, но заложить основу, чтобы те, кто закончит данный курс, смогли читать более сложные пособия. Это, как и всё в нашем ремесле, требует значительных усилий, и главной задачей является сократить их количество, дав базовые знания и позволив в дальнейшем понимать более сложный материал.

Почему OLLYDBG?

Мы не будем здесь рассуждать о вечном противостоянии Soft-Ice против OllyDbg, думаю, что даже фанатики от Soft-Ice признают, что проще начать с OllyDbg, так как о нём много информации и его проще изучать. Нам нужно войти в мир крэкинга через дверь под названием «OllyDbg», а уже потом тот, кому нужно, сможет перейти на любой другой отладчик, который потребуется, так как меняются лишь их способы использования, но суть остаётся неизменной.

Начнём с начала

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

Поскольку мы начинаем с нуля, то для начала нам нужно распаковать скачанный архив в такую папку на жёстком диске, до которой можно легко добраться. Хорошей идеей будет создать папку на диске C:/. Хотя будет работать и в любом другом месте, я буду исходить из того, что выбран диск C:/.

После того, как файл был распакован, заходим в созданную папку и видим:

В ней находится исполняемый файл OLLYDBG.exe, который нам и нужно запустить и ярлык которого я для удобства сделал на своём рабочем столе.

Ок, всё готово к запуску. Кликаем на OllyDbg:

Перед нами повляется сообщение о том, что DLL, находящаяся в библиотеке, старше, чем такая же системная DLL, и если выберем «Да», то тогда старая DLL будет стёрта из папки, а использоваться будет системная. Хотя я не вижу особых различий между этими двумя, тем не менее, предпочитаю ту, которая идёт с дистрибутивом, и поэтому всегда нажимаю «Нет».

Это чистый OllyDbg, и первой программой, которую мы откроем только для того, чтобы ознакомиться с OllyDbg, станет знаменитый CrackMe CrueHead’а, который приложен к данному туториалу.

Чтобы открыть файл в OllyDbg, идём в File -> Open или нажимаем на иконку:

Откроется окно, с помощью которого можно найти нужный файл, в данном случае это crackme CrueHead’а.

Откроется вышеупомянутый crackme, и на данный момент неважно, что совершенно непонятно, что означает открывшийся нам вид – пока мы только пройдёмся по различным частям и функциям OllyDbg и некоторым настройкам, чтобы когда в последующих туториалах будет написано, скажем, «зайдите в DUMP», вы, по крайней мере, знали, где находится эта опция.

Здесь мы рассмотрим четыре части главного окна OllyDbg:

1) Дизассемблированный код

Также называется листингом. Тут Олли показывает нам дизассемблированный код программы, которую мы собираемся отлаживать; по умолчанию Олли сконфигурирована так, чтобы анализировать программу при её открытии. Это можно изменить в Options -> DEBUGGING OPTIONS.

То есть, если отмечена галочка «AUTO START ANALISIS OF MAIN MODULE», OllyDbg проанализирует программу и покажет о ней дополнительную информацию.

Это начало проанализированного листинга крэкми CrueHead’а, и если мы откроем его без анализа, то сможем увидеть разницу.

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

Зачастую OllyDbg отображает некоторые части программы некорректно, так как ошибочно интерпретирует исполняемый код как данные, и тогда она отображает примерно следующее:

В этом случае можно вручную убрать анализ, кликнув на листинге правой кнопкой мыши и выбрав «ANALISIS -> REMOVE ANALYSIS FROM MODULE».

И тогда листинг отобразится корректно.

Другой опцией, которой вы можете воспользоваться для облегчения раобты и которая мне лично не очень нравится (но вкусы бывают разные), является подсветка jump (переходов) и call (вызовов) – кликните на листинге правой кнопкой мыши и выберите «APPEARENCE -> HIGHLIGHTING -> JUMPS AND CALLS».

Получится следующее:

Здесь мы видим, что call’ы подсвечены лазурным цветом, а переходы – жёлтым.

Теперь листинг стал более читаемым, но пока у нас нет ни малейшей идеи, что это означает, но хорошо иметь инструмент подготовленным к дальнейшему использованию.

2) Регистры

Второе важное окно – это окно регистров.

Вспомним, что окно регистров находится в самой правой части OllyDbg, и там отображается значительное количество информации.

Есть значительно больше информации, которую мы не видим, но можно устанавливать режим отображения в три состояния («VIEW FPU REGISTERS» – отображать FPU-регистры, «VIEW 3D NOW REGISTERS» – отображать “3D NOW”-регистры и «VIEW DEBUG REGISTERS» – отображать отладочные регистры). По умолчанию отображаются первые.

3) Стек или «куча»

Теперь переходим к «стеку или куче». Здесь не слишком много конфигурационных опций – разве что возможность отобразить информацию, касающуюся регистров ESP и EBP.

По умолчанию стоить режим отображения информации, связанной с ESP (и он же является самым полезным), но его можно сменить на режим отображения информации, связанной с EBP, для чего необходим кликнуть в этом окне правой кнопкой мыши и выбрать пункт «GO TO EBP», а дальнейшее использование пункта «GO TO ESP» вернёт нас в прежний режим.

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

4) Дамп

У окно дампа есть много режимов отображения, которые можно менять, кликнув правую кнопку мыши в окне дампа и выбрав тот, который нужен. По умолчанию используется используется режим 8-ми байтовый Hex/ASCII.

Режим, используемый по умолчанию, также является и чаще всего используемым, но вместе с тем, у нас есть возможность изменять его на показ дизассемблированного кода (DISASSEMBLE), текста (TEXT) и других форматов (SHORT, LONG, FLOAT).

И, накоец, опция SPECIAL -> PE HEADER, которая, как мы это увидим в ближайших главах, может быть очень полезной.

Теперь мы знаем основные части главного окна OllyDbg, но есть ещё окна, которые недоступны напрямую, но могут быть вызваны как через меню, так и через кнопки на панели управления.

Рассмотрим каждую из них.

Кнопка L или VIEW->LOG показывает нам то, что OllyDbg пишет в окне лога. Его можно сконфигурировать на отображение различного рода информации, а по умолчанию в окне лога сохраняется вся информация о запуске, а также информация, связанная с «BREAKPOINTS CONDICIONAL LOGS» (условными логами точек останова). С последней мы встретимся гораздо позднее, а пока давайте посмотрим информацию о запущенном процессе (в нашем случае это крэкми CrueHead’а) и библиотеках, которые он загружает.

Одна из самых главных опций данного окна – это ведение лога в файле на тот случай, если мы хотим сохранять информацию в текстовом файле. Чтобы активировать эту опцию, нажмите на правую кнопку мыши и выберите «LOG TO FILE».

Кнопка E или VIEW->EXECUTABLES показывает нам список модулей, которые использует программа: exe, dll, ocx и прочие.

Здесь также правая кнопка мыши вызывает множество опций, которые пока мы смотреть не будем, но которые мы уже видели при исследовании главного окна OllyDbg.

Кнопка M или VIEW->MEMORY отображает память, занятую нашей программой. Здесь мы видим секции приложения, библиотеки, использующиеся процессом, стек и различные секции, занятые системой, и зачастую программы в процессе выполнения занимают новые секции памяти.

Кликнув правой кнопкой мыши можем сделать SEARCH в памяти, чтобы найти в ней строки различных родов (текстовые, шестнадцатиричные, юникодовые), также есть возможность подстветить точки останова в секциях, равно как и возможность изменить права доступа к последним (выберите SET ACCESS).

Кнопка T или VIEW->THREADS показывает нам список нитей (потоков) программы.

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

Кнопка W или VIEW->WINDOWS отображает нам окна программы, но поскольку она ещё не выполняется, то и список окон остаётся пустым.

Кнопка H или VIEW->HANDLES отображает хэндлы, позже я объясню, для чего они служат.

Кнопка C или VIEW->CPU возвращает нас к главному окно OllyDbg.

Кнопка / или VIEW->PATCHES показывает список наложенных патчей, если программа была изменена. Поскольку пока никаких изменений не вносилось, сейчас окно остаётся пустым.

Кнопка K или VIEW->CALL STACK отображает «call stack», списко вызовов, которые нам встретились до того места, где программа остановилась.

Кнопка B или VIEW->BREAKPOINTS вызывает список обычных точек останова, расположенных в программе. Здесь нет ни точек останова аппаратного обеспечения, ни точек останова памяти, только обычные.

Кнопка R или VIEW->REFERENCES показывает окно ссылок, полученных нами в результате поиска ссылок в Олли.

Кнопка «…» или VIEW->RUN TRACE отображает результат выполнения команды RUN TRACE. Здесь мы также можем выбрать опцию LOG TO FILE), чтобы сохраненить результаты трассировки в текстовом файле.

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

Как сконфигуровать OllyDbg стала JIT (JUST IN TIME DEBUGGER)

Конечно, мы не будем всё время использовать JIT, а только в специальных случаях, так как если случится ошибка с какой-либо запущенной программой на нашей машине, то нам совсем не нужно, чтобы использовалась Олли (по умолчанию в качестве JIT используется dr.watson).

Чтобы сделать OllyDbg JIT-отладчиком, нужно перейти в OPTIONS->JUST IN TIME DEBUGGING

и нажать последовательно кнопки MAKE OLLYDBG JUST IN TIME DEBUGGER y DONE

Чтобы убрать эту функцию, нужно в том же месте нажать на RESTORE JUST IN TIME DEBUGGER и DONE.

Подключение плагинов в OllyDbg

OllyDbg позволяет подключать плагины, которые могут оказаться полезными для решения той или иной задачи. Пока мы ограничимся подключением плагина COMMAND BAR, чтобы научиться как это делать.

Скачиваем данный плагин отсюда (ссылка, указанная в оригинальной статье, умерла, поэтому я скачал плагин из инета и разместил её на wasm.ru - прим.пер. ).

После этого распаковываем плагин и смотрим содержимое папки, где это было сделано:

Прежде всего нужно создать папку для плагинов. Я создам её на C:/ и назову PLUGINS.

Разумеется, плагины могут находиться где угодно, но мне нравится размещать всё на C. Как бы то ни было, теперь мы должны сконфигурировать OllyDbg, чтобы она распознавала эту папку как местонахождение всех плагинов.

Для этого идём в OPTIONS->APPEARANCE.

И в открывшемся окне открываем вкладку DIRECTORIES.

Видим, что в качестве пути к плагинам указана директория, где находится сам OllyDbg.exe, и можно было бы помещать плагины туда, но мне нравится держать их отдельно, и тогда нажимем на PLAGIN PATH->BROWSE, чтобы найти созданную нами папку.

Выбираем папку PLUGINS и сохраняем изменения.

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

Копируем всё содержимое архива в папку PLUGINS.

Теперь все файлы плагина «Command Bar» находятся в папке PLUGINS, в неё же следует помещать и остальные (зачастую можно копировать не все файлы в архиве, а только dll).

Теперь закрываем OllyDbg, если она всё ещё была закрыта, и запускаем по новой. Видим, что в меню PLUGINS появился COMMAND BAR и его опции.

В нижней части OllyDbg видим установленный COMMAND BAR.

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

Чтобы деинсталлировать PLUGIN достаточно просто стереть соответствующую dll из папки PLUGINS и перезапустить OllyDbg, и плагин исчезнет. Вместе с тем, благоразумно всегда держать COMMAND BAR включённым.

Снова открываем крэкми CrueHead’в в OllyDbg.

Наиболее полезные клавиши в OllyDbg следующие:

F7: Выполняет одну строку кода (если находимся на CALL, то переходим внутрь вызванного участка кода)

F8: Выполняет одну строку кода (если находимся на CALL, то просто выполняет вызов без перехода внутрь и переходит на следующую за CALL строку).

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

F2: устанавливает обычную точку останова на отмеченной линии. Чтобы убрать эту точку останова, надо ещё раз нажать F2.

Например:

Хотим установить точку установа в позиции 40101A, поэтому отмечаем эту линию с помощью мыши.

С помощью одного клика мыши она помечается и становится серого цвета как на картинке. Затем нажимаем F2.

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

F9: Запускает программу, которая будет выполняться до тех пор, пока не встретить точку останова, не совершиться какое-либо исключение или же просто прекратит работу по каким-либо причинам. Когда программа запущена, в нижнем правом угле OllyDbg отображается слово RUNNING.

Запустив крэкми CrueHead’а, мы увидим следующее:

Чтобы временно прекратить выполнение программы, нужно нажать F12 или DEBUG->PAUSE.

Видим, что OllyDbg отображает слово PAUSED (пауза). Продолжить выполнение программы можно нажав F9 или DEBUG->RUN.

Чтобы закрыть отлаживаемую программу выберите DEBUG->CLOSE.

Это был краткий обзор OllyDbg, более глубокое изучение множества опций и возможностей которой мы продолжим изучать в последующих главах. Главное, чтобы вы скачали программу, сконфигурировали, ещё раз посмотрели всё, о чём было рассказано в этом туториале, так же подключили плагин, позапускали и поостанавливали крэкми CrueHead’а, попробовали поставить точки останова, чтобы в следующей главе все эти вещи не вызывали у вас колебаний и сомнений.

Практически в каждой современной интегрированной среде разработки для Windows присутствует отладчик. Ничего удивительного здесь нет - половину своей профессиональной жизни программист проводит в отладке, поэтому производители сред разработки - коммерческих или бесплатных - снабжают свою продукцию этими немаловажными инструментами. Однако до сих пор не вымерли и отдельно стоящие, не зависящие ни от какой среды отладчики. Яркий пример тому - "герой" данной статьи отладчик OllyDbg.

Сайт программы располагается по адресу www.ollydbg.de . Размер дистрибутива OllyDbg достаточно невелик, особенно если посмотреть на возможности этого отладчика. А возможности достаточно неплохие, и, думаю, прочитав эту статью до конца, вы со мной согласитесь.


Возможности

Во-первых, серьёзным плюсом является графический пользовательский интерфейс - то есть программа обладает полноценными окнами, с которыми мы привыкли работать в Windows. На первый взгляд, это может показаться смешным, но на самом-то деле далеко не все отладчики до сих пор обзавелись полноценным графическим интерфейсом. Не знаю, конечно, как вам, но мне приятнее и удобнее работать с программой, имеющей графический интерфейс, нежели с той, которая имеет DOS-подобный консольный. Конечно, в ряде случаев последний предпочтительнее, но таких случаев всё же меньшинство. Причём стоит отметить, что настроек интерфейса в OllyDbg очень много, так что "под себя" подогнать можно цвет фона, шрифты, а также многое другое.

Второй немаловажный параметр, характеризующий отладчики, - поддерживаемые процессорные архитектуры и расширения. Что это значит? Это значит, что старый отладчик может не справиться с новой программой, потому что не будет знать всех команд процессора, которые эта программа использует. OllyDbg в этом плане не бежит впереди планеты всей, но поддерживает множество широко используемых фирмами Intel и AMD технологий: MMX, 3DNow!, Athlon extensions, SSE.

Поддерживаются форматы отладочной информации Microsoft (COFF) и Borland (OMF). Дампы памяти можно также выводить в разных форматах: шестнадцатеричном, текстовом (в кодировках ANSI или Unicode), в виде адресов памяти, а также в некоторых других, менее распространённых форматах.

Приятной особенностью является возможность отладки динамически компонуемых библиотек (DLL). Отладчик сам запускает вызывающее функции из DLL приложения и отслеживает все вызовы библиотеки. Причём если функции экспортируются не в именованном виде, а в индексном (ordinal), то OllyDbg восстанавливает вид функции по передаваемым ей параметрам. Кстати, отладчик умеет не только запускать приложения под своим надзором, но и присоединяться к уже запущенным. Отлаживать можно не только простые, но и многопоточные приложения. Причём с потоками в OllyDbg можно работать достаточно полно: добавлять или удалять потоки, переключаться с одного на другой. Каждый поток отлаживается в своём собственном окне, так что путаницы и мешанины, по идее, не возникает.

Встроенный в OllyDbg анализатор - наиболее значимая, по словам разработчиков, часть их детища. Анализатор распознаёт в отлаживаемой программе циклы, условные переходы, а также константы и строки, внедрённые программистом прямо в код программы, "хитроумные" конструкции (которыми особенно славятся C-программисты), вызовы API-функций, импортируемые функции и прочее. Анализатор делает двоичный код более читабельным, облегчает отладку, уменьшает вероятность неправильного дизассемблирования. При этом анализатор не ориентируется на какой-то один компилятор и может быть одинаково полезен при отладке любого 32-битного Windows-приложения. При распознавании функций анализатор для ускорения процесса использует таблицу, содержащую имена и аргументы более 2300 наиболее часто используемых функций стандартной библиотеки C и Windows API. Впрочем, таблицу можно самостоятельно пополнить.

Большие возможности программисту OllyDbg предоставляет в области поиска: можно искать одну процессорную команду или же целую их последовательность, константы, двоичную или текстовую последовательность байтов. Можно задать поиск команд, соответствующих какому-то адресу или диапазону адресов памяти; поиск функций, которые вызывают какую-либо другую функцию, или обращаются к какому-то определённому модулю. Если в ходе поиска найдено несколько мест в программе, соответствующих заданным условиям поиска, OllyDbg выводит их полный список, позволяющий быстро переключаться между ними.

Отладчик следит за всеми окнами, которые создаёт приложение, и помещает их в список. Таким образом, можно следить за всеми сообщениями, которые получает от системы данное окно. Удобно организована работа со строковыми ресурсами, которые можно отслеживать и изменять, не отрываясь от процесса отладки. Работа с другими типами ресурсов более ограничена: их можно просматривать и изменять только в двоичном виде.

OllyDbg поддерживает работу со всеми возможными видами точек останова (breakpoints). В исключительных случаях можно задать вызов прерывания INT 3 для остановки выполнения приложения после каждой команды в отлаживаемом модуле. Кроме точек останова, поддерживается просмотр значений в регистрах и по конкретным адресам памяти. Помимо всего этого, в операционных системах на базе ядра Windows NT OllyDbg может отслеживать все дескрипторы (handles), используемые отлаживаемым приложением. Под Win9x этого делать он не умеет, зато там можно следить за размещёнными в куче блоками памяти.

Помимо непосредственно отладчика, в OllyDbg есть встроенный профилировщик - инструмент проверки скорости работы кода. Обычно этот инструмент предлагается отдельно от отладчика, однако подход, использованный разработчиком OllyDbg, мне кажется более разумным, поскольку профилировка и отладка часто неразделимы.

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

Также полезной и интересной особенностью OllyDbg является поддержка плагинов, которые подключаются к отладчику и расширяют его функциональность. В стандартную поставку входят плагины для работы с закладками и командной строкой. Впрочем, на сайте OllyDbg можно найти SDK (Software Development Kit - комплект для разработки программного обеспечения), с помощью которого можно создать свой плагин, реализующий недостающие возможности.


Сфера применения

Как я уже говорил, а вы, должно быть, и без меня знаете, в каждой современной среде разработки присутствует собственный отладчик. И, тем не менее, зачем-то же автор OllyDbg, некто Oleh Yuschuk, занялся разработкой отдельного отладчика и довёл её, разработку, до победного конца.

Дело, прежде всего, в том, что отладчик, встроенный в среду разработки, предназначен для отладки тех программ, которые созданы именно в этой среде. Такой отладчик специально "затачивается" под конкретный язык программирования и конкретный компилятор. И отладка в 99,9% случаев происходит при наличии у программиста исходного текста программы. OllyDbg одинаково подходит для всех Win32-приложений и предназначен, в основном, для отладки тех приложений, исходный текст которых отсутствует. По большому счёту, для такой отладки совсем даже и не нужно знать, на чём программа написана. Именно этой направленностью и объясняется присутствие в OllyDbg средств для изменения исполняемого файла.

Сама по себе задача отладки программы без исходных текстов может возникать в ряде случаев. Например, самый простой - когда тексты программы по причине банального разгильдяйства или атаки злобных вирусов были утеряны. Тогда, если остался более-менее стабильный исполняемый файл, можно завершить его отладку без исходных текстов и выпустить продукт в заданный срок. Как вариант первого случая, бывает, что в какой-то используемой программой DLL-библиотеке обнаруживаются баги, а исходный текст библиотеки недоступен. Либо, опять-таки, утерян, либо поставщик библиотеки, если она написана кем-то со стороны, просит за него слишком много денег. Тогда не остаётся ничего (особенно, если баги злобные, и появление новых версий библиотеки никоим образом не предвидится), кроме как отлаживать уже имеющийся на руках исполняемый файл.

Ну и, конечно, самый частый вариант отладки без исходного текста - это взлом. Формально это может считаться отладкой, поскольку для того, чтобы бороться с защитой коммерческой программы, нужно хорошо понимать, как эта защита работает. На разработчика тут надежды мало: вряд ли он расскажет взломщику, как оптимально быстро и качественно сломать защиту его собственной программы и лишить себя, любимого, честно заслуженных денег. И, хотя разработчик OllyDbg и просит в лицензионном соглашении не использовать этот отладчик в незаконных целях, вряд ли большинство взломщиков обратит на эти тщетные мольбы хоть какое-нибудь внимание. Тем более, некоторые возможности OllyDbg просто таки подарок для взломщика: например, работа с самораспаковщиками позволяет упростить взлом программ , защита которых основана на них. Конечно, нельзя утверждать, что OllyDbg пригодится только тем, кто будет использовать его незаконно, но, думаю, такие пользователи у этой программы имеются, и их не так уж и мало.

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


Выводы/Резюме

В целом, конечно, OllyDbg нужен далеко не всем программистам и далеко не каждый день, однако бывают случаи, когда нужно выбирать отладчик, и именно тогда нужно вспомнить о плюсах OllyDbg. Хотя множество программистов во всём мире используют GNU Debugger (GDB), однако перед ним у OllyDbg есть преимущества.

Во-первых, это родной для Windows графический интерфейс. Хотя у GDB тоже есть приспособления для работы в оконном, а не консольном режиме, они, как правило, далеко не полностью реализуют функциональность консольной версии. Кроме того, поскольку GDB - вещь кроссплатформенная, есть проблемы с совместимостью с форматами отладочной информации Win32-компиляторов. Фактически, GBD идеально совместим только с GNU-компиляторами (то есть, для Windows это MinGW - Minimalist GNU for Windows). Кроме этого, ориентирован он на отладку программ, написанных на C/C++, поэтому им не так удобно отлаживать программы, написанные на других языках. OllyDbg не имеет таких минусов, о его основных возможностях я уже рассказал раньше. Так что, думаю, среди отдельно стоящих бесплатных отладчиков для Win32 OllyDbg - лучший.

Вадим СТАНКЕВИЧ