Подбираем наиболее интересные плагины для OllyDbg. Подбираем наиболее интересные плагины для OllyDbg Ollydbg в играх выбор меню

Введение в крэкинг с нуля, используя OllyDbg - Глава 1 — Архив WASM.RU

Целью данного «Введения в крэкинг с нуля, используя 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’а, попробовали поставить точки останова, чтобы в следующей главе все эти вещи не вызывали у вас колебаний и сомнений. Рикардо Нарваха, пер. Aquila

Привет всем. Сегодня я буду описывать OllyDebugger. OllyDebugger(далее Olly) – это суперский отладчик(ring-3). Популярность данного отладчика растёт не по дням, а по часам:). Для новичков этот отладчик – самое то, для профессионалов умеющих его очень хорошо использовать – незаменимый инструмент. Данная статья опишет всё, что я умею делать в Olly.

1. Что из себя представляет 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`а, и наоборот.

2. Горячие клавиши

Именно с “горячих клавиш” я хочу начать рассказ, т.к. без них придётся много времени тратить на ползание по меню и отладчик сразу потеряет своё удобство. Начнём с панели управления:

Первая кнопка – открыть файл (гор. кл. 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 – Поставить брейкпоинт на выделенной строке

3. Плагины

Вы, наверное, начали возмущаться, почему я говорю про всё, но не про сам отладчик. В ответ я скажу: “Я посмотрю на тебя, как ты будешь отлаживать программу, хотя бы без плагина CommandBar”. Да, действительно без плагинов отлаживать программу намного труднее. Сейчас я приведу список установленных у меня плагинов и попутно буду объяснять, что к чему:

1. IsDebuggerPresent – Прячет отладчик от обнаружения при помощи функции IsDebuggerPresent.
2. Hide Debugger – Прячет отладчик от обнаружения при помощи функции IsDebuggerPresent.
3. Olly Script – позволяет писать скрипты для помощи в отладке. Я не пользуюсь данным плагином, т.к. не считаю нужным автоматизировать отладку.
4. Olly Dump – позволяет дампить отлаживаемый процесс и за одно восстанавливает у него импорт. Супер плагин. Советую всем.
5. Command Bar – позволяет творить чудеса. В отладчике появляется строка, где можно вводить очень умные команды. IMHO без данного плагина отладка не возможна:). Я перевёл справку от плагиа и приведу её в дополнении №1.

4. Первое знакомство

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

Я сказал, что стандартное окно, я соврал, я поменял цвета:). Теперь всё по порядку. В порядке описания: Главное окно, Окно регистров, Панель стека, Панель меню.

Главное окно: В этом окне происходит собственно сама отладка. Все инструкции приведены в дизассемблированном виде. Вы можете перемещать указательную строку при помощи курсора. При помощи указательной строки Вы можете выбирать, какие скопировать данные(здесь всё намного проще, чем в SoftIce`е. Выделил. Ctrl+C, зашёл куда надо Ctrl+V), какую изменить команду, куда поставить брейкпоинт и т.д. Сбоку выделен адрес, который должен выполниться следующим. Между колонкой адресов и колонкой дизассемблированного листинга есть колонка с машинным кодом инструкции. Самая последняя колонка содержит в себе комментарии.

Окно регистров: В окне регистров отображаются все 32-битные регистры, регистры флагов и различные другие регистры. Для того, чтобы изменить регистр надо щёлкнуть по его значению 2 раза и ввести новое значение. Реверсировать регистр флага можно путём двойного щелчка по одному из них.

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

Панель меню: Панель меню будет рассматриваться в большой главе, т.к. эта тема очень важна.

5. Знакомство с главным меню

Начнём с меню под названием 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 пункт для отладки программы.

6. Главные настройки программы

Я буду объяснять только самые важные опции.

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
Настройки дизассемблера. Можете пощёлкать по всем опциям, и посмотреть как будет выглядеть асм листинг. Все остальные настройки на мой взгляд не важны.

7. Первая отладка

