> For the complete documentation index, see [llms.txt](https://yutewiyof.gitbook.io/intro-rev-ida-pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yutewiyof.gitbook.io/intro-rev-ida-pro/chast-22.md).

# Часть 22

[\[Используемые материалы\]](https://github.com/yutewiyof/intro-rev-ida-pro/tree/e1367e11cc661f3d69c02ae5f733b7dd168bc5ab/.gitbook/assets/files/22.zip)

## РАЗЛИЧАЯ

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

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

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

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

## BINDIFF

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

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGbT5HNFNZ3G6Fen%2F22-01.png?generation=1563215345468745\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGbV_8KY-a29pmOf%2F22-02.png?generation=1563215345080805\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzcrCZ8YIadR7IXs%2F03.png?generation=1563265877190529\&alt=media)

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttzd0FzeMQ16gU_cR%2F04.png?generation=1563265878694298\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzdAcU1zlDXRJMEL%2F05.png?generation=1563265880736722\&alt=media)

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

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzdL5u59iC7mcATa%2F06.png?generation=1563265878639390\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzdVGFdbOCaZS6QH%2F07.png?generation=1563265877667209\&alt=media)

Теперь, я иду в меню **EDIT** → **PLUGINS**.

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGbg1OmYDEeMEyrr%2F22-08.png?generation=1563215344351152\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGbiEI38dVavvpq0%2F22-09.png?generation=1563215344318084\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGbkmoU9mbDabp1l%2F22-10.png?generation=1563215344210134\&alt=media)

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGbmqjgkWqkga3m-%2F22-11.png?generation=1563215344505496\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzeIaEZLPo_QBoPv%2F12.png?generation=1563265878668887\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGbq0W18DmeaSYh0%2F22-13.png?generation=1563215344473548\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzejQ5DcgsxyEwGy%2F14.png?generation=1563265877861998\&alt=media)

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttzex5wOcJqBf3auF%2F15.png?generation=1563265878783807\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzfMsgEC2_dIpJAp%2F16.png?generation=1563265878592315\&alt=media)

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

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGbyQHAdDhTum143%2F22-17.png?generation=1563215345334197\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGc-VUzXxmq9LrOR%2F22-18.png?generation=1563215344234823\&alt=media)

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

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzfsTYfip5ACsRXd%2F19.png?generation=1563265877131765\&alt=media)

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

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

## TURBODIFF

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

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttzg3z6Bt_Mi65vl5%2F20.png?generation=1563265877189204\&alt=media)

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzgEnaNxqwmUzYOh%2F21.png?generation=1563265879605727\&alt=media)

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

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGc7Np7kTfKJ1Gx4%2F22-22.png?generation=1563215344322229\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGc9uYUjonEGIqmb%2F22-23.png?generation=1563215344524052\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGcBLkoZ7QGeHojN%2F22-24.png?generation=1563215344355788\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGcDNe9HMgCxfknH%2F22-25.png?generation=1563215344381750\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzgyHc02vDFnAJKi%2F26.png?generation=1563265878992260\&alt=media)

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGcHHrm2Up9ormVE%2F22-27.png?generation=1563215344273692\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGcJ7Ph-6znBvryU%2F22-28.png?generation=1563215344401742\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzhTBU8-uWMH-t1R%2F29.png?generation=1563265878520176\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGcNcTxSe7nTLsic%2F22-30.png?generation=1563215345424164\&alt=media)

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

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

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

## DIAPHORA

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

<https://github.com/joxeankoret/diaphora>

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGcPaHrTfxeFcvTg%2F22-31.png?generation=1563215345281795\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttzi22F7QSd2Qct4U%2F32.png?generation=1563265877240779\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGcfFEk_ABjvbKPO%2F22-33.png?generation=1563215344863091\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttziIv66Kh5PU84tI%2F34.png?generation=1563265878982148\&alt=media)

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttziSzIKmAXNu6a_S%2F35.png?generation=1563265878710031\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGclOlQ18S9o5TGC%2F22-36.png?generation=1563215344350253\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-Ljttzih30X5keyXiNGk%2F37.png?generation=1563265878395781\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGcq3CVUnEk4LTVs%2F22-38.png?generation=1563215344357541\&alt=media)

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

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGcsfDsWU2mDeSy3%2F22-39.png?generation=1563215344345899\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzjFvx3OG6AKRmkh%2F40.png?generation=1563265880473620\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzjR2S3loKNrNdhf%2F41.png?generation=1563265878375907\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGcyasVlPrdBYG8u%2F22-42.png?generation=1563215344346291\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGd-eLhbA3tcj0ap%2F22-43.png?generation=1563215344237204\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzjxgiuNoXaFhU0G%2F44.png?generation=1563265882695254\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGd3hBRDWUCpaiRp%2F22-45.png?generation=1563215344287672\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzkGlQrf0kTKWp-L%2F46.png?generation=1563265879694394\&alt=media)

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjttkJvbq8Uocl4jWiJ%2F-LjttzkQBKPdLAZafCMD%2F47.png?generation=1563265878463761\&alt=media)

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

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

![](https://333516620-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ljp8Kl9OQ2AqdU_D0G8%2F-LjqtEP2kV1qNtJHVrED%2F-LjqtGd9zJ5PnSiqmDWr%2F22-48.png?generation=1563215344939608\&alt=media)

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

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

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

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

<https://telegram.me/CLSExploits>

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

Автор оригинального текста — Рикардо Нарваха.

Перевод и адаптация на английский язык — IvinsonCLS.

Перевод и адаптация на русский язык — Яша Яшечкин.

Перевод специально для форума системного и низкоуровневого программирования - WASM.IN

22.11.2017

[**Источник: ricardonarvaja.info**](http://ricardonarvaja.info/WEB/IDA%20DESDE%20CERO/CURSO%20DE%20IDA%20TUTES/22-INTRODUCCION%20AL%20REVERSING%20CON%20IDA%20PRO%20DESDE%20CERO.docx)
