Подготовка к анализу загрузочного файла – тема отдельного разговора. Отладчики – это программные средства, предназначенные для контроля выполнения программ. Отладчики позволяют приостановить выполнение программы в некоторой точке, изменить значение переменных и даже, в некоторых случаях, внести изменения в машинный код программы на лету в процессе ее выполнения. К сожалению, возможность выполнения отладчиком подобных действий зависит от включения в выполнимый код отладочной информации, прежде всего таблицы соответствия символов (для большинства загрузочных программ это не выполняется). Если отладочной информации в выполнимом коде нет, то отладчик может выполнить некоторые функции, хотя большую часть работы по отладке программ приходится выполнять вручную, например при указании точек прерывания вместо имен приходится задавать адреса памяти.
Декомпилятор (или дизассемблер) – программа, которая преобразует двоичный код программ в исходный текст, написанный на одном из языков программирования, чаще всего – ассемблере. Некоторые дизассемблеры могут представить исходный текст на простом языке C. В процессе трансляции большая часть информации об исходном тексте программы теряется, например имена переменных, поэтому декомпилятор пытается восстановить исходный текст программы настолько, насколько это возможно. Если при декомпиляции таблица соответствия имен была не найдена, то зачастую декомпилятор присваивает переменным имена, составленные из плохо воспринимаемой последовательности цифр и букв.
Основы дизассемблирования
Проблема несколько упрощается, если исследователь в состоянии разобраться с ассемблерным кодом, генерируемым декомпилятором. В этом случае декомпилятор особенно полезен. Рассмотрим пример результатов работы декомпилятора.
Среди коммерческих декомпиляторов для Windows хорошая репутация у IDA Pro компании DataRescue (пример работы декомпилятора показан на рис. 4.1). IDA Pro может декомпилировать программный код многих процессоров, включая виртуальную машину Java.
Рис. 4.1. Пример работы IDA Pro
На рисунке показан пример применения декомпилятора IDA Pro для дизассемблирования программы pbrush.exe (Paintbrush). IDA Pro нашел секцию внешних функций, используемых программой pbrush.exe.
Если программа выполняется под управлением операционной системы, которая поддерживает разделяемые библиотеки (например, под управлением операционных систем Windows или UNIX), то она содержит список необходимых ей библиотек. Обычно этот список представлен в удобочитаемом виде, который легко обнаружить при экспертизе выполняемого кода. Для выполнения программ операционной системе также требуется этот список, поэтому она загружает его в память. В большинстве случаев это позволяет декомпилятору вставить список в двоичный код программы, сделав его более понятным.
Чаще всего таблица соответствия имен pbrush.exe недоступна, поэтому в большей части сгенерированного декомпилятором ассемблерного кода отсутствуют имена.
Знакомство с дизассемблером (ОЧЕНЬ СЛОЖНО)
Оценочную версию IDA Pro, пригодную для первоначального знакомства с программой, можно загрузить с www.datarescue.com/idabase/ida.htm. SoftICE компании Numega – другой популярный отладчик. Дополнительные сведения о нем можно найти по адресу www.compuware.com/products/numega/drivercentral/.
Для сравнения была написана небольшая программа на языке C (классическая небольшая программа, выводящая строку «Hello World»). Для отладки использовался отладчик GNU (GDB). Код программы представлен ниже:
printf (“Hello Worldn”);
Источник: mydocx.ru
Знакомство с дизассемблером. IDA Pro «с нуля» ч.1
Идея этих серий учебных пособий является обновить наш оригинальный курс по реверсингу, но используя IDA PRO. Будем обучаться использовать ее с нуля и работать будем с последней версией Windows. В моем случае, я использую Windows 10 Anniversary Update x64 со всеми патчами, вплоть до 29 октября 2016.
ПОЧЕМУ ИМЕННО IDA PRO
Потому что, пока OllyDBG просто 32-х битный отладчик режима пользователя, а IDA PRO целая программа для реверсинга, которая может быть использована в 32/64 системах, как и отладчик и как дизассемблер. Она позволяет делать статический реверс, который не может быть выполнен в OllyDBG и которая обучает как использовать ее, не смотря на сложный процесс обучения, она позволяет работать в Windows, Linux или Mac как внутри системы, так и удаленно в следующих операционных системах.
Для того, чтобы иметь представление о поддерживаемых процессорах, здесь есть список.
Как мы можем видеть, обучение как использовать IDA позволяет нам улучшить рабочее окружение, мы сфокусируемся на 32/64 разрядной Windows в пользовательском режиме и иногда в режиме ядра. Это позволит нам легче адаптироваться к любому использованию .
Здесь мы увидим большинство вещей, которые мы видели в Введение в отладку с нуля с использованием OllyDBG, но сейчас будет IDA. Попытаемся идти дальше с самого начала.
В этом курсе будет всё: статический и динамический реверс, крякме, будем учиться исследовать эксплоиты и распаковку. Я постараюсь писать о какой-нибудь важной детали с нуля.
Нам нужна IDA PRO. Проблема в том, что это коммерческая программа и мы должны платить за нее и она того стоит. Мы не можем и не будем распространять её, но вы можете поискать утекшие в сеть версии через Гугл по такому запросу: IDA PRO 6.8 + HEXRAYS. Эта версия с которой мы будем работать. Последняя же версия — IDA 6.95.160808 ( 08 Августа 2016).
Когда мы скачали, можем увидеть zip файлы и такой установщик
idapronw_hexarmw_hexx64w_hexx86w_150413_cb5d8b3937 caf856aaae75 0455d2b4ae
Пароль на установку хранится в файле install_pass.txt.
Также будет установлен Python 2.7.6. Он используется, чтобы избежать проблем используя другие версии IDA. Если вы установили Питон самостоятельно отдельно, он должен быть той же версии, что использует IDA.
После установки, загрузим крэкме Cruehead, он идет вместе с этим туториалом.
Так как это 32-х битный исполняемый файл, мы загрузим его в IDA для 32-х битных
файлов напрямую.
Если мы запустим крэкме вне IDA, мы увидим через Диспетчер Задач, что это 32-х битный процесс. Если мы хотим знать 32-х битный это или 64-х битный файл, без запуска, мы можем использовать 16-тиричный редактор. Например такой.
https://mh-nexus.de/en/downloads.php?product=HxD Загрузите и установите английскую версию
http://mh-nexus.de/downloads/HxDSetupES.zip
Самый простой способ — это открыть файл в хекс-редакторе, чтобы узнать какой он.
То, что мы видим — это Snipping Tools. И это 64-х битное приложение. Мы видим, что после слова PE есть следующие значения -> PE..d†
Наш крэкми — 32-х битный, после слова PE видим -> PE..L
Поэтому мы уже знаем какой мы файл имеем, чтобы загрузить его с использованием IDA 32. Когда IDA покажет окно QUICK START, мы выберем NEW, чтобы открыть новый файл, найдем наш крэкми и выберем его.
Сейчас не будем трогать настройки, потому что IDA правильно определила версию файла и мы можем нажать OK.
Если дальше нажмем YES на PROXIMITY VIEW, отобразиться дерево просмотра программы.
Чтобы перейти к графическому режиму или неграфическому — режиму инструкций нужно нажать пробел.
Также в OPTIONS — DEBUGGING OPTIONS — LINE PREFIXES мы можем добавить адреса в переднюю часть при графическом представлении.
Когда вы открываете исполняемый файл, первое, что открывается, это окно дизассемблера, которое называется LOADER, оно не запускает программу, а только ее анализирует для реверсинга и создает файл idb или базу данных (database).
Чтобы отладить программу мы должны выбрать среди всех доступных отладчиков включенных в IDA и запустить его в Режиме отладки, который мы разберем позже
функции дизассемблер ida
На этом шаге мы рассмотрим основные возможности дизассемблера IDA PRO.
Это один из самых мощных дизассемблеров. Работая над текстом дизассемблируемой программы, вы можете называть своими именами метки и процедуры, давать свои комментарии так, что дизассемблированный текст становится в конце концов ясным и понятным. Имена и комментарии сохраняются в отдельном файле и при последующем запуске, естественно, восстанавливаются. Внешний вид дизассемблера IDA PRO показан на рисунке 1.
Рассмотрим некоторые возможности этого дизассемблера.
- Переименование процедур и меток в программе. При дизассемблировании IDA PRO дает свои названия процедурам и меткам. Вы можете ввести свои названия, тем самым сделав программу более понятной. Все изменения, сделанные в тексте, сохраняются в отдельном файле и могут быть восстановлены при повторном запуске.
- Распознавание библиотечных и API-функций. Дизассемблер не просто распознает эти функции, но и комментирует параметры этих функций. При помощи контекстного меню или двойного щелчка мышью вы можете перейти по команде JMP или по команде CALL в указанное место программы и так продолжать осуществлять переходы любое количество раз. Возвратиться на любое количество шагов можно, используя кнопку «стрелка» на панели инструментов. При помощи комбинации клавиш Shift+Insert, Insert, а также пунктов меню Edit в любом месте программы можно записать комментарий. Комментарий, как и введенные названия меток, запоминается в отдельном файле. В комментарии может присутствовать адрес строки программы или имя метки. Если сделать двойной щелчок мышью по адресу или метке, то мы как раз и очутимся на этом месте.
- Сворачивание и разворачивание процедур. При помощи клавиши «минус» на дополнительной клавиатуре можно свернуть процедуру, а при помощи клавиши «плюс» развернуть процедуру. Представление процедур в свернутом виде позволяет представить программу в более компактном и более понятном виде.
- IDA PRO весьма аккуратно распознает не только код, но и данные. На рисунке 2 показана дизассемблирования часть программы, содержащей данные.
- Создание и выполнение командных файлов. Язык командных файлов очень близок к языку С. Приведем текст только одного такого командного файла с именем functest.idc, содержащийся в пакете IDA PRO.
//
// This example shows how to get list of functions.
//
#include
static main() auto ea,x;
for ( ea=NextFunction(0); ea != BADADDR; ea=NextFunction(ea) ) Message(«Function at %08lX: %s»,ea,GetFunctionName(ea));
x = GetFunctionFlags(ea);
if ( x Noret»);
if ( x Far»);
Message(«n»);
>
ea = ChooseFunction(«Please choose a function»);
Message(«The user chose function at %08lXn»,ea);
>
Прокомментируем приведенную программу. Как легко догадаться, организация цикла и условные конструкции имеют в точности тот же синтаксис, что и в языке С. Главное здесь — понять смысл используемых библиотечных функций. Легко видеть, что функция Message просто выводит строку в окно сообщений, которое находится под основным окном.
Функция ChooseFunction вызывает окно, которое вызывается также из меню Jump to Function. Функция GetFunctionFlags возвращает информацию об указанной дизассемблированной функции. Наконец функция NextFunction осуществляет переход на следующую дизассемблированную функцию, возвращая также ее адрес. Аргументом функции NextFunction является адрес дизассемблированной функции, от которой осуществляется переход на следующую дизассемблированную функцию.
Программа IDA PRO осуществляет дизассемблирование модулей самых различных форматов: OBJ, EXE, DLL, VXD, ZIP, NLM и др.
Функциональность IDA PRO может быть значительно усилена посредством подключаемых модулей — plugin. Подключаемые модули пишутся на языке C++ и имеют структуру РЕ-модулей. Подключение модулей осуществляется через горячие клавиши или через пункты меню Edit | Plugins. Подключаемые модули находятся в специальном каталоге Plugins, где находится и файл конфигурации, где указаны эти модули.
Еще одна приятная особенность дизассемблера — он создает ассемблерный файл, с которым затем можно работать уже в текстовом режиме.
Источник: skachivaem.ru