Различия в машинном коде. IDA Pro «с нуля» ч.22

Обсудить статью на форуме


Свежая 2020 года подборка видеоуроков, инструментов крэкера, книг и статей - здесь.
РАЗЛИЧАЯ

DIFFER (В дальнейшем — Дифер, прим. Яши) - это программа, которая из двух последовательных версий одного и того же файла, пытается найти различия в функциях, несмотря на изменения и пытается показать нам какие функции были изменены и где.

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

Поскольку мы будем работать с разными ДИФЕРАМИ, мы должны знать, что чем больше и больше было изменений в исполняемом файле, то и работа получается более неприятной, так как ДИФЕР совершает некоторые ошибки при сравнении.

Давайте рассмотрим три наиболее известных ДИФЕРА, которые мы будем использовать в основном для установки и знакомства с ними. Каждый имеет свою сильную и слабую сторону. Иногда, в сложных случаях, придётся использовать более одного ДИФЕРА, для того, чтобы прояснить ситуацию.

Первый ДИФЕР, который мы будем устанавливать, называется BINDIFF.
(Совершенно недавно он стал бесплатным — прим. Яши)

https://www.zynamics.com/software.html

IDA Pro взлом и реверсинг программ


Отсюда его можно загрузить, просто соглашаясь с условиями использования.

IDA Pro взлом и реверсинг программ

Хорошо, также загружаем JAVA, если у нас её нет на нашей машине.

IDA Pro взлом и реверсинг программ

IDA Pro взлом и реверсинг программ

Кажется эта та версия, которая нам нужна. Мы загружаем её и устанавливаем.

IDA Pro взлом и реверсинг программ

Затем я повторяю установку BINDIFF и видно, что проблемы больше нет. Инсталлятор ни на что не жалуется.

У меня всё ещё остались предыдущие исполняемые файлы с упражнениями - уязвимый и неуязвимый. Я открываю как новый неуязвимый или пропатченный файл в ЗАГРУЗЧИКЕ IDA, для того, чтобы она создала IDB файл, если я не сделал этого раньше.

IDA Pro взлом и реверсинг программ

Затем, я открываю уязвимую версию файла.

IDA Pro взлом и реверсинг программ

Теперь, я иду в меню EDITPLUGINS.

IDA Pro взлом и реверсинг программ

и выбираю пункт BINDIFF 4.2 (CTRL + 6).

IDA Pro взлом и реверсинг программ

И нажимаю кнопку DIFF DATABASE и ищу пропатченную версию файла для сравнения с непропатченной.

IDA Pro взлом и реверсинг программ

IDA Pro взлом и реверсинг программ


Как только сравнение будет завершено, IDA покажет мне результаты. Иногда результат неудобно смотреть в столбце, поэтому я могу перетащить и опустить его на панель вкладок.

IDA Pro взлом и реверсинг программ

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

IDA Pro взлом и реверсинг программ

Мы видим, что в таблице есть только одна строка со сходством, меньшим чем 1.

IDA Pro взлом и реверсинг программ

IDA Pro взлом и реверсинг программ


Зеленые блоки говорят о том, что код внутри них схожий. Желтые имеют незначительные изменения. А красные или серые блоки означают, что они новые.

IDA Pro взлом и реверсинг программ

Здесь мы видим изменение. Как мы знаем, если изменить переход JLE на JBE то это поможет избежать ПЕРЕПОЛНЕНИЕ БУФЕРА. Поэтому, если в программе которая у нас есть в двух версиях - уязвимая и пропатченная и смотря на измененные функции мы находим это. Мы будем знать, что нам придется реверсить эту функцию статически, чтобы увидеть действительно ли она уязвима для программы.

Одно из преимуществ BINDIFF над другими состоит в том, что его график интерактивный. Это не просто картинка, плагин имеет вверху поисковую систему.

IDA Pro взлом и реверсинг программ

Она очень полезная, и Вы можете найти адреса и любой текст, который находится на графике.

IDA Pro взлом и реверсинг программ

Мы можем скопировать адрес блока для того, чтобы вставить его в IDA и перейти по этому адресу.

У нас также есть графический обозреватель для навигации по функциям и списку блоков.

IDA Pro взлом и реверсинг программ

Мы можем пометить блок. В меню у нас есть пункты SELECT ANCESTOR или SELECT SUCCESORS для того, чтобы затемнять наши блоки [del camino] внутри функции. Это поможет вернуться оттуда в начало блока. В этом случае это простая функция. Но в больших и сложных функциях находить путь к блоку - очень важно. (На картинки я не вижу этих пунктов, поэтому я мог тут неправильно перевести. Если что, поправьте меня — прим. Яши.)

BINDIFF имеет много хороших примочек, прежде всего в графической части. У него есть некоторые проблемы при сравнении больших программ, но BINDIFF является одним из лучших решений, которое может быть.

TURBODIFF

Это ДИФЕР, созданный моим коллегой Николасом Экономэ из CORE SECURITY. Он будет приложен к данному туториалу. Плагин также может быть загружен с сайта CORE SECURITY, но там находится более ранняя версия, чем та, которую я приложил.

Файл PLW просто копируется в папку PLUGINS где установлена IDA.

IDA Pro взлом и реверсинг программ

IDA Pro взлом и реверсинг программ

Мне придется перезапустить IDA, чтобы плагин заработал.

Как всегда, я загружаю сначала НЕУЗЯВИМУЮ версию файла.

IDA Pro взлом и реверсинг программ

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

IDA Pro взлом и реверсинг программ

Поэтому я делаю эту операцию с первым файлом.

IDA Pro взлом и реверсинг программ

