Подбираем наиболее интересные плагины для ollydbg
Содержание:
OllySocketTrace
Плагин для трассировки всех операций с сокетами, выполняемых процессом. Во время выполнения программы записывает все отправленные и принятые буферы, а также все параметры, переданные в сетевые функции, и возвращенные этими функциями значения.
В настоящее время поддерживаются следующие операции с сокетами: 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.

Pyllow
Почему так много реверсеров пользуются 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
Pyllow
Почему так много реверсеров пользуются 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.Python с помощью команды:
Если возникнут какие-то трудности, то официальный мануал Boost должен помочь bit.ly/14FU7xP
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 и других).
Проект активно развивается и постоянно тестируется автором на совместимость с последними версиями поддерживаемых отладчиков.
Ollydbg-backup
Во время работы над очередным бинарником реверсеру приходится добавлять достаточно много своей информации: писать комментарии к отреверсенным функциям, чтобы на следующий день не изучать заново алгоритм их работы и входные параметры, ставить брейкпоинты и так далее. Вся эта служебная информация автоматически сохраняется отладчиком в UDD-файле. Но случается так, что во время падений дебаггера или его очередной переустановки эти файлы теряются. И надо начинать анализ заново. Чтобы избежать такой печальной ситуации, можно воспользоваться плагином ollydbg-backup, который позволяет сделать бэкап этой информации, сохранив ее в CSV-файл, из которого ее можно легко загрузить обратно в отладчик. CSV-файл имеет следующую структуру:
RVA,label,comment

Как устанавливать плагины?
Для начала необходимо создать в директории программы папку с названием Plugins. Это позволит в дальнейшем избежать замусоривания основной директории, а в случае необходимости без труда отыскать неработоспособный/конфликтный плагин. Далее копируем DLL-файл плагина в созданную директорию, после чего запускаем отладчик и указываем путь к этой папке:
- OllyDBG v1.10: выбираем Options -> Appearance и закладку Directories. В пункте Plugin path указываем путь к папке с плагинами.
- OllyDBG v2.01h: выбираем Options -> Options и раздел Directories. В пункте Plugin directory указываем путь к папке с плагинами.
Перезапускаем отладчик и ищем появившийся пункт в меню Plugins.
ИНСТРУКЦИИ
Как уже говорилось в прошлых частях, главной целью данного «Введения…» является объяснение теории, практика в OllyDbg, чтобы её усвоить, а в дальнейшем, после приобретения уверенности в своих навыках, перейти к возможностям, которые они дают.
Рассмотрев в OllyDbg почти все флаги, мы перейдём к рассмотрению наиболее важных инструкций. Если вы встретите в листинге инструкцию, которой не окажется здесь, вы можете проконсультироваться с каким-нибудь более полным руководством по ассемблеру.
NOP (NO OPERATION)
Это инструкция, которая при запуске не производит никаких изменений в регистрах, стеке или памяти, поэтому по-английски её название расшифровывается «NO OPERATION», то есть у неё нет никакого специального анзначения, и поэтому её можно использовать, например, если нужно заменить одну инструкцию на другую, более короткую. Чтобы процессор не столкнулся с ошибками, лишнее место заполняется NOP’ами.
Также она служит для полного уничтожения другой инструкции, для этого нужно заменить её соответствующим количество NOP’ов, или попросту заNOPать.
Снова откроем крэкми CrueHead’а.

В самом начале видим оригинальный код. Чтобы занопать первую инструкцию PUSH 0, которая имеет размер 2 байта, отмечаем соответствую строку листинга с помощью мыши, а затем нажимаем клавишу «пробел» или же правая кнопка мышь — ASSEMBLE.

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

Пишем NOP и нажимаем ASSEMBLE.

