Ollydbg — x 64-bit download
Содержание:
- Using Breakpoints
- Лаборатория для исследований
- Removing One Letter From the Message
- DetachMe
- Анализ семпла malware01
- Как устанавливать плагины?
- OllyMigrate
- Настройка графической схемы
- Ollydbg-backup
- OllyDumpEx
- ИНСТРУКЦИИ
- Анализ семпла malware03
- Части главного окна
- Подключение плагинов в OllyDbg
- Наиболее полезные клавиши в OllyDbg следующие:
- Overview
- Дизассемблеры
- Запуск программы
- OllySocketTrace
- Finding the «login as» Code
Using Breakpoints
In the «Text strings referenced in putty:.text»
window,
right-click again, and click
«Search text«. In the
«Enter text to search for» box,
click OK.
The instruction at 00417053 appears again.
Right-click this instruction and
click «Toggle breakpoint«,
as shown below.
The address turns red,
as shown below, to indicate that
there’s a breakpoint here.
Right-click again, and click
«Search next«. The instruction
at address 0041CB6E appears.
Right-click it and
click «Toggle breakpoint«.
The address turns red,
as shown below.
In Ollydbg, from the menu bar,
click Debug, Restart.
A box pops up warning you that
«Process ‘putty’ is active».
Click Yes.
In Ollydbg, from the menu bar,
click Debug, Run.
A Putty window opens. Bring it to the
front, as shown below.
Click in the Putty window.
In the «Host Name (or IP address)» box, type
Open
A black window opens and closes
quickly, and the program
stops,
as shown below.
The program stopped at instruction
0041CB6E, as shown in the image above.
We’ll use this instruction to hijack the
program’s execution.
Лаборатория для исследований
Как и в прошлый раз, все эксперименты по анализу малвари мы будем выполнять в нашей импровизированной лаборатории — виртуальной машине с предустановленной Windows XP. Набор инструментов, в принципе, всегда один и тот же, разница лишь в том, как часто мы будем применять тот или иной.
Обpазцы исследуемой малвари прилагаются к статье. Помни, при распaковке архива с лабами антивирус будет распознавать файлы соoтветствующим образом. Не забывай, что бэкап — лучший друг админа! До и после всех экспeриментов не забывай делать резервные копии, тем более это так легко с виртуальными машинами: раз, два — и снапшот готов! А это потом сохранит тебе кучу времени, поверь, проверено на практике!
Removing One Letter From the Message
0041CB6EAssemble
An «Assemble at 0041CB6E» box appears,
as shown below.
This shows the command at this location. It’s
a PUSH instruction, placing the address
467C7C onto the stack. That address
points to the letter «l» in the ASCII string
«login as: «, as shown on the right side
of the instruction line, outlined in green
in the image below.
In the «Assemble at 0041CB6E» box, change
the last character to D,
as shown below. This will move the
pointer from the «l» to the «o» in the
string «login as: «.
Click the Assemble button.
Click the Cancel button.
The message on the right now says
«ogin as: «,
as shown below.
DetachMe
Одной из полезных фич, появившихся во второй версии OllyDbg, была функция Detach, которая позволяла «отсоединить» отладчик от исследуемого процесса, чтобы процесс мог дальше самостоятельно работать. К сожалению, в версии 1.10, любимой многими, такой функции нет — можно только присоединиться к исследуемому процессу. Но это можно исправить, поставив плагин DetachMe, который позволяет в любое время отсоединить отлаживаемые программы от OllyDbg и продолжить осуществлять внешний контроль над отладчиком. Кроме того, отключение программных и процессорных точек останова никак не повлияет на соответствующие udd-файлы.
Анализ семпла malware01
На примере этого семпла мы разберем базовый алгоритм первичного анализа файла, поиска OEP, оригинального (незапакованного) кода, после чего файл можно будет легко сдампить на жесткий диск и, к примеру, открыть в IDA Pro для просмотра таблицы импорта всех функций.
Используемые инструменты:
- PEiD (DiE);
- OllyDbg v2;
- IDA Pro.
Первым делом запускаем анализатор PEiD или DiE.
Результат сигнатурного анализа PE-анализатора
Итак, видим, что перед нами Win32-пpиложение, любезно запакованное PECompact, а сам бинарник скомпилирован Visual C++.
Идем дальше, грузим OllyDbg и закидываем в него наш семпл. Если дебаггер будет ругаться, потому что файл не опознан из-за упаковщика, — не обращаем внимания, щелкаем ОK и загружаем файл.
Окно OllyDbg после первичной загрузки семпла
Наш курсор встает на адресе 00405139 PUSHAD. Справа в окне можем просмотреть текущее значение регистров. Дальше ставим точку останова hardware on access на регистре ESP, после чего строка окрашивается в красный цвет. Жмем несколько раз F9, чтобы запустить программу, после чего она наткнется на наш брейк-пойнт и остановится. Что мы видим? Курсор остановился на адресе 0045013А CALL malware01.00405141, соответственно, это наш глaвный CALL.
Окно OllyDbg после установки точки останова
В правом окне регистров на значении ESP 0012FfA0 щелкаем правой клавишей и выбираем Follow Dump. После этого переключаемся в нижнее окно, где содержится Hex dump, и, выделив несколько элементов, также щелкаем правой клавишей на Breakpoint → memory on access. Запускаем выполнение программы F9. Ставим еще один брейк-пойнт: Breakpoint → Hardware on access → Dword. Далее выполнение кода останавливается на точке POPAD.
Окно OllyDbg в точке останoва POPAD
Если вернуться на шаг назад, то мы увидим распакованный оригинальный код, однако он будет в нечитаемом для нас виде.
Окно OllyDbg с нечитаемым кодом
Чтобы это исправить, жмем Ctrl + A и видим, как на глазах строки преобразуются в понятный набор инструкций.
Преобразованный код после нажатия Ctrl + A
После этого мы дампим процесс, открываем Plugins → OllyDmp → Dump → Debugged process, в открывшемся окне обязательно щелкаем Get EIP as OEP и потом кнопку Dump.
Окно OllyDbg с опциями дампа
В итоге получаем распакованный файл, который теперь легко можно закинуть в IDA Pro.
Распакованный файл загружен в IDA Pro
Как устанавливать плагины?
Для начала необходимо создать в директории программы папку с названием Plugins. Это позволит в дальнейшем избежать замусоривания основной директории, а в случае необходимости без труда отыскать неработоспособный/конфликтный плагин. Далее копируем DLL-файл плагина в созданную директорию, после чего запускаем отладчик и указываем путь к этой папке:
- OllyDBG v1.10: выбираем Options -> Appearance и закладку Directories. В пункте Plugin path указываем путь к папке с плагинами.
- OllyDBG v2.01h: выбираем Options -> Options и раздел Directories. В пункте Plugin directory указываем путь к папке с плагинами.
Перезапускаем отладчик и ищем появившийся пункт в меню Plugins.
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 .
Ollydbg-backup
Во время работы над очередным бинарником реверсеру приходится добавлять достаточно много своей информации: писать комментарии к отреверсенным функциям, чтобы на следующий день не изучать заново алгоритм их работы и входные параметры, ставить брейкпоинты и так далее. Вся эта служебная информация автоматически сохраняется отладчиком в UDD-файле. Но случается так, что во время падений дебаггера или его очередной переустановки эти файлы теряются. И надо начинать анализ заново. Чтобы избежать такой печальной ситуации, можно воспользоваться плагином ollydbg-backup, который позволяет сделать бэкап этой информации, сохранив ее в CSV-файл, из которого ее можно легко загрузить обратно в отладчик. CSV-файл имеет следующую структуру:
RVA,label,comment
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, чтобы её усвоить, а в дальнейшем, после приобретения уверенности в своих навыках, перейти к возможностям, которые они дают.
Рассмотрев в 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.
Анализ семпла malware03
А что же делать, если нам попалась малварь, которая запакована еще неизвестным пакером? Конечно, общий алгoритм действий сохраняется, но мыслить придется нестандартно, искать новые подходы и экспериментировать. Ниже мы разберем несложный пример того, как нужно проводить анализ, когда файл запакован тем, что в андеграунде называется hacker-packer.
Используемые инструменты:
- PEiD;
- OllyDbg.
Первым делом запускаем анализаторы PEiD/DiE/Pe-Scan, и что мы видим? Файл чем-то запакован :). Несмотря на то что PEiD все-таки распознал его сигнатуру, это нестандартный упаковщик, а в сигнатуры он попал потому, что уже устарел.
Результаты анализа PEiD
Анализ в DiE и пoпытка вычислить пакер в Pe-Scan |
Грузим файл в OllyDbg, открываем диалог поиска по Ctrl-G, пишем VirtualAlloc, жмем OK и попадаем на нужную нам строку кода, на которой устанавливаем брейк-пойнт по F2.
Окно OllyDbg после поиска VirtualAlloc
Теперь смело по F9 запускаем программу, пока она не остановится на брейк-пойнте. В правом окне со значением регистров на значении EAX правый щелчок мышью и выбираем Follow in Dump.
Окно OllyDbg с регистрами при выполнении дампа
Теперь в нижнее окно, выделяем несколько байтов и снова щелкаем правой кнопкой Breakpoint → Hardware, write → Byte, после чего снова запускаем программу клавишей F9.
Выделяем байты в памяти и ставим новый брейк-пойнт
Повторяем это до тех пор, пока снова не упремся в точку останова. Что мы видим? Неужели это нужная нам PE-секция?
Окно OllyDbg после поиска OEP
Все же нет, потому что семпл многократно запакован, соответственно, у него несколько точек загрузки пакера. Повторяем запуск по F9 еще нeсколько раз. Для того чтобы добраться до оригинальной OEP, нужно каждый раз ставить новые брейк-пойнты, выбирать в секции регистров Follow in Dump. Наконец мы попадем на строчку POPAD и увидим оригинальный код.
Строка POPAD после многократного поиска
Теперь все, что нам осталось, — это сдампить образ из памяти в файл на жесткий диск, выбрав в нижнем окне несколько байтов и щелкнув правой кнопкой BackUp → Save data to file.
Части главного окна
Ок, всё готово к запуску. Кликаем на 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
OllyDbg позволяет подключать плагины, которые могут оказаться полезными для решения той или иной задачи. Пока мы ограничимся подключением плагина COMMAND BAR, чтобы научиться как это делать.
Скачиваем данный плагин отсюда
После этого распаковываем плагин и смотрим содержимое папки, где это было сделано:
Прежде всего нужно создать папку для плагинов. Я создам её на C:/ и назову PLUGINS.
Разумеется, плагины могут находиться где угодно, но мне нравится размещать всё на C. Как бы то ни было, теперь мы должны сконфигурировать OllyDbg, чтобы она распознавала эту папку как местонахождение всех плагинов.
Для этого идём в OPTIONS->APPEARANCE.
И в открывшемся окне открываем вкладку DIRECTORIES.
Видим, что в качестве пути к плагинам указана директория, где находится сам OllyDbg.exe, и можно было бы помещать плагины туда, но мне нравится держать их отдельно, и тогда нажимаем на PLAGIN PATH->BROWSE, чтобы найти созданную нами папку.
Выбираем папку PLUGINS и сохраняем изменения.
То есть нужно перезапустить Олли, чтобы она признала новую папку с плагинам, но сначала следует скопировать в последнюю скачанный плагин.
Копируем всё содержимое архива в папку PLUGINS.
Теперь все файлы плагина «Command Bar» находятся в папке PLUGINS, в неё же следует помещать и остальные (зачастую можно копировать не все файлы в архиве, а только dll).
Теперь закрываем OllyDbg, если она всё ещё была закрыта, и запускаем по новой. Видим, что в меню PLUGINS появился COMMAND BAR и его опции.
В нижней части OllyDbg видим установленный COMMAND BAR.
Это текстовое поле для ввода команд, которые нам могут пригодиться во многих случаях, и позднее мы увидим их применение, а пока важно научиться подключать плагины. Чтобы деинсталлировать PLUGIN достаточно просто стереть соответствующую dll из папки PLUGINS и перезапустить OllyDbg, и плагин исчезнет
Вместе с тем, благоразумно всегда держать COMMAND BAR включённым
Чтобы деинсталлировать 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
Overview
OllyDumpEx = OllyDump + PE Dumper — obsoleted + useful features
- Various debuggers supported
- Select to dump debugee exe, loaded dll or non-listed module
- Search PE File from memory
- Multiple Dump mode. Rebuild for typical PE dump, Binary for PE Carving
- PE32+ supported (Search and Binary Dump mode only available on 32bit debugger)
- Native 64bit process supported (IDA Pro, WinDbg and x64dbg)
- ELF supported (both of 32bit and 64bit)
- Standalone version available
- Dump any address space as section even if not in original section header
- Auto calculate many parameters (RawSize, RawOffset, VirtualOffset, …)
Дизассемблеры
Сложно представить себе реверс без инструментов статического анализа кода. На сегодняшний день дела с дизассемблерами обстоят немногим лучше, чем с отладчиками, но все-таки можно выделить фаворитов в этой области. Признанный стандарт антивирусных лабораторий — это дизассемблер IDA Pro. Второе место по востребованности занимает фреймворк для реверс-инжиниринга Radare2 (хотя многие считают, что Radare2 не уступает IDA).
IDA Disassembler
Существует две версии IDA — платная (Pro) и бесплатная (Starter). Бесплатная версия урезана по количеству поддерживаемых архитектур — она понимает только x86, кроме того, она не поддерживает плагины. Платная версия лишена подобных ограничений: она поддерживает внушительное количество архитектур процессоров и позволяет подключать расширения.
В IDA есть встроенный отладчик, весьма простенький по набору функций, но к его самобытному интерфейсу придется приноровиться. Также IDA может быть укомплектован дополнением Hex-Rays — декомпилятором исходного кода приложения в код на C. Это полезнейшее дополнение, которое значительно ускоряет анализ программы.
В целом IDA — мощнейший и прекрасно отполированный инструмент, который развивался много лет. Жаль только, что профессиональная версия стоит в районе 500–1000 долларов в зависимости от вида лицензии и кому попало не продается. Кто попало в результате выкручивается как может.
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Запуск программы
Если вы посмотрите в левый верхний угол Олли вы увидите желтое окно, на котором написано “Paused”. Это говорит нам о том, что выполнение программы на данный момент приостановлено (на точке входа в данном случае) и вы можете сделать необходимые вам действия. Так давайте что-нибудь сделаем! Нажмите клавишу F9 (либо кликните на “Run”). После этого наша программа начнет выполнение и высветит диалоговое окно. Это окно может отобразится позади окна Олли, так что если вы его вдруг не видите – попробуйте свернуть отладчик.
В том окне, где раньше было написано “Paused” теперь написано “Runned”. Это означает, что приложение на данный момент запущено, но запущено внутри Олли, что дает нам возможность взаимодействовать с этой программой. Давайте посмотрим, как это происходит. Если вы случайно закроете окно нашей программы, что бы загрузить ее снова, – вернитесь к отладчику и нажмите комбинацию клавиш ctrl-F2 (или кликните на кнопку Restart из меню Debug). Так вы снова попадете на точку входа приложения и теперь можете снова его запустить.
Теперь попробуйте следующее: когда программа запущена, нажмите на кнопу паузы в Олли (или клавишу F2, или кликните Debug-Pause). Это остановит выполнение программы в текущем месте исполнения
Если вы в этот момент обратите внимание на окно программы, вы увидите что оно как бы заморожено (либо оно может вообще не отображаться). Это так, потому что когда программа на паузе – ее окно не обновляется
Теперь нажмите F9 снова и приложение снова станет активным. Если что-то пойдет не так– вы всегда можете перезагрузить приложение, нажав комбинацию клавиш ctrl-F2, либо кликнув на Debug-Restart. И теперь, после перезагрузки, можете запускать программу снова.
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.
Finding the «login as» Code
OK
In Ollydbg, from the menu bar,
click Debug, Restart.
In Ollydbg, in the «Assembly Code»
pane, right-click. Point to
«Search for«. Click
«All referenced text strings«,
as shown below.
A
«Text strings referenced in putty:.text»
window opens, showing all the
strings in the program.
To make this text easier to read,
right-click, point to
Appearance,
Font, and click
«OEM Fixed Font«.
Right-click
in that window, and click
«Search for text«,
as shown below.
In the «Enter text to search for» box,
type
Entire scope
Click OK.
Ollydbg finds the ASCII string «login as»,
and the instruction that uses it,
as shown below. This instruction
is at address 00417053.
Right-click again, and click
«Search next«.
Ollydbg finds another line of code
that uses this string,
as shown below. This instruction
is at address 0041CB6E.
Right-click again, and click
«Search next«.
A message appears at the bottom of the
window saying «Item not found».
There are only two commands in the
program that use this string.