Почему нельзя русифицировать автоматически l ollydbg. "Урок крэкинга с помощью OllyDbg"

В основном я всегда для отладки пользовался отладчиком всех времен и народов OllyDbg. Это шикарный деббагер, который очень удобен и прост одновременно обладающий очень мощным функционалом. Но, в последнее время я все больше сталкиваюсь х64 программами, да и домашний компьютер у меня поднят на х64 операционной системе, а OllyDbg версии 1.10 не корректно работает на такой операционной системе, теряет точку входа и вообще печально все. Попытки использовать более новую версию 2.01а тоже не увенчались успехом, так как она виснет в неожиданный момент и перестает отвечать, можно конечно накатить кучу патчей от китайских друзей и более менее оживить дебагер, но все равно огромное количество багов и похоже прекращение разработки(с августа 2011 года никаких подвижек) заставило меня посмотреть в сторону Interactive Disassembler, сокращенно IDA. Это мощнейший инструмент для отладки и исследования программ который обладает кучей нужных и не очень не нужных свистелок и перделок.
Но он тоже обладает некоторыми минусами, которые меня всегда останавливали для изучения сего мощного инструмента:
1. Мало вменяемой документации, есть конечно книги от уважаемого господина К. Касперски, но они настолько древние, что читать их смысл есть, но в текущих реалиях не шибко большой, в основном для общего развития.
2. Цена сего продукта у X-Rays - стартовая лицензия более 500 австралийских долларов и это без X-Rays Decompiler, который стоит совсем каких то неадекватных денег.
Но разочарование OllyDbg возобладало над жабой и здравым смыслом и я решил заняться всетаки изучением IDA.


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

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

Итак я не буду описывать базовые навыки при работе с ассемблером как в статьях Рикардо Наваха, так как думаю те кто переходят к IDA уже немного понимают что такое стек, регистры, как устроена память и что такое условный и без условный переход, а займемся сразу исследованием программ которые описаны в статьях Рикардо. Я постараюсь пройтись по всем его статьям с разбором crackme которые он упоминает.

Первая статья в которой уже идет разбор crackme, является главой под номером 9 , у меня же она будет первой главой.
Качаем необходимый фаил который будет исследоваться, например с сайта wasm.ru
Запускаем IDA и открываем в нем фаил через File->Open. После чего видим следующую картинку:

Все настройки можно оставить по умолчанию, так как они в принципе в текущий момент ничего мне особа не говорят. Жмем ОК и видим основное окно IDA:


Кружочками с циферками выделены следующие позиции:
1. Информация об базе, точке входа, размере секции кода виртуальной и реальной и прочая полезная информация про секцию.
2. Функции которые обнаружены в программе, розовым обозначены функции которые импортируются из внешних библиотек. start - чаще всего это функция которая идет в точке входа, к стати посмотреть варианты Entery Point можно нажав хоткей CTRL+E.
3. Собственно сам ассемблерный код текущей открытой функции, если не хочется смотреть в графическом режиме то можно переключить в текстовой сплошной простыней по пробелу, обратно в графический переключается пкм на листинге Graph view.
4. Миникарта функций со всеми переходами и прочим, очень полезна для ориентации в коде.

Для того чтобы можно было запускать приложение в отладчике, необходимо выбрать сам отладчик, так как листинг кода это еще не отладка.
Нажимаем F9 или выбираем в верху опцию Debugger - появиться окно под названием Select a debugger в котором выбираем Local Win32 debugger для начала нам хватит этого дебагера, а с остальными будем разбираться позже.

Нажимаем еще раз F9 и программа запускается, не остановишись на Entery Point как в OllyDbg. Это можно исправить, если есть желание постоянно останавливаться в самом начале, идем опять же в закладку Debugger и там выбираем Debugger Options в открывшимся окне можно установить галочку на Stop on process entry point и получим реакцию такуюже как в OllyDbg, при старте отладки останавливаемся на точке входа. Но так же можно сразу установить руками брякпоинт если необходимо посмотрев в ASM листинг и остановиться там.

Теперь рассмотрим окно дебаггера:


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

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


Disassembly - собственно вызывает окно с дизассемблированной программой.
Hex Dump - открывает окно с дампом.
Pseudocode - эта функция пытается преобразовать ASM код в жалкое подобие C.
Exports - что программа или библиотека экспортирует.
Imports - что программа или библиотека импортирует.
Names - список APIшных имен найденых в данном экзешнике.
Functions - список функций обнаруженных в программе.
Strings - текстовые строки обнаруженные в программе.
Segments - сегменты которые обнаружены в памяти.
Для начала хватит, так как назначение остальных функций пока не очень понятны, а текущее понадобиться для иследования первой программы crackme.

Теперь немного про дебаггер, основные клавиши остались стандартные
F9 - выполнить программу
F8 - трассировать не заходя в функцию
F7 - трассировать заходя в функции
F2 - снять/установить брякпоинт на строке где в текущий момент курсор.

Как в IDA различать где мы сейчас находимся в программе которую отлаживаем или уже шаримся по дллке импорта - можно посмотреть в текстовом виде с лево от номера позиции и увидеть описание, например вот такое:
kernel32.dll :764FD8F3 mov edi, edi
Ну по слову kernel32. сразу становиться понятно, что сейчас мы находимся в кернеле.