Видим, что Олли, кроме того, что ввела NOP, будучи весьма умной программой, учла, что PUSH занимает два байта, и чтобы не оставлять неприкаянным следующий байт, ввела дополнительный NOP.
Теперь на месте, где был «PUSH 0», находятся два NOP’а, которые при исполнении ничего не делают, в чём мы можем убедиться, нажав два раза F7, чтобы стала отмеченной инструкция CALL. Увидим, что изменился только регистр EIP, содержащий адрес инструкции, которая должна выполнится следующей, но ничего больше не изменило своего значения: ни другие регистры, ни стек, ни флаги, ни память.
Теперь нам нужно посмотреть эти два новых байта в DUMP, и для того, чтобы найти их там, нам нужен их адрес в памяти, и это 401000 и 401001.

Идём в окно DUMP, правая кнопка мыши — «Go to» — «Expression», после чего нужно будет ввести адрес, где располагаются требуемые нам байты.

Вводим 401000.

Видим, что:
Красным выделены изменённые Олли байты. Первым идут два 90, а затем E8, FF и все остальные байты, относящиеся к следующей за NOP’ами инструкцией, которой является CALL.
Может Олли вернуть обратно изменённые нами байты?
Хе-хе, да, может.
В любом из двух окон — DUMP или листинге, отмечаем оба байта.

Потом кликаем на правую кнопку мыши и выбираем «UNDO SELECTION»

И затем снова появляется изначальный PUSH.

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

Top Debugging 64-bit downloads
OllyDbg 2.01
A handy and reliable assembler level analyzing debugger
Freeware
tags: API debugger, debug application, code analysis, debug, debugger, assembler
Kingo Android Root 1.5.0
KingoRoot for Android, the best One Click Root Tool/APK for free.
Freeware
tags: kingoroot, root, android root, how to root, galaxy root, root Samsung, root download, android root software, root android phone, android root app download, root android, free android root, free android root software
232Analyzer 5.6.1
RS232 Serial Data COM Port Monitor Protocol Analyzer Terminal Software Debugger
Shareware | $79.95
tags: RS232, RS485, RS422, TTL, USB, Serial, Converter, Monitor, Terminal, Protocol, Analyzer, Software
JD-GUI 1.6.6
Use this fast Java decompiler to reduce the time and energy
Freeware
tags: Java decompiler, decompile JAR, Java decompilation, decompile, Java, decompiler
VBReFormer 6.4.5
VBReFormer is the most advanced publically available decompiler for Visual Basic
Shareware | $60.00
tags: vb decompiler, decompiler vb, decompiler, decompilateur, decompileur, discompiler, disassembler, vb5, vb6, vbreformer, vb-reformer, traduction, translation, Visual Basic Codes Sources, Visual Basic sources
Monster Debugger 3.02
Open source debugger for Adobe Flash, Flex and AIR projects
Open Source
tags: AIR debugger, application debugger, debug application, debugger, debug, development
GlowCode 64-bit 10.0 Build 1002
Diagnose and debug Win32 EXEs and DLLs developed with Visual C++ and VisualBasic
Trialware | $499.00
tags: Memory Leak Detection x64, Code Profiling x64, Function Call Tracing x64, memory x64, leak x64, detection x64
THRSim11 5.30b
With this program you can edit, assemble, simulate and debug 68HC11 programs.
Freeware
tags: THRSim11, 68HC11, simulator, assembler, debugger
Bug Tracker Deluxe 4.12
Bug management software for software developers.
Shareware | $75.00
tags: bug tracking software, defect tracking software, tracking tool
Comm Echo 1.1
Free loopback test tool for serial port,TCP/IP and UDP port communication.
Freeware
tags: serial port, com port, tcp, TCP/IP, udp, rs232, rs232 debug, communication, debug, loopback test
Плагины первой необходимости
Помимо продвинутых плагинов, которые могут использоваться не так уж часто, необходимо также иметь и джентльменский набор на каждый день. Обычно в такой набор включают следующие расширения:
- 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 — отличный дампер процесса со встроенным реконструктором таблицы импорта.
OllyMigrate
Каждый дебаггер имеет как сильные, так и слабые стороны, и у каждого они свои — идеального инструмента нет. В одном удобно обходить антиотладочные приемы, в другом использовать огромный арсенал уже готовых плагинов, а в третьем писать собственные скрипты. С недавних пор стало возможно работать последовательно сразу в 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. Особенности:
— многопоточность и возможность приостанавливать потоки; — перенос настроек софтверных точек останова (сохраняя статус включен/выключен).
Передаем полномочия по дальнейшей отладке Immunity Debugger-у
Настройка графической схемы
Стандартная цветовая схема OllyDbg достаточно скучна и не очень информативна. К ней, конечно, со временем можно привыкнуть, но лучше настроить внешний вид так, чтобы глаз мгновенно ориентировался в ассемблерном листинге. В конце концов от этого зависит продуктивность работы. Настроить цветовую схему можно двумя способами: непосредственно из меню «Опции -> Оформление -> Colours» или через правку файла ollydbg.ini. Ищешь в файле секцию и играешься с настройками цветов по своему желанию. Подробно этот процесс описан на официальном сайте bit.ly/1cGR2zr.
uberstealth
На какие только ухищрения не пойдут разработчики программ, чтобы защитить свое детище от исследования! Особенно такими подарками изобилуют различные упаковщики, хотя и среди обычных программ тоже довольно часто встречаются особи, нашпигованные антиотладочными приемами. Вручную обходить все эти защиты просто заморишься — тут уже одной правкой возвращаемого функцией 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.

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