Отлаживать мы будем Fant0m crackme 4. Скачать его можно от сюда: http://fant0m.cjb.net/. Из этого crackme мы попытаемся достать правильный рег. номер для Вашего имени. Загружаем crackme под отладчиком и жмём F9 для запуска. Вводим имя чела, на которого мы хотим зарегить данный crackme. Вводим любой пароль. Так, теперь нам надо поставить брейкпоинт на считывание имени и пароля. Переключаемся в Olly и в командной qrpnje пишем bpx GetDlgItemTextA . Жмём Check. Сразу оказались в Olly в таком месте:

00401217 E8 62010000 CALL 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: ; |hWnd 0040122E E8 4B010000 CALL 00401233 FF75 08 PUSH DWORD PTR SS: 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 >

Сразу видно, что в процедуре по адресу 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: 00401304 8D3D84324000 LEA EDI, DWORD PTR DS: 0040130A 33C0 XOR EAX, EAX 0040130C 33C9 XOR ECX, ECX 0040130E B31A MOV BL, 1A 00401310 803E00 CMP BYTE PTR DS:, 0 00401313 7415 JE SHORT 0040132A 00401315 8A06 MOV AL, BYTE PTR DS: 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:, AL 00401325 47 INC EDI 00401326 46 INC ESI 00401327 41 INC ECX 00401328 EBE6 JMP SHORT 00401310 0040132A C60700 MOV BYTE PTR DS:, 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 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 - Выполнить до адреса
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, который находится в той же папке, где и установлен отладчик.

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 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 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 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 Executable=D:Unpackyoda Protector(criptor)Project1.exe Executable=D:UnpackTitaniumbitarts_evaluation.EXE Executable=D:UnpackARM ProtectorAsprDbgr.exe Executable=D:UnpackARM Protectorarmp.exe Executable=D:UnpackARM ProtectorProject2.exe Executable=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 Executable= Executable= Executable= Executable= Executable= Executable= Argument=bp GetDriveTypeA Argument=Fack you Restore bookmarks window=0 Restore command line window=0 Command line window X=365 Command line window Y=186 Show Command Bar Window=1 FontFace= FontHeight=-16 CharSet=128 Scheme=5,12,5,17,7,8,7,13 Scheme name=Black on white Scheme=14,12,7,1,3,7,3,13 Scheme name=Yellow on blue Scheme=1,12,3,11,14,2,7,13 Scheme name=Marine Scheme=15,12,7,0,8,11,7,13 Scheme name=Mostly black Scheme=0,12,8,18,7,8,7,13 Scheme name=Scheme 4 Scheme=14,12,7,1,3,7,3,13 Scheme name=Scheme 5 Scheme=1,12,3,11,14,2,7,13 Scheme name=Scheme 6 Scheme=15,12,7,0,8,11,7,13 Scheme name=Scheme 7 Font=12,8,400,0,0,0,255,2,49,0 Face name=Terminal Font name=OEM fixed font Font=9,6,700,0,0,0,255,0,48,1 Face name=Terminal Font name=Terminal 6 Font=16,8,400,0,0,0,204,2,33,0 Face name=Fixedsys Font name=System fixed font Font=14,0,400,0,0,0,1,2,5,0 Face name=Courier New Font name=Courier (UNICODE) Font=10,6,400,0,0,0,1,2,5,0 Face name=Lucida Console Font name=Lucida (UNICODE) Font=9,6,700,0,0,0,255,0,48,0 Face name=Terminal Font name=Font 5 Font=16,8,400,0,0,0,204,2,33,0 Face name=Fixedsys Font name=Font 6 Font=14,0,400,0,0,0,1,2,5,0 Face name=Courier New Font name=Font 7 Commands=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 Scheme name=No highlighting Commands=0,4,124,112,9,64,64,13,111,8,12,0,0,0 Operands=1,0,4,13,65,1,112,6,0,0,0,0,0,0 Scheme name=Christmas tree Commands=0,0,124,112,0,64,64,0,96,0,0,0,0,0 Operands=0,0,0,0,0,0,0,0,0,0,0,0,0,0 Scheme name=Jumps’n’calls Commands=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 Scheme name=Hilite 3 Commands=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 Scheme name=Hilite 4 Options position=550,113 ScriptDir=D:Crack toolsTools for soft Iceodbg109dscripts idb_Sleeptime=1000 idb_Autoload=1 Debugger="C:Program FilesBorlandDelphi7Binbordbg70.exe" - aeargs %ld %ld Custom=0EEDFADE,0EEDFADE Custom=40000005,40000005 Custom=80000004,80000004 Custom=A3410001,A3410001 Custom=C0000005,C0000005 Custom=C0000008,C0000008 Custom=C000001D,C000001D Custom=C000001E,C000001E Custom=C000008C,C000008C Custom=C000008F,C000008F Custom=C0000094,C0000094 Custom=C0000096,C0000096 Custom=C00000FD,C00000FD Custom=E06D7363,E06D7363