Ну теперь всетаки давайте вернемся нашему многострадальному crackme.
Запустим его и попытаемся ввести какое нибуть имя и серийный номер, вывалиться мессадж бокс, который скажет "No luck there, mate!". Значит мы не угадали имя и пользователя. Давайте попробуем отловить это сообщение и посмотрим как нам заставить выдавать правильное сообщение, что имя и серийник правильные. Известно, что вывод сообщения об неудаче использует стандартную API функцию MessageBoxA , вот на нее и необходимо нам поставить брякпоинт.
Идем в View ->Open SubViews ->Functions или нажимам Shift+F3, а вот там видим все функции которые удалось определить IDA.
Выделяем нужную нам функцию MessageBoxA и по низпадающему меню от правой мыши ставим брякпоинт на функцию. Както так:

Ок. Поставили, продолжим выполнение программы и попробуем ввести снова неправильное имя и серийник.(к стати вернутся в окно отладки по умолчанию чаще всего можно кнопкой ESC )
Отладка остановилась на выводе сообщения о неправильном логине и пароле, отлично, смотрим какую полезную информацию мы можем выудить.
Мы находимя на входе в функцию MessageBoxA, сама функция нам не интересна, по этому жмем CTRL+F7 что означает, выполнить код до обнаружения первого ret, тоесть выхода из функции. После всех манипуляций, основное окно дизасемблированного кода выглядит вот так:

Ага! Это процедура которая передает аргументы для MessageBoxA которая выводит сообщение об неправильном серийнике и имени. Так как назначение понятно, то можно переименовать сразу функцию щелкнув ПКМ(правой кнопокй мыши) на sub_401362 и выбрав там пункт Rename или использовав горячую кнопку N. Я назову эту функцию AHTUNG! :)

Посмотрим далее, откуда растут ноги этой процедуры и что же находиться за ней. Нажмем F8 и выйдем на уровень в верх. А там сразу видно некую проверку со стрелочками, одна стрелочка на лево ведет к вредной процедуре AHTUNG , а вот вторая не очень понятно, но там видно CALL и адрес sub_40134D , очень интересно посмотреть, что же там. Варианта 2 в принципе, 1 это щелкнуть 2 раза ЛКМ(левой кнопкой мыши) на sub_40134D и попасть в эту функцию, а второй, это просто навести мышой на туже sub_40134D и подождать пол секунды, что покажет кусок этой функции, както так:

Уже очень интересно, похоже что другой вариант проверки ведет к правильному окошку. Обзовем эту процедурку GOOD .
Снимаем старый брякпоинт на MessageBoxA , он нам не нужен уже идем в Debugger->Breakpoints->Breakpoint List и удаляем старый брякпоинт в открывшемся окне.
Теперь необходимо поставить брякпоинт на проверку jz над этими процедурками AHTUNG и GOOD либо по ПКМ и выбором соответсвующей опции или хоткеем F2. Перезапустим программу и осмотримся.
Получится у нас следующее окно:

К сожалению на статичной картинке не видно, но поверьте мне на слово, в текущий момент мигает срелочка которая ведет в сторону процедурки AHTUNG и это есть не очень хорошо. Нам было бы неплохо чтобы мигала зелененькая стрелочка в сторону процедурки которую мы обозвали GOOD. Для этого необходимо поставить флаг ZF в 1. ПКМ на флаге и выбрать опцию Increment Value или выделить флаг и нажать на кнопочку +(плюс) цифровой клавиатуре. Конечно лучше это смотреть в динамике, в статичных картинках плохо видно, но теперь замигала стрелочка в сторону GOOD процедурки в листинге это выглядит вот так:

Тут более наглядно на статике, когда ZF = 0, то переход не совершается и выглядит в виде пунктиной линии, соответсвенно мы попадаем на процедурку AHTUNG, а когда совершается - то видно жирную зеленую стрелочку и ведет он на процедурку GOOD.
Ну чтож, жмем наконец F9 и наслаждаемся результатом: Great work, mate. Now try the next CrackMe.


Правда если закрыть программу и снова открыть в отладчике, флаг конечно пропадет, надо придумать что нибуть, чтобы пропатчить ее и больше не извращаться с флагами, самый простой вариант, это за место JZ сделать JNZ , чтобы принимался наоборот любой неправильный серийник, кроме правильного.
Hex код JZ - 74 , а код JNZ - 75, значит нада поменять байт, встаем на строку которую хочем поменять, идем в Edit ->Patch programm ->Change Byte.
Повяиться панель с набором байтов:
74 07 E8 18 01 00 00 EB 9A E8 FC 00 00 00 EB 93
необходимо поправить первую цифру на 75 , чтобы получилось
75 07 E8 18 01 00 00 EB 9A E8 FC 00 00 00 EB 93
В дизасемблированном коде можно будет увидеть изменения.
Тем самым теперь будет правильно проходить любой серийник кроме правильного, хотя я считаю что это грязным трюком, лучше или знать серийник или сделать безусловный JMP.

Сохраним результат патча, File ->Produce File , вывалиться куча возможных сохранений, даже в EXE , но оно почемуто не работает, так что сохраним в банальный DIF.
Посмотрим в файлик что получилось:

То что надо.

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


Данная статья приведена исключительно в информационно-ознакомительных целях. Коллектив проекта "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. Как это все делается тема отдельной статьи, предлагаю в этом разобраться вам самим.

Песочница

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

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

Каталог 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. Сайт программы

В продолжение темы:
Windows

Второе поколение спортивного браслета Mi Бэнд позволяет своим владельцам получать информацию о сердцебиении и количестве пройденных шагов (с теоретическим расчётом пройденного...

Новые статьи
/
Популярные