Как устанавливать плагины?
Для начала необходимо создать в директории программы папку с названием Plugins. Это позволит в дальнейшем избежать замусоривания основной директории, а в случае необходимости без труда отыскать неработоспособный/конфликтный плагин. Далее копируем DLL-файл плагина в созданную директорию, после чего запускаем отладчик и указываем путь к этой папке:
- OllyDBG v1.10: выбираем Options -> Appearance и закладку Directories. В пункте Plugin path указываем путь к папке с плагинами.
- OllyDBG v2.01h: выбираем Options -> Options и раздел Directories. В пункте Plugin directory указываем путь к папке с плагинами.
InjectHookLib
Довольно любопытное расширение, которое позволяет перехватывать системные вызовы из пользовательского режима. Техника перехвата интересна, поэтому рекомендую ознакомиться с ней в блоге автора (bit.ly/OjxUMj для Windows XP, bit.ly/NZW6Ci для Windows 7). Все, что требуется от пользователя, — установить плагин и написать свою DLL-библиотеку, в которой будут реализованы обработчики перехватываемых функций. Как ее реализовать, можно посмотреть по ссылкам или изучить исходный код примера bit.ly/168kcF2, который любезно предоставил автор данного расширения. Такой плагин может пригодиться для решения различных задач, например при анализе вредоносных программ и распаковке.
Инжектим библиотеку для перехвата системных функций из user-mode
DetachMe
Одной из полезных фич, появившихся во второй версии OllyDbg, была функция Detach, которая позволяла «отсоединить» отладчик от исследуемого процесса, чтобы процесс мог дальше самостоятельно работать. К сожалению, в версии 1.10, любимой многими, такой функции нет — можно только присоединиться к исследуемому процессу. Но это можно исправить, поставив плагин DetachMe, который позволяет в любое время отсоединить отлаживаемые программы от OllyDbg и продолжить осуществлять внешний контроль над отладчиком. Кроме того, отключение программных и процессорных точек останова никак не повлияет на соответствующие udd-файлы.
OllyGraph
Одна из фич, которая меня особенно привлекает в IDA Pro, — возможно представить функцию в виде графа. Так намного удобнее анализировать код, сразу становится видно, каким образом мы дошли до того или иного участка, какие условия и как сработали. Плюс можно еще посмотреть граф вызовов, чтобы понять, из каких мест программы вызывается исследуемая функция. К счастью, данная возможность есть теперь и в OllyDbg, надо лишь установить плагин OllyGraph. Он позволяет представить программу в виде блок-схем, схожих с теми, что строятся в IDA Pro. Более того, для визуализации используется тулза wingraph32, входящая в состав иды. Для версии 1.10 есть альтернативный плагин OllyFlow bit.ly/14lNtpb — немного улучшенная версия OllyGraph от того же автора.
Вызываем OllyFlow для построения графа
ЛОГИЧЕСКИЕ ИНСТРУКЦИИ
Далее следуют логические инструкции, принимающие по два операнда, производящие над ними побитовые операции и сохраняющие результат в первый операнд.
AND
Результатом этой операции над двумя битам является 1, если они оба равны 1, и 0 во всех остальных случаях.
- 1 and 1 = 1
- 1 and 0 = 0
- 0 and 1 = 0
- 0 and 0 = 0
Код (Text):
- AND EAX,ECX<