Затем я открываю уязвимый файл и делаю то же самое.

IDA Pro взлом и реверсинг программ

Теперь из уязвимой версии файла я снова вызываю наш плагин.

IDA Pro взлом и реверсинг программ

IDA Pro взлом и реверсинг программ

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

IDA Pro взлом и реверсинг программ

Здесь я могу нажать CTRL + F для того, чтобы начать искать изменения или подозрительные вещи, чтобы увидеть изменения, которые произошли в коде.

IDA Pro взлом и реверсинг программ

Вот одно из них. Делаем двойной щелчок по этой строке.

IDA Pro взлом и реверсинг программ

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

Очевидно графики - это просто картинки и они не интерактивные, но это очень быстрый ДИФЕР. Он действительно самый быстрый. Это очень заметно в больших исполняемых файлах и он не показывает слишком много глупых изменений как BINDIFF, предполагая, что некоторые вещи не так важны, что цениться в большой работе.

Если Вам не нравится форма графиков, Вы можете использовать оба ДИФЕРА одновременно и потом смотреть результаты на графике BINDIFF.

DIAPHORA

DIAPHORA - плагин написанный в PYTHON Джоксеаном Коретом.(Подправьте меня если неправильно — прим. Яши)

https://github.com/joxeankoret/diaphora

IDA Pro взлом и реверсинг программ


Его не нужно устанавливать. Я могу распаковать его в любое место и ему нужен только установленный PYTHON на машине.

IDA Pro взлом и реверсинг программ

Так что мы будем действовать как обычно. Сначала делаем так для пропатченной или неуязвимой версии файла в IDA.

IDA Pro взлом и реверсинг программ

В FILE → SCRIPT FILE откройте поисковик и идите в папку, где мы распаковали DIAPHORA и ищем там файл DIAPHORA.PY.

IDA Pro взлом и реверсинг программ

IDA Pro взлом и реверсинг программ


Как только появится окошко, мы нажимаем OK для того, чтобы экспортировать базу данных в SQL файл.

IDA Pro взлом и реверсинг программ

Когда база готова, мы открываем уязвимый файл в IDA и повторяем те же самые действия. Открываем DIAPHORA.PY и не меняя ничего мы экспортируем базу данных в файл.

IDA Pro взлом и реверсинг программ

Как только мы сделали то же самое в обоих файлах, мы снова открываем DIAPHORA.PY в уязвимой версии файла, но на этот раз делаем так.

IDA Pro взлом и реверсинг программ

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

Видим, что когда мы идем в папку, то кажется что там ничего нет.

IDA Pro взлом и реверсинг программ

Но это происходит из-за фильтра файлов. Мы меняем фильтр на *, чтобы увидеть все файлы.

IDA Pro взлом и реверсинг программ

И мы ищем здесь неуязвимую версию файла.

IDA Pro взлом и реверсинг программ

Я нажимаю OK как на скриншоте.

IDA Pro взлом и реверсинг программ

Мы видим, что есть вкладка BEST MATCHES с которой не остается сомнений, что файлы одинаковые.

IDA Pro взлом и реверсинг программ

На вкладке PARTIAL MATCHES мы видим строки, которые возможно были изменены.

IDA Pro взлом и реверсинг программ

Видно, что программа нашла два изменения. Одна из вещей, которая умеет DIAPHORA состоит в том, что она очень точная. Иногда это хорошо, но иногда, когда у вас есть сотни функций, то Вы хотите, чтобы она работала попроще, а не так точно и не показывала столько бессмысленных изменений.

IDA Pro взлом и реверсинг программ

Этот плагин имеет несколько опций для того, чтобы изображать РАЗЛИЧАЯ.

IDA Pro взлом и реверсинг программ

DIAPHORA очень точная и подробная, но когда Вы видите сто таких функций, то хочется просто взять и вскрыться >:D. Давайте посмотрим вторую опцию DIFF ASSEMBLY IN A GRAPH.

IDA Pro взлом и реверсинг программ

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

Другая опция DIFF PSEUDO CODE использует плагин HEX RAYS, который поставляется вместе с IDA. Плагин старается воссоздать исходный код из исполняемого файла.

IDA Pro взлом и реверсинг программ

Мы видим, что в уязвимой версии файла, который мы отреверсили вручную и определили, существует буфер из 16 байт, эта переменная BUF определяется как буфер. Но в неуязвимой версии, поскольку мы не сделали ту же работу, плагин не обнаруживает его, а просто помечает буфер как переменную типа CHAR, ничего более. Плагин также показывает, что переменная в уязвимой версии – ЗНАКОВАЯ, а в неуязвимой версии, не говорит ничего про тип переменной, что предполагает, что это переменная имеет БЕЗЗНАКОВЫЙ тип.

Другая характеристика DIAPHORA состоит в том, что она самая медленная (она написана на PYTHON, а не на C как TURBODIFF) и в больших исполняемых файлах анализ и сравнение очень долгое.

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

Это упражнение открыто обсуждается как в списке рассылки CRACKSLATINOS, так и в нашей телеграмм группе.

https://telegram.me/CLSExploits

До 23-тей части, где будет представлено решение этого упражнения.


Автор текста: Рикардо Нарваха - Ricardo Narvaja (@ricnar456)
Перевод на английский: IvinsonCLS (@IvinsonCLS)
Перевод на русский с испанского+английского: Яша_Добрый_Хакер(Ростовский фанат Нарвахи).
22.11.2017
Версия 1.0

Обсуждение статьи: Различия в машинном коде. IDA Pro «с нуля» ч.22 >>>


При перепечатке ссылка на https://exelab.ru обязательна.



Видеокурс ВЗЛОМ