Завершение

Вот и закончилось ваше знакомство с замечательным отладчиком OllyDebugger. Конечно, все возможности этого отладчика не возможно описать в статье, но я попытался, и надеюсь, у меня получилось. Некоторые возможности остались за гранью этой статьи, но я уверен, что Вы сами для себя откроете эти возможности. Я учил Olly абсолютно без статей, и у Вас получится продолжить ознакомление с отладчиком без чьей либо помощи. Если есть вопросы, предложения, маты и т.д. шлите их все на [email protected].

P.S. Обязательно прочитайте мою статью про распаковку, при помощи Olly.

Приветы

Приветы всему cracklab`у, а особенно MozgC и Bad_guy`ю, ALEX`у, Kerghan`y, Mario555, Hex`у и всем, кто прочитал эту статью.
Данная статья приведена исключительно в информационно-ознакомительных целях. Коллектив проекта "DAXA" не несет никакой ответственности.


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

После закачки всего необходимого софта, установите его куда вам угодно. Все программы не требуют установки. Первым делом запускаем наш отладчик OllyDbg , при первом запуске он попросит вас указать пути к UDD и Plugins, поможем ему заходим в Options->Appearance->Directories и прописываем оба пути(просто укажите папку где лежит OllyDbg). Непугайтесь множества окон, для работы нам понадобиться всего 3.

1.CPU
2.Breakpoints
3.Patches

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

1.Открываем нашу программу в отладчике. Для этого открываем меню File->Open и выбираем нашу тестовую программу. После загрузки в окне CPU мы увидим вот такую картину.

Это и есть ассемблерный код нашей программы.
Теперь немного объясню некоторые строчки:
PUSH EBP ; Начало другой функции
CALL TestP.00405С60 ; Вызов функции
Этого пока нам будет достаточно.
2.Теперь нам надо найти функцию которая выдает окно с запросом ввода ключа. Для этого выполняем программу пошагово нажимая клавишу F8 до тех пор пока не появиться окошко с запросом ввода. После нескольких нажатий появляеться окошко ввода.

Теперь мы знаем что где-то в этой функции (TestP.004523B8) выводиться наше окошко. Нам необходимо докопаться до функции которая выводить окно,для этого надо зайти в эту функцию. Теперь перед этой строкой CALL TestP.004523B8 нам надо поставить точку останова (Breakpoint) для этого выделяем строку перед ней и нажимаем F2 и видим что в окошко Breakpoints добавилась эта строка.

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

Нам надо продолжать пока не найдем функцию которая выводит окно и обрабатывает нажатие на кнопку ОК и определяет правильно мы ввели ключ или нет. Продолжим, также нажимаем F8 пока не появиться окно.

Опять перед ней ставим точку останова.

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

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

Продолжаем искать нажимая F8. Походу нажатия F8 мы видим что начинают появляться API функции,

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

Вылезло оно на этой строчке,

Но при нажатии на него мышкой окно не появляется, уряя значит мы там где нам нужно, именно эта функция рисует окно и где-то тут сверяется введенный нами ключ. Продолжаем дальше трассировать программу (F8!) и видим что на этом месте

Какой-то цикл, который постоянно повторяется, у нас уже палец болит держать F8 , а он никак не кончиться, для этого ставим точку останова на первой строке после цикла (MOV DWORD PTR SS:,EAX)

И нажимаем кнопку и видим что окошко полностью нарисовалось, ждет от нас ввода, программа остановилась тут, в цикле. Далее вводим любой ключ, нажимаем ОК.

Окошко закрылось и мы вернулись в окно отладчика, выполнение остановилось на нашей точке останова. Теперь нам надо найти функцию в которой выводит окошко с уведомление что ключ введен неверно. Для этого трассируем (F8) нашу программу до того момента пока не появится окошко с уведомлением.

Тут мы и будем разбираться что к чему. В глаза первым делом кидается строчка это и есть наш правильный ключ, но не надейтесь что в других программах вы так просто его найдете, обычно ключи просто так в памяти не лежат, потому нашей задачей будет сделать так чтоб программа принимала любой ключ! Теперь проанализируем код перед вызовом функции (CALL TestP.00427294) которая выводит окно с уведомлением об ошибке. Первым делом смотрим в окно регистров котрое находиться в окне

И видим что в регистре EAX лежит адрес введенного нами ключа в памяти и соответственно что мы ввели (я ввел 23). Тут все уже немного сложнее и надо иметь хоть небольшие знание основных операторов ассемблера. Думаем так, что программа должна сравнить наш ключ с каким либо еще или проверить его правильность любым другим способом, но для этого она должна вызвать функцию которая это все сделает. Значит ищем приблизительно такую структуру

MOV EAX, ...  //записывает в EAX адрес нашей строки
...................
CALL ...          //вызов функции которая проверит правильность нашей функции
JNZ (или JE ) ...// условный переход (почитайте о них!)

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

MOV EAX,DWORD PTR SS:
MOV EDX,TestP.00453BA4
CALL TestP.00404258
JE SHORT TestP.00453B4A

Теперь заново пошагово выполните это кусочек кода и вы увидите что этот оператор
JE SHORT TestP.00453B4A пропускается и никуда нас не перекидывает, значит это и есть наша функция которая проверила наш код и он оказался неверным потому оператор JE никуда нас и неперекинул. Я нибуду вам обьяснять как этот оператор проверяет правильность, мы все делаем "жестко" напролом:). Значит если код будет введен то этот оператор кинет нас по одресу 00453B4A и все будет ок:). Заменяем этот оператор на безусловный переход (JMP) который в любом случае перекинет нас по этому адресу. Посмотрите где этот адрес находиться (выделенная строка синим цветом).

Видим что вызов функции которая выводит уведомление о том что ключ неверен, пропускается.
Для того чтоб заменить строку выделяем её и нажимаем пробел(Space) и заменяем это
на это.
Видим что строка JE SHORT TestP.00453B4C заменилась и в окошке Patches добавилась строка.

Теперь проверяем или работает. Нажимаем кнопочку , в окне Breakpoints нажимаем правой клавишей мышки и в меню выбираем Disable All. Далее в окне Patches на нашей строке нажимаем правой и в меню выбираем Apply Patch. После этого жмем кнопку , выводиться окошко с запросом ключа, вводим любой ключ, нажимаем ок и наша программа зарегистрирована. Конкретно эта программа будет всегда спрашивать ключ, так как это просто тест, а реальная программа записала бы себе что вы правильно ввели ключ.

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

3.Последний шаг, надо зашить патч в программу для этого нам и нужен Hex редактор. Итак открываем его и выбираем нашу программу, откроеться туча шестнадцетиричных цифр. Нам надо найти строку JE SHORT TestP.00453B4A в шестнадцатеричном виде и заметь её на нашу. Я думаю вы заметили что в окне CPU(OllyDbg) напротив каждой строки пишется её шестнадцатеричный вид. Для того чтобы точно найти эту строку ищем так, не просто вводим искать 74 2B , а берем еще предыдущую строку кода и ищем так E8 3B 07 FB FF 74 2B

В exe файле код идет цепочкой, по этому мы и берём предыдущую строку. Для чего же мы это делаем, просто такая маленькая строка как 74 2B может повторяться несколько раз потому мы и берем еще предыдущую строку чтоб найти именно то что нам нужно. Далее смотрим как в шестнадцатеричном коде выглядит наша видоизмененная строка JMP SHORT TestP.00453B4A, выглядит она так EB 2B вот мы и заменяем найденную строку на нашу, для это нажимаем кнопочку и заменяем строки так

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

ВАЖНО!! Прежде чем приступать к манипуляциям c программами необходимо проверить или *.exe файл небыл запакован. Для этого вам понадобиться утилита PEiD. Как это все делается тема отдельной статьи, предлагаю в этом разобраться вам самим.

Целью данного «Введения в крэкинг с нуля, используя 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’а, попробовали поставить точки останова, чтобы в следующей главе все эти вещи не вызывали у вас колебаний и сомнений.

Состав дистрибутива

Каталог OllyDbg110 - дистрибутив, скачанный с сайта программы

Каталог OllyDbgHelpRus - переведенная на русский язык официальная справка по отладчику OllyDbg. Взято с сайтаhttp://cracklab.ru/


2. Описание программы (взято из Help -а к программе)

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

Требования. Работает под Windows 95, 98, МЕ, NT или 2000, XP (не проверен на 100 %), на любом компьютере класса Pentium, но для удобной отладки Вам будет нужен по крайней мере процессор 300 мгц. OllyDbg требовательный к памяти. Если Вы собираетесь использовать дополнительные примочки (плагины), я рекомендую 128 или более Мбайт оперативной памяти.

Поддерживаемые процессоры: OllyDbg поддерживает все 80x86, Пентиум, MMX, 3DNow! , включая Athlon, команды SSE и соответствующие форматы данных. Но не поддерживает SSE2.

Настройка. Более чем 100 опцийуправляют работой программы.

Форматы Данных. Окна Дампа отображают данные во всех обычных форматах: HEX, ASCII, UNICODE, 16-и 32 разрядные целые/нецелые/hex числа, 32/64/80-bit с плавающей запятой, адресацию, дизассемблирование (MASM, IDEAL или HLA), PE заголовок или поток блока данных.

Справка . Этот файл содержит основную информацию, необходимую для понимания и использования Ollydbg. Если у вас есть справка по Windows API (win32.hlp, не включена по причинам авторских прав), Вы можете прикрепить её и получать мгновенную справку о системных вызовах.

Запуск приложения. Вы можете выбрать исполняемый файл в командной строке, выбрать в меню, перетащить файл в Ollydbg, перезапустить последнюю отлаживаемую программу или присоединиться к уже запущенному приложению. Ollydbg поддерживает текущую отладку. Инсталляция - не требуется, Вы можете запустить Ollydbg с гибкого диска!

ОтладкаDLL. С Ollydbg Вы можете делать отладку динамически подключаемые библиотеки (DLL). Ollydbg автоматически запускает маленький исполняемый файл, в который загружает библиотеку и позволяет Вам вызывать ее экспорт.

Отладка файлов с отладочной информацией. Ollydbg читает информацию об отладке в Форматах MICROSOFT и Borland. Эта информация включает исходный текст и названия функций, меток, глобальных и статических переменных. Поддержка динамических (стек) переменных и структур очень ограничена.

Подсветка Кода. Дизассемблер может подсвечивать различные типы команд (переходы, условные переходы,помещение и извлечение из стека, вызов процедур, возвраты, привилегированные и недопустимые) и различные операнды (общие, FPU/SSE или сегментные/системные регистры, операнды памяти в стеке или в другой памяти, константы). Вы также можете создавать пользовательские схемы подсветки.

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

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

Сканер объектов. OllyDbg сканирует модули объекта (файлы) или библиотеки (оба в форматах OMF И COFF), извлекает код, сегментирует и определяет их местонахождение его в отлаживаемой программе.

Сканер импортируемых библиотек. Некоторые DLL экспортируют свои символы только ординалами (ordinal), которые не очень удобны для восприятия для человеческого глаза. Если у Вас есть соответствующая библиотека импорта, OllyDbg переводит ординалы назад в символьные имена.

Полная поддержка UNICODE. Почти все операции, доступные для строк ASCII также доступны для строк UNICODE, и наоборот.

Имена. OllyDbg показывает все импортированные и экспортируемые символы и имена из информации об отладке и в форматах Microsoft и Borland. Сканер Объектов позволяет распознавать функции библиотек. Вы можете добавлять ваши собственные значения и комментарии. Если функции в некоторой DLLэкспортируются ординалами, Вы можете прикрепить библиотеку импорта и восстановить первоначальные имена. OllyDbg также знает символьные имена многих констант, подобно окнам сообщений, ошибкам кода или полям разрядов, и декодирует их в вызовы известных функций.

Известные функции. OllyDbg распознает по имени более чем 2300 часто используемых Cи и API функции Windows и декодирует их параметры. Вы можете добавить ваши собственные описания, или назначить определенное декодирование. Вы можете установить брейкпоинт с записью на известной функции и записать параметры в файл.

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

Стек. В окне Stack, OllyDbg использует эвристику, чтобы распознать адреса возврата и структуру записи. Обратите внимание, однако, что они могут быть остатками от предыдущих вызовов. Если программа приостановлена на известной функции, окно стека декодирует фактические параметры.

SEHцепочки. Стек прослеживает и отображает цепочку SE хэндлов. Полная цепочка доступна в отдельном окне.

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

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

Ресурсы. Если API функция Windows ссылается на строковый ресурс, OllyDbg извлекает и показывает его. Поддержка других типов ограничена списком прикрепленных ресурсов, дампа и бинарного редактирования.

Контрольные точки (брейкпоинты). OllyDbg поддерживает все обычные виды контрольных точек: простые прерывания, условные прерывания, прерывания, которые записывают информацию (например, функциональные параметры) в журнал, контрольные точки на запись и доступ к памяти, аппаратные контрольные точки (только ME/NT/2000). В крайнем случае пошаговой отладки, INT3 контрольная точка может быть установлена на каждой команде в модуле. На процессоре 500 мгц под Windows NT, OllyDbg может обработать до 5000 прерываний в секунду.

Наблюдатели и инспекторы. Наблюдатели - выражения, оцениваемые каждый раз когда программа приостановлена. Вы можете использовать регистры, константы, адресные выражения, булевы и алгебраические операции любой сложности. Вы можете сравнивать ASCII и UNICODE строки. Инспекторы - это наблюдатели, которые содержат до 2 индексов и могут быть представлены как двумерная таблица, позволяющая декодировать массивы и структуры.

Обход динамической памяти. На Win95-основанных системах, OllyDbg составляет списки всех распределенных блоков динамической памяти.

Handles. На NT-основанных системах, OllyDbg составляет списки всех системных Handle, принадлежащих отлаживаемому приложению.

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

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

Прямая трассировка (Run tracе). Трассировка выполняет программу пошагово и записывает её выполнение в большой круговой буфер. Этот протокол содержит все регистры (кроме SSE), флаги и ошибки потока, сообщения и декодированные параметры известных функций. Вы можете сохранить оригинальные команды, которые облегчат отладку самоизменяемого кода. Вы можете определить условие прекращения отладки – введя интервал адресов, выражение или команду. Вы можете сохранить информации отладки в файл и сравнить два независимых выполнения программы. Трассировка позволяет обратно проанализировать хронологию выполнения в подробностях, миллионов команд.

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

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

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

Дополнения к программе. Вы можете добавить примочку к OllyDbg, или написать ваше собственное дополнение к программе. Дополнения к программе обращаются ко всем важным структурам данных, добавляют меню и ярлыки к существующим окнам OllyDbg и используют более чем 100 добавочных API функций. Плагины API хорошо документированы. Стандартный дистрибутив включает два дополнения к программе: Командная строка и Закладки.

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

Настройка. Вы можете определить пользовательские шрифты, цвет и схемы подсветки.

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

3. Сайт программы