Делаем ECX=00001200, а EAX=3500.
Чтобы сделать эту операцию вручную, нужно перевести оба числа в двоичный вид:
- 1200 в двоичном виде будет равно 01001000000000
- 3500 в двоичном виде будет равно 11010100000000
Применим вышеприведённую таблицу операции AND побитно, например, к последней цифре:

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

Если нажмём F7 в Олли, то увидим, что в ECX находится результат 1000, что эквивалентно 01000000000000 в двоичном виде.
OR
В этой инструкции используется примерно тот же метод, что и в предыдущем, за исключением того, что используется другая таблица.
Получается 1, если один или оба бита равны 1, и 0 во всех остальных случаях.
- 1 or 1 = 1
- 1 or 0 = 1
- 0 or 1 = 1
- 0 or 0 = 0
XOR
Здесь то же самое, только используем таблицу функции XOR.
Получается 1, если один и только один из двух битов равен 1, и 0 во всех остальных случаях.
- 1 xor 1 = 0
- 1 xor 0 = 1
- 0 xor 1 = 1
- 0 xor 0 = 0
NOT
Просто инвертирует значение:
- not 1 = 0
- not 0 = 1
Пример: not 0110 = 1001
Если у нас, например, EAX=1200, что в двоичном виде равно 1001000000000, то все нули превратятся в 1, а все 1 в 0.
Код (Text):
- 00000000000000000001001000000000<
После применения NOT получим
Код (Text):
- 11111111111111111110110111111111<
что в калькуляторе Windows в шестнадцатеричном виде отобразится как FFFFEDFF.

В Олли до нажатия на F7 сделаем EAX равным 1200.
Нажимаем F7.
Видим, что результат тот же самый.
Ок, здесь мы закончим пятую часть «Введения…». Пока подумайте над тем, что узнали в этой главе, а нам ещё предстоит рассмотреть инструкции сравнения, выходов, call и ret.
Шаг за шагом дорога приведёт нас к цели.
Рикардо Нарваха, пер. Aquila
Выполнить до текущей позицииRun to cursor
Если вы находитесь в режиме редактирования кода (то есть работа отладчика не приостановлена), щелкните правой кнопкой мыши строку кода в приложении и выберите команду Выполнить до текущей позиции.When you are editing code (rather than paused in the debugger), right-click a line of code in your app and choose Run to Cursor. Эта команда запускает отладку и задает временную точку останова на текущей строке кода.This command starts debugging and sets a temporary breakpoint on the current line of code.

Если имеются заданные точки останова, отладчик приостанавливается в первой достигнутой точке останова.If you have set breakpoints, the debugger pauses on the first breakpoint that it hits.
Нажимайте клавишу F5, пока не достигнете строки кода, для которой выбрали Выполнить до текущей позиции.Press F5 until you reach the line of code where you selected Run to Cursor.
Эта команда удобна, когда вы редактируете код и хотите быстро задать временную точку останова и одновременно запустить отладчик.This command is useful when you are editing code and want to quickly set a temporary breakpoint and start the debugger at the same time.
Примечание
Вы можете использовать функцию Выполнить до текущей позиции в окне Стек вызовов во время отладки.You can use Run to Cursor in the Call Stack window while you are debugging.
DetachMe
Одной из полезных фич, появившихся во второй версии OllyDbg, была функция Detach, которая позволяла «отсоединить» отладчик от исследуемого процесса, чтобы процесс мог дальше самостоятельно работать. К сожалению, в версии 1.10, любимой многими, такой функции нет — можно только присоединиться к исследуемому процессу. Но это можно исправить, поставив плагин DetachMe, который позволяет в любое время отсоединить отлаживаемые программы от OllyDbg и продолжить осуществлять внешний контроль над отладчиком. Кроме того, отключение программных и процессорных точек останова никак не повлияет на соответствующие udd-файлы.
Отсоединяемся от исследуемого процесса
OllyDbg PDK
Плагинов на все случаи жизни не бывает, поэтому рано или поздно может настать момент, когда придется «шить наряд» для Оли самому, чтобы решить очередную амбициозную задачу. В таком случае тебе понадобится PDK — Plugin Development Kit, который можно скачать с официального сайта bit.ly/18oD7t6.
Ollydbg-backup
Во время работы над очередным бинарником реверсеру приходится добавлять достаточно много своей информации: писать комментарии к отреверсенным функциям, чтобы на следующий день не изучать заново алгоритм их работы и входные параметры, ставить брейкпоинты и так далее. Вся эта служебная информация автоматически сохраняется отладчиком в UDD-файле. Но случается так, что во время падений дебаггера или его очередной переустановки эти файлы теряются. И надо начинать анализ заново. Чтобы избежать такой печальной ситуации, можно воспользоваться плагином ollydbg-backup, который позволяет сделать бэкап этой информации, сохранив ее в CSV-файл, из которого ее можно легко загрузить обратно в отладчик. CSV-файл имеет следующую структуру:
Ollydbg-backup. Бэкап служебной информации в CSV-файл
WWW
Большое количество плагинов для OllyDbg:
- OpenRCE: OllyDbg Plugins bit.ly/h3M05d
- Tuts 4 You: OllyDbg Archive bit.ly/1eDJdr4
Заключение
OllyDbg очень популярный отладчик, плагинов для него существует достаточно много, и про них можно долго рассказывать. Нашей целью не было рассмотреть их все, мы лишь старались подобрать наиболее интересные «наряды» для нашей боевой подруги Оли. Надеюсь, что нам это удалось.
InjectHookLib
Довольно любопытное расширение, которое позволяет перехватывать системные вызовы из пользовательского режима. Техника перехвата интересна, поэтому рекомендую ознакомиться с ней в блоге автора (bit.ly/OjxUMj для Windows XP, bit.ly/NZW6Ci для Windows 7). Все, что требуется от пользователя, — установить плагин и написать свою DLL-библиотеку, в которой будут реализованы обработчики перехватываемых функций. Как ее реализовать, можно посмотреть по ссылкам или изучить исходный код примера bit.ly/168kcF2 , который любезно предоставил автор данного расширения. Такой плагин может пригодиться для решения различных задач, например при анализе вредоносных программ и распаковке.

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

Заключение
OllyDbg очень популярный отладчик, плагинов для него существует достаточно много, и про них можно долго рассказывать. Нашей целью не было рассмотреть их все, мы лишь старались подобрать наиболее интересные «наряды» для нашей боевой подруги Оли. Надеюсь, что нам это удалось.
Песочница
new player
Основы работы с OllyDebug, на примере «лечения» архиватора
Assembler
Сегодня покажу как можно с помощью «Ольки», «вылечить» один известный архиватор. Для этого нам понадобится: OllyDBG, плагин «CommandBar».
Ставим архиватор, через 40 дней некоторое время наблюдаем картину:
Первое что приходит в голову — изменить проверку на наличие лицензии или проверку на время использования программы. Пойдем по легкому пути — ищем WinAPI функцию которая получает настоящее время GetLocalTime. В контекстном меню выбираем

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

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