Ida руководство пользователя

Введение в реверсинг с нуля используя IDA PRO. Часть 1

Дата публикации 12 фев 2017

| Редактировалось 2 дек 2018

Приветствуя тебя, Гость.
Если тебе не очень понравится данный перевод, хочу сказать, что дальше всё становится лучше. Уже сейчас ты можешь открыть последние главы, например №24 или №25 и увидеть, что всё читается по другому. Как только курс будет переведён и закончен, я вернусь к первым главам и переделаю их.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ВВЕДЕНИЕ В РЕВЕРСИНГ С НУЛЯ ИСПОЛЬЗУЯ IDA PRO

Идея этих серий учебных пособий является обновить наш оригинальный курс по реверсингу, но используя IDA PRO. Будем обучаться использовать ее с нуля и работать будем с последней версией Windows. В моем случае, я использую Windows 10 Anniversary Update x64 со всеми патчами, вплоть до 29 октября 2016.

ПОЧЕМУ ИМЕННО IDA PRO

Потому что, пока OllyDBG просто 32-х битный отладчик режима пользователя, а IDA PRO целая программа для реверсинга, которая может быть использована в 32/64 системах, как и отладчик и как дизассемблер. Она позволяет делать статический реверс, который не может быть выполнен в OllyDBG и которая обучает как использовать ее, не смотря на сложный процесс обучения, она позволяет работать в Windows, Linux или Mac как внутри системы, так и удаленно в следующих операционных системах.

1.png

Для того, чтобы иметь представление о поддерживаемых процессорах, здесь есть список.

2.png

Как мы можем видеть, обучение как использовать IDA позволяет нам улучшить рабочее окружение, мы сфокусируемся на 32/64 разрядной Windows в пользовательском режиме и иногда в режиме ядра. Это позволит нам легче адаптироваться к любому использованию .

Здесь мы увидим большинство вещей, которые мы видели в Введение в отладку с нуля с использованием OllyDBG, но сейчас будет IDA. Попытаемся идти дальше с самого начала.

В этом курсе будет всё: статический и динамический реверс, крякме, будем учиться исследовать эксплоиты и распаковку. Я постараюсь писать о какой-нибудь важной детали с нуля.

НАЧАЛО

Нам нужна IDA PRO. Проблема в том, что это коммерческая программа и мы должны платить за нее и она того стоит. Мы не можем и не будем распространять её, но вы можете поискать утекшие в сеть версии через Гугл по такому запросу: IDA PRO 6.8 + HEXRAYS. Эта версия с которой мы будем работать. Последняя же версия — IDA 6.95.160808 ( 08 Августа 2016).

3.png

Когда мы скачали, можем увидеть zip файлы и такой установщик

idapronw_hexarmw_hexx64w_hexx86w_150413_cb5d8b3937caf856aaae75 0455d2b4ae

Пароль на установку хранится в файле install_pass.txt.

Также будет установлен Python 2.7.6. Он используется, чтобы избежать проблем используя другие версии IDA. Если вы установили Питон самостоятельно отдельно, он должен быть той же версии, что использует IDA.

4.png

После установки, загрузим крэкме Cruehead, он идет вместе с этим туториалом.

5.png

Так как это 32-х битный исполняемый файл, мы загрузим его в IDA для 32-х битных
файлов напрямую.

6.png

Если мы запустим крэкме вне IDA, мы увидим через Диспетчер Задач, что это 32-х битный процесс. Если мы хотим знать 32-х битный это или 64-х битный файл, без запуска, мы можем использовать 16-тиричный редактор. Например такой.

Загрузите и установите английскую версию

Самый простой способ — это открыть файл в хекс-редакторе, чтобы узнать какой он.

7.png

То, что мы видим — это Snipping Tools. И это 64-х битное приложение. Мы видим, что после слова PE есть следующие значения -> PE..d†

Наш крэкми — 32-х битный, после слова PE видим -> PE..L

8.png

Поэтому мы уже знаем какой мы файл имеем, чтобы загрузить его с использованием IDA 32. Когда IDA покажет окно QUICK START, мы выберем NEW, чтобы открыть новый файл, найдем наш крэкми и выберем его.

9.png

Сейчас не будем трогать настройки, потому что IDA правильно определила версию файла и мы можем нажать OK.

Если дальше нажмем YES на PROXIMITY VIEW, отобразиться дерево просмотра программы.

10.png

Чтобы перейти к графическому режиму или неграфическому — режиму инструкций нужно нажать пробел.

10.png

11.png

Также в OPTIONS — DEBUGGING OPTIONS — LINE PREFIXES мы можем добавить адреса в переднюю часть при графическом представлении.

Когда вы открываете исполняемый файл, первое, что открывается, это окно дизассемблера, которое называется LOADER, оно не запускает программу, а только ее анализирует для реверсинга и создает файл idb или базу данных (database).

Чтобы отладить программу мы должны выбрать среди всех доступных отладчиков включенных в IDA и запустить его в Режиме отладки, который мы разберем позже

Мы видим, что многие опции программы представлены в виде вкладок, в меню VIEW — OPEN SUBVIEW можно выбрать те вкладки, которые вам нравятся или нужны, чтобы не были открыты все.

12.png

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

13.png

То же происходит и в конце, там мы находим начало дизасма, в этом случае инструкция соответствующая 401000 — PUSH 0

В IDA есть возможность настроить интерфейс по умолчанию отдельно для LOADER и для DEBUGGER.

Как только вы привыкнете, например, в LOADER, наиболее часто используемые окна и вкладки можно сохранить, перейдя в WINDOWS-SAVE DESKTOP и отметив «по умолчанию», то же самое можно сделать для режима дебаггера и изменить настройку по умолчанию.

14.png

В любой из вкладок IDA, где есть такие списки, как FUNCTIONS, STRINGS, NAMES можно с помощью CTRL+F открыть поисковую систему, которая фильтрует информацию, в соответствии с тем, что мы набираем.

15.png

В VIEW-OPEN SUBVIEW-STRINGS точно также будут показываться строки, содержащие «try».

16.png

Через VIEW-OPEN SUBVIEW-DISASSEMBLY можно открыть второе дизасм окно, показывающее и выполняющее другие функции.

17.png

В OPEN SUBVIEW в LOADER есть hex представление или через вкладку HEX DUMP.

18.png

В OPEN SUBVIEW я могу показать импортируемые функции или вкладка IMPORTS.

19.png

20.png

Во VIEW можно активировать GRAPH OVERVIEW, он выполняет поиск по графику видимых функций и может двигать и изменять ту часть, которая отображается в данный момент на экране

Также имеются вкладки STRUCTURES, EXPORTS, NAMES, SEGMENTS и другие, которые я объясню позже, когда мы их будем использовать

Верхняя панель навигации с помощью различных цветов отображает разные части исполняемого файла.

21.png

Ниже поясняется, что обозначает каждый цвет, например, серый — .data, и если на него кликнуть, график сдвинется в секцию, соответствующую серому цвету. На рисунке можно увидеть, что розовая часть соответствует внешнему символу или секции .idata, синяя часть – тому, что определяется как функция в кодовой секции.

В первой части мы сделали лишь первые шаги, в следующих частях мы будем понемногу углубляться в тему.

До встречи во второй части.
Ricardo Narvaja

Источник:
http://ricardonarvaja.info/WEB/INTRODUCCION AL REVERSING CON IDA PRO DESDE CERO/EN INGLES/

Перевод на английский: IvinsonCLS
Перевод на русский: Яша_Добрый_Хакер.
27.11.2016


yashechka

yashechka
Ростовский фанат Нарвахи

Регистрация:
2 янв 2012
Публикаций:
90

Комментарии

      1. кофейник 22 окт 2019

        13 фев 2017 Вы упомянули Корелан. Это Ваш друг?
        За работу огромное спасибо.

      2. tkzv 14 мар 2019

        Под какую ОС прилагаемые crackme? Пока HOLA_REVERSER.exe, TEST_REVERSER.exe и VEViewer.exe отказались работать под Windows XP даже после установки рантаймов от VC++ 2017. Нужны какие-то ещё рантаймы? Или более новая ОС?

      3. Antora 2 авг 2018

        «Также в OPTIONS — DEBUGGING OPTIONS — LINE PREFIXES мы можем добавить адреса в переднюю часть при графическом представлении.» — не, не тут это живет в версии 6.8 точно, а тут: OPTIONS — GENERAL — Disassembly

      4. yashechka 14 май 2018

        Я очень рад, что Вы начали читать. Спасибо за то, что Вы есть.

      5. __sheva740 14 май 2018

        Начал изучение курса.
        Нравится все!
        Перед yashechka — снимаю шляпу.
        Рад буду помочь — чем смогу.
        )))

      6. yashechka 12 май 2018

        Спасибо. Странно, что только сейчас заметили. Есть такое дело )

      7. inzu 12 май 2018

        yashechka, вы на втором скриншоте, где список процессоров должен быть, показываете копию первого, с ОСями

      8. yashechka 27 янв 2018

        В финальном релизе, все ошибки будут учтены.

      9. texaciri 27 янв 2018

        @yashechka, поставил 6.8 которая рекомендуется.
        Вот сделал гифку, там всё видно, _yadi.sk/i/h6elGxBb3RqbCK

      10. yashechka 27 янв 2018

        Может это из-за разницы в версиях?

      11. texaciri 27 янв 2018

        >>Также в OPTIONS — DEBUGGING OPTIONS — LINE PREFIXES мы можем добавить адреса в переднюю часть при графическом представлении.
        должно быть OPTION — GENERALS… Diassembly — LINE PREFIXES

      12. Basil_pig 27 ноя 2017

        Прошу прощения за глупый вопрос, но файл Crackme.exe я не нашел :dntknw: . Какой экзешник открыть я конечно же нашел, но … наглядности примера нету.
        Может антивирус его убил?

      13. yashechka 15 фев 2017

        Пусть народ голосует, сохранены скриншоты из авторской статьи.

      14. Страница 1 из 2


    WASM

    ВВЕДЕНИЕ В РЕВЕРСИНГ С НУЛЯ ИСПОЛЬЗУЯ IDA PRO

    Идея этой серии(серии по IDA Pro, прим. ред.) учебных пособий — это обновить наш оригинальный курс по реверсингу, но используя IDA PRO. Будем обучаться использовать ее с нуля и работать будем с последней версией Windows. В моем случае я использую Windows 10 Anniversary Update x64 со всеми патчами, вплоть до 29 октября 2016.

    Потому что пока 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_cb5d8b3937caf856aaae75 0455d2b4ae

    Пароль на установку хранится в файле install_pass.txt.

    Также будет установлен Python 2.7.6. Он используется, чтобы избежать проблем используя другие версии IDA. Если вы установили Питон самостоятельно отдельно, он должен быть той же версии, что использует IDA.

    После установки, загрузим крэкме Cruehead, он идет вместе с этим туториалом.

    Так как это 32-х битный исполняемый файл, мы загрузим его в IDA для 32-х битных файлов напрямую.

    То, что мы видим — это 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 и запустить его в Режиме отладки, который мы разберем позже.

    Мы видим, что многие опции программы представлены в виде вкладок, в меню VIEW — OPEN SUBVIEW можно выбрать те вкладки, которые вам нравятся или нужны, чтобы не были открыты все.

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

    Тоже происходит и в конце, там мы находим начало дизасма, в этом случае инструкция соответствующая 401000 — PUSH 0

    В IDA есть возможность настроить интерфейс по умолчанию отдельно для LOADER и для DEBUGGER.

    Как только вы привыкнете, например, в LOADER, наиболее часто используемые окна и вкладки можно сохранить, перейдя в WINDOWS-SAVE DESKTOP и отметив «по умолчанию», то же самое можно сделать для режима дебаггера и изменить настройку по умолчанию.

    В любой из вкладок IDA, где есть такие списки, как FUNCTIONS, STRINGS, NAMES можно с помощью CTRL+F открыть поисковую систему, которая фильтрует информацию, в соответствии с тем, что мы набираем.

    В VIEW-OPEN SUBVIEW-STRINGS точно также будут показываться строки, содержащие «try».

    Через VIEW-OPEN SUBVIEW-DISASSEMBLY можно открыть второе дизасм окно, показывающее и выполняющее другие функции.

    В OPEN SUBVIEW в LOADER есть hex представление или через вкладку HEX DUMP.

    В OPEN SUBVIEW-IMPORTS IDA покажет импортируемые функции.

    Во VIEW можно активировать GRAPH OVERVIEW, он выполняет поиск по графику видимых функций и может двигать и изменять ту часть, которая отображается в данный момент на экране.

    Также имеются вкладки STRUCTURES, EXPORTS, NAMES, SEGMENTS и другие, которые я объясню позже, когда мы их будем использовать.

    Верхняя панель навигации с помощью различных цветов отображает разные части исполняемого файла.

    Ниже поясняется, что обозначает каждый цвет, например, серый — .data, и если на него кликнуть, график сдвинется в секцию, соответствующую серому цвету. На рисунке можно увидеть, что розовая часть соответствует внешнему символу или секции .idata, синяя часть – тому, что определяется как функция в кодовой секции.

    В первой части мы сделали лишь первые шаги, в следующих частях мы будем понемногу углубляться в тему.

    До встречи во второй части, Ricardo Narvaja

    Перевод на английский: IvinsonCLS Перевод на русский: Яша_Добрый_Хакер.

    IDA Pro использование

    IDA Pro скачать:

    https://download.csdn.net/download/larry_zeng1/11122054

    Как говорится, если вы хотите хорошо работать, вы должны сначала отточить свои инструменты. При изучении безопасности двоичного кода использование инструментов особенно важно. IDA — это артефакт игры с двоичным кодом. При использовании IDA в прошлом использовались лишь несколько наиболее часто используемых инструментов. Функции, другие функции IDA не изучались, поэтому в духе обучения обратитесь к «Авторитетному руководству IDA pro» (второе издание), напишите эту статью, запишите свой собственный опыт обучения, следующие записи находятся в IDA pro7.0 на платформе Windows

    Некоторые бинарные инструменты

    В первых двух главах «Авторитетного руководства IDA Pro» я впервые представил несколько инструментов, обычно используемых в бинарных исследованиях. Я кратко напомню некоторые из них и представлю волну:

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

    PE tools:
    — это набор инструментов для анализа запущенных процессов и исполняемых файлов в системе Windows.

    string:
    можно использовать для прямого поиска всех строк в файле elf
    Параметр -a означает поиск по всему файлу, параметр -t может отображать смещение каждой строки, а параметр -e может использоваться для поиска дополнительных строк с кодировкой символов, таких как Unicode. кодирование

    strip:

    Его можно использовать для elf для удаления символов. После удаления символов он по-прежнему поддерживает нормальные функции, но увеличивает сложность обратного проектирования.

    Гений, разработавший IDA, — Илфак, и в его личном блоге есть множество руководств по IDA.
    https://www.hexblog.com/

    Структура каталогов IDA

    В корневом каталоге установки IDA есть много папок, и в каждой папке хранится различное содержимое.

    cfg: содержит различные файлы конфигурации, базовый файл конфигурации IDA ida.cfg, файл конфигурации графического интерфейса idagui.cfg, файл конфигурации интерфейса пользователя в текстовом режиме idatui.cfg,
    idc: содержит основные файлы, необходимые для встроенного в IDA языка сценариев IDC.
    ids: содержит файлы символов
    loaders: содержит загрузчики, используемые для идентификации и анализа PE или ELF.
    плагины: дополнительные подключаемые модули
    procs: содержит процессорные модули

    Общие ярлыки

    Сочетания клавиш в IDA соответствуют различным функциям в строке меню. Как правило, если вы можете найти функцию в строке меню, вы также можете видеть соответствующие сочетания клавиш. Вот несколько наиболее часто используемых:

    a: преобразовать данные в строку

    f5: разборка в один клик

    esc: клавиша возврата, вы можете вернуться к просмотру предыдущей операции (эта функция есть только в окне разборки, если вы нажмете esc в других окнах, окно будет закрыто)

    shift + f12: вы можете открыть окно строки, найти все строки одним щелчком мыши, щелкнуть правой кнопкой мыши настройку и установить свойства окна

    ctrl + w: сохранить базу данных ida

    ctrl + s: выбрать сегмент данных и перейти напрямую

    ctrl + колесо мыши: можно настроить размер представления процесса

    x: нажмите сочетание клавиш для функции или переменной, чтобы просмотреть перекрестную ссылку

    g: переход прямо к адресу

    n: изменить имя переменной

    y: изменить тип переменной

    /: Написать комментарий в интерфейсе псевдокода после декомпиляции

    : Скрыть / показать описание типа переменных и функций в интерфейсе псевдокода после декомпиляции. Иногда, когда переменных слишком много, скрыть описание типа намного проще.

    ;: Напишите комментарий в разобранном интерфейсе

    ctrl + shift + w: сделать снимок IDA

    u: undefine, отменить определение функций, кодов и данных

    Общие настройки

    Сделать снимок

    Поскольку IDA не предоставляет функцию отмены, если вы случайно нажмете клавишу и вызовете изменение базы данных ida, вам придется начать заново, поэтому не забудьте добавить моментальный снимок, когда вы часто работаете: file -> take database снимок
    После добавления снимка будет сгенерирован новый файл базы данных ida, что по сути немного похоже на операцию сохранения как

    Сочетание клавиш: ctrl + shift + w

    Общие настройки панели меню

    view -> open subviews: вы можете восстановить окно отображения данных, которое вы случайно закрыли

    windows -> сбросить рабочий стол: вы можете восстановить исходный макет ida

    option -> font: вы можете изменить связанные атрибуты шрифта

    Добавить смещение адреса в представлении процесса

    Можно сказать, что представление процесса в IDA очень простое в использовании.Оно просто и понятно, чтобы увидеть процесс выполнения программы, особенно если смотреть на код ветвления if и код цикла, он может быть очень интуитивно понятным.

    Однако мы также можем изменить его, чтобы упростить использование. Если вы добавите смещение адреса в это представление, нам будет очень удобно получить адрес. Вам больше не нужно нажимать пробел, чтобы переключить представление, чтобы найти его. Установите в строке меню: option -> general

    После выбора этой опции вы можете увидеть эффект:

    Автоматически добавлять комментарии к дизассемблированию

    Эта функция очень удобна для Mengxin. Когда я только учился компилировать, я неизбежно сталкивался с несколькими нечасто используемыми инструкциями по сборке из змеиной кожи, поэтому мне приходилось проверять их одну за другой. Это было очень хлопотно. После того, как функция автоматического аннотации была включена, IDA Вы можете прямо сказать смысл инструкции по сборке

    То же самое и в строке меню: option -> general

    Эффект такой:

    Общие операции

    Создать массив

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

    Сначала щелкните, чтобы выбрать область, которую вы хотите преобразовать в массив:

    Затем выберите в строке меню: редактировать -> массив, появится следующее диалоговое окно.

    Поясним значение каждого параметра:

    Array element size Это значение представляет размер каждого элемента массива (здесь 1 байт), который определяется в соответствии с размером выбранного вами значения данных.

    Maximum possible size Это значение рассчитывается автоматически, оно представляет собой максимально возможное значение элементов в массиве.

    Array size Указывает количество элементов массива, обычно значения по умолчанию генерируются автоматически в соответствии с вашим выбором

    Items on a line Это представление определяет количество элементов, отображаемых в каждой строке разборки, что может уменьшить пространство, необходимое для отображения массива.

    Element print width Это значение используется для форматирования. Когда несколько элементов отображаются в строке, оно определяет ширину столбца.

    Use “dup” construct : Используйте повторяющуюся структуру, этот параметр может объединять одни и те же значения данных и объединять их в один элемент с повторяющимся спецификатором

    Signed elements Указывает, отображать ли данные как подписанные или как неподписанные

    Display indexes Отображать индекс, чтобы индекс массива отображался в обычной форме. Если этот параметр выбран, панель параметров Индексы справа также будет активирована для выбора формата отображения индекса.

    Create as array Созданный как массив, обычно выбирается по умолчанию.

    После создания он становится таким:


    )

    Вы можете видеть, что эти данные были объединены в массив, где2 dup(0FFh)Таким образом, это означает, что есть два повторяющихся данных 0xff

    блок-схема

    Свернуть ветви на блок-схеме

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

    Эффект такой:

    Блоки ветвей могут быть названы сами по себе, чтобы облегчить их обратное понимание

    График вызовов функций

    Строка меню: просмотр -> графики -> вызовы функций (сочетание клавиш Ctrl + F12)

    На этой картинке хорошо видно, как функции вызывают друг друга

    Блок-схема функций

    Строка меню: вид -> графики -> блок-схема (горячая клавиша F12)

    Это фактически похоже на представление процесса разборки, которое поставляется с IDA, его можно экспортировать как отдельную картинку

    Создайте структуру:

    Создать структуру вручную

    Создание структуры осуществляется в окне структур IDA. Эта операция часто используется в pwn-вопросах об уязвимостях кучи.

    Как видите, здесь уже есть четыре структуры.Если сама программа существует, вы можете щелкнуть правой кнопкой мыши и выбрать скрыть / показать, чтобы увидеть содержимое конкретной структуры.

    Горячая клавиша для создания структуры: вставить

    Во всплывающем окне вы можете редактировать название конструкции.

    Внизу есть три флажка, первый означает отображение перед текущей структурой (она будет расположена в первой позиции, в противном случае она будет расположена в позиции, выбранной вашей мышью), второй означает, отображать ли новую структуру в окне Третий указывает, создавать ли объединение.

    Следует отметить, что размер структуры — это сумма размеров полей, которые она содержит, а размер объединения равен размеру самого большого поля.

    После нажатия кнопки ОК устанавливается пустая структура:

    Наведите указатель мыши на конечную строку и нажмите сочетание клавиш D, чтобы добавить член структуры. Имя члена по умолчанию представлено field_x, а x представляет смещение элемента в структуре.

    В то же время вы можете навести указатель мыши на строку элемента структуры, нажать D, вы можете переключаться между разными размерами байтов

    По умолчанию доступны только варианты db, dw, dd (размер 1, 2, 4 байта)

    Если вы хотите добавить тип, вы можете установить его в опции -> настроить типы данных (сочетание клавиш Alt + D)

    Как показано на рисунке, если пятый и девятый отмечены, появятся dq и xmmword (представляющие 8 байтов и 16 байтов).

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

    Как показано на рисунке, необходимо создать 4-байтовый массив из 16 элементов.

    Если вы хотите удалить структуру, нажмите клавишу удаления напротив структуры, чтобы удалить

    Если вы хотите удалить член, нажмите u (undefine) на члене, но следует отметить, что здесь удаляется только имя члена, а выделенное им пространство не удаляется.

    Как показано на рисунке, мы удалили элементы массива field_10 посередине:

    Станет так:

    20-байтовое пространство, выделенное массивом, не было удалено. Если вы хотите удалить эти пробелы, вам нужно нажать Ctrl + S в первой строке исходных элементов массива, чтобы удалить пространство (Правка -> сжать типы структур)

    Фактически вы можете удалить участника

    Вы можете использовать горячую клавишу N, чтобы переименовать элементы структуры.

    После того, как мы создали структуру в IDA, мы собираемся применить ее

    Как показано на рисунке, это типичная проблема с кучей.

    Можно видеть, что v1 — это адресный указатель вновь созданного фрагмента, а последующие операции должны записывать содержимое в разные позиции смещения фрагмента. Чтобы облегчить обратное наблюдение, мы можем превратить его в структуру с помощьюv1 v1+4 v1+0x48 Такое смещение после создания конструкции будетchar *v1Измените тип наmail *v1, (Ярлык Y может изменять тип и параметры функций и переменных) Это письмо является именем созданной нами структуры, и эффект будет следующим:

    Импортировать структуру, объявленную языком C

    Фактически, IDA предоставляет более удобный способ создания структуры, заключающийся в непосредственном написании кода для импорта

    В View -> Open Subviews -> Local Types вы можете увидеть существующую локальную структуру, щелкните правой кнопкой мыши по вставке в этом окне

    Вы можете добавлять новые конструкции:

    Это импортирует новую структуру:

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

    Итак, вид структуры есть, как показано на рисунке.

    Здесь вы обнаружите, что есть еще два неопределенных члена db. Это связано с тем, что ida по умолчанию выравнивает структуру равномерно на 4 байта, а размер структуры равен 0x28.

    IDA динамически отлаживает elf:

    Здесь я беру эльфа на виртуальной машине Ubuntu в качестве примера для отладки

    Сначала скопируйте linux_server64 из папки dbgsrv в каталоге ida в папку elf Ubuntu. Этот elf 64-разрядный и все использует linux_server64. Если вы отлаживаете 32-разрядную программу, вам нужно скопировать linux_server

    Не забудьте дать им разрешение и запустить ее в терминале. Эта программа действует как мост между ida и elf на виртуальной машине.

    Затем перейдите в ida для настройки:

    Выберите в строке меню: отладчик -> параметры процесса

    Обратите внимание, что и приложение, и входной файл заполняются по пути эльфа на виртуальной машине, не забудьте добавить имя файла

    И каталог заполните каталог, в котором находится elf, без добавления имени файла

    hostname — это IP-адрес виртуальной машины, порт — порт подключения по умолчанию

    Параметр и пароль обычно не требуются

    Нажмите ОК после настройки

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

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

    Нажмите горячую клавишу F4, чтобы перейти непосредственно к точке останова и остановить

    Это введение в основные функциональные области. Выше представлен общий макет, который я предпочитаю. Это не то же самое, что по умолчанию ida. Если вы хотите настроить некоторые представления, вы можете добавить их в отладчик -> представление быстрой отладки

    Кроме того, вы можете сохранить текущий макет представления в Windows -> сохранить рабочий стол, и вы можете загрузить его прямо в будущем.

    Вот несколько часто используемых сочетаний клавиш

    F7 Войдите в функцию, вы введете код функции
    F8 Перейти, выполнить следующую инструкцию без ввода кода функции
    F4 Бежать к курсору (точка останова)
    F9 Продолжать работать
    CTRL+F2 Завершить запущенный процесс отладки
    CTRL+F7 Выполните, чтобы вернуться, и остановитесь, пока не встретится RETN (или точка останова).

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

    IDA-python

    Внизу IDA находится скромный интерфейс окна вывода, который на самом деле является терминальным интерфейсом: терминалы python и терминалы IDC.

    Здесь используется питон версии 2.7. Хотя он немного устарел, нам его достаточно. В приложении IDA нам часто требуется вычислять адрес и вычислять смещение. Вы можете напрямую работать с этим терминальным интерфейсом, что очень удобно.


    Конечно, это просто очень простое использование Python, реальное использование IDA-python выглядит следующим образом:

    Вот пример с простым обратным вопросом

    Эта программа очень проста. Вначале цикл for выполнит XOR всего содержимого функции судейства до 0xc. Это приведет к уничтожению функции оценки непосредственно во время выполнения программы.

    Это делает невозможным последующее вынесение решений по флагу.

    Здесь нам нужно сначала написать сценарий для восстановления поврежденного содержимого, здесь IDA предоставляет два метода для написания операций сценария, один — это сценарий IDC, другой — сценарий Python.

    Вот только краткое введение в IDA-python

    IDA-python внедряет код Python в IDA через три модуля Python:

    Модуль idaapi отвечает за доступ к основному API IDA.

    Модуль idc отвечает за предоставление всех функций в IDA.

    Модуль idautils отвечает за предоставление большого количества полезных функций, многие из которых могут генерировать списки Python для различных объектов, связанных с базой данных.

    Все скрипты IDApython автоматически импортируют модули idc и idautils, тогда как модули idaapi должны быть импортированы сами по себе.

    Вставьте сюда IDApythonОфициальная документация по функциям, Сюда включены все функции, стоит посмотреть

    Для решения вышеуказанных проблем нам нужно только создать сценарий, указать байт XOR 0xc в диапазоне 0-181 функции judg, а затем восстановить

    judge=0x600B00
    for i in range(182):
        addr=0x600B00+i
        byte = get_bytes (addr, 1) # Получить указанное количество байтов указанного адреса
        byte=ord(byte)^0xC
             patch_byte (addr, byte) # Воспроизвести патч для изменения байтов
    

    В файле строки меню -> файл сценария загрузите сценарий python

    Затем не определите исходную функцию в функции оценки и повторно создайте функцию (горячая клавиша p), вы можете повторно использовать f5
    Все функции, представленные в скрипте, инкапсулированы в модуле idc. Подробности см. в официальной документации.

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

    Нажмите PATCH

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

    Здесь я использую плагин под названием keypatch для работы, функция исправления, которая поставляется с IDA, не проста в использовании

    Установить патч

    Это очень просто, руководство находится вgithubЕсть

    Загрузите Keypatch.py ​​и скопируйте его в каталог плагина.

    IDA 7.0pluginsKeypatch.py

    Загрузите и установите модуль keystone python, 64-битные системы должны установить только этот

    https://github.com/keystone-engine/keystone/releases/download/0.9.1/keystone-0.9.1-python-win64.msi

    После установки вы обнаружите, что есть опция keypatch

    Изменить инструкции программы

    Что, если мы хотим изменить инструкции самой программы

    Как показано на рисунке, мы должны изменить значение 63h

    Наведите указатель мыши на изменение строки и нажмите сочетание клавиш Ctrl + Alt + K

    Его можно изменить, напрямую введя оператор сборки, и эффект после исправления показан на рисунке:

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

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

    Таким образом была изменена исходная программа.

    Отменить патч

    Если вы случайно ввели неправильный патч, вы можете отменить последнюю операцию патча здесь

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

    Просмотрите все исправления, щелкните правой кнопкой мыши и выберите «Вернуть», если хотите отменить один

    Файл данных экспорта IDA

    В строке меню есть возможность создавать различные файлы вывода.

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

    Файл .map описывает общую структуру двоичного файла, включая информацию о разделах, составляющих двоичный файл, и расположение символов в каждом разделе.

    Скомпилированный файл .asm может напрямую экспортировать результат дизассемблирования в ida. Это очень практично. Иногда при обратном проектировании мы часто сталкиваемся с большим объемом шифрования и дешифрования данных. Если вы медленно копируете один за другим из IDA Это слишком неэффективно, экспорт напрямую для генерации asm и копирование данных в него намного быстрее

    Общее значение именования IDA

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

    sub Отправная точка инструкций и подфункций
    locret
    Инструкция по возврату
    loc инструкция
    off
    Данные, включая смещение
    seg Данные, включая значение адреса сегмента
    asc
    Данные, строка ASCII
    byte Данные, байт (или массив байтов)
    word
    Данные, 16-битные данные (или массив слов)
    dword Данные, 32-битные данные (или массив двойных слов)
    qword
    Данные, 64-битные данные (или массив из 4 слов)
    flt Данные с плавающей запятой, 32 бита (или массив с плавающей запятой)
    dbl
    Число с плавающей запятой, 64 бита (или массив двойной точности)
    tbyte Число с плавающей запятой, 80 бит (или число с плавающей запятой повышенной точности)
    stru
    Структура (или массив структур)
    algn Инструкции по выравниванию
    unk
    Необработанные байты

    В IDA есть общие описательные символы, такие как db, dw и dd, соответственно, представляют 1 байт, 2 байта и 4 байта.

    Ошибка декомпиляции IDA

    В настоящее время, как правило, встречаются два случая ошибки декомпиляции.

    • Во-первых, из-за динамического шифрования программы некоторые сегменты кода программы модифицируются, что приводит к ошибке декомпиляции. В этом случае вам нужно использовать IDA-python для расшифровки волны, а затем выполнить дизассемблирование F5

    • Во-вторых, из-за некоторых метафизических проблем что-то пошло не так, как правило, для внесения изменений следуйте подсказкам IDA.

      Например, возникает следующая ошибка:

    Затем мы переходим к поиску адреса 413238, подсказка заключается в том, что значение указателя sp не было найдено, что указывает на наличие ошибки, затем переходим к изменению значения sp, метод модификации выглядит следующим образом:

    Вы также можете использовать сочетание клавиш Alt + K

    Иногда возникала такая ошибка

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

    В настоящее время у меня не так много ошибок, как правило, я могу их решить указанными выше способами.

    Настроить IDA

    Папка cfg в корневом каталоге ida предназначена для хранения файлов конфигурации.

    Главный файл конфигурации ida — ida.cfg, а два других файла конфигурации, idagui.cfg и idatui.cfg, соответствуют конфигурации графического интерфейса пользователя и версии IDA в текстовом режиме.

    Один, ida.cfg

    Этот файл содержит конфигурацию всех опций в option -> general. Вы можете найти соответствующую опцию в файле конфигурации через описание в опции

    Вот несколько примеров:

    SHOW_AUTOCOMMENTS Указывает, следует ли автоматически создавать комментарий для инструкций по сборке

    GRAPH_SHOW_LINEPREFIXES Указывает, следует ли отображать адрес в представлении управления процессом

    VPAGESIZE Указывает параметр настройки памяти. При обработке очень большого входного файла IDA может сообщить, что недостаточно памяти и не может создать новую базу данных. В этом случае увеличьте параметр и повторно откройте входной файл для решения проблемы.

    OPCODE_BYTES Указывает значение по умолчанию количества отображаемых байтов кода операции

    INDENTATION Указывает расстояние отступа инструкции

    NameChars Указывает набор символов, используемый командами переменных, поддерживаемыми IDA. По умолчанию используются цифры + буквы и несколько специальных символов. Если вам нужно добавить его, измените этот параметр.

    Два, idagui.cfg

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

    Три, idatui.cfg

    Кажется, это используется реже. . . Нечего сказать

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

    Однако во всех случаях есть исключения. Две опции в option -> font и option -> colors являются глобальными параметрами. Изменения вступят в силу постоянно. Вам не нужно изменять их в трех указанных выше файлах конфигурации.

    IDA Pro: 11 советов, которые вы (может быть) не знали +13

    Информационная безопасность, Реверс-инжиниринг


    Рекомендация: подборка платных и бесплатных курсов 3D-моделирования — https://katalog-kursov.ru/

    Как скопировать псевдокод в ассемблерный листинг? Как правильно выровнять структуры? Как лучше всего сделать экспорт куска данных для использования в скрипте? В этой статье я покажу компиляцию полезных, как мне кажется, советов для IDA Pro, честно украденных позаимствованных из разных источников и своего опыта.

    Выравнивание структур

    В изучаемой программе могут использоваться структуры, которые используют «нестандартное» выравнивание, скажем, по одному байту. Такие структуры можно без проблем создать в виде структур (Shift + F9), а в случае использования вида локальных типов нужно воспользоваться директивой pragma, а точнее pragma pack. pragma pack (n) задает выравнивание членов структур (чаще всего по умолчанию используется выравнивание 4 или 8 байт).

    Например, если мы имеем дело с такой структурой

    struct test_s
    {
      char ch1;
      QWORD qword;
    };

    и знаем, что ее члены идут один за другим (т.е. сам экземпляр структуры занимает 5 байт), то при ее наложении на данные получим такую картину:

    https://habrastorage.org/webt/mp/74/al/mp74al9nkprcsv7leihgqun6x3m.png

    Видно, что между ch1 и qword образовалось неиспользуемое пространство, на месте которого по задумке должен был быть сам qword. Но если перепишем структуру следующим образом:

    #pragma pack(1)
    struct test_s
    {
      char ch1;
      QWORD qword;
    };

    то получим корректный результат:

    https://habrastorage.org/webt/8l/it/s6/8lits68hs1glqr0g4iatqacxl9a.png

    Текстовый поиск

    В декомпиляторе нет Ctrl+F, но оказывается, что Alt+T, работающий в окне дизассемблера, точно так же работает и в окне декомпилятора.

    https://habrastorage.org/webt/-g/f5/5i/-gf55icmkkhcnsqx1mx4kjgpjxg.png

    https://habrastorage.org/webt/qg/5b/cz/qg5bczp6gu-uo0tl1rbiu7vitxq.png

    Segments > Rebase

    Если вы с первого раза не угадали правильный адрес загрузки прошивки, то можете воспользоваться функцией переноса idb на другой адрес.

    Например, мы загрузили прошивку в IDA по нулевому адресу. По адресу 0x04 находится указатель на функцию, который сейчас указывает в область памяти, которой не сопоставлено ни одного сегмента в idb.

    https://habrastorage.org/webt/mj/n7/bv/mjn7bvxnomvd0ylscpm11hsusva.png

    Зайдем в Edit>Segments>Rebase и перенесем нашу прошивку на адрес 0x8000000.

    В результате у нас появился нормальный xref:

    https://habrastorage.org/webt/iy/-l/rh/iy-lrhiqnzt7qfotqyo2iysssgi.png

    Бряки

    В IDA, как и в большинстве отладчиков, можно ставить условные бряки, т.е. они будут срабатывать только если выполняется определенное условие. Условие представляет собой конструкцию на языке IDC или Python, в которой во время отладки доступны глобальные переменные с соответствующими именами для доступа к каждому из регистров.

    Также во время отладки таким образом можно менять значения регистров и содержимое памяти.

    Выделение участков данных и экспорт (Alt+L — Shift+E)

    Для выделения большого сегмента данных можно воспользоваться сочетанием клавиш Alt+L, чтобы начать выделение региона и управлять границами выделяемого региона с помощью мыши или клавиш управления курсором. Выделенные данные можно экспортировать в один их удобных форматов (строка, hex-последовательность, массив байт C) и помощью сочетания клавиш Shift+E.

    Удаленная отладка

    IDA поддерживает удаленные GDB и Windbg-сервера, но также в ней есть возможность удаленной отладки с помощью своих собственных серверов (находятся в каталоге IDADIRdbgsrv).

    https://habrastorage.org/webt/6s/1h/mh/6s1hmhcrc_icisa4viun1owbrz0.png

    Строковые литералы в декомпиляторе

    Часто может встречаться ситуация, когда read-only данные перемешаны в одном сегменте с read-write данными (например, при использовании старых компиляторов, компиляторов для RTOS и др.). При этом при использовании декомпилятора можно наблюдать следующее:

    Как мы видим, вместо строковых литералов подставляются названия переменных. Это отрицательно сказывается на читабельности псевдокода. Для исправления этой неурядицы можем изменить тип строковых переменных с char на const char.

    В результате строковая переменная с исправленным типом будет действительно отображаться в псевдокоде как строковый литерал.

    Второй вариант — это настроить декомпилятор на отображение всех строк как литералов (а не только неизменяемых). Для этого убираем галку «Print only constant strings literals» в настройках декомпилятора.

    В результате получаем красивый вывод:

    Код little endian, а данные big endian

    Иногда встречается Little Endian код для ARM, в то время, как данные имеют формат Big Endian. В этом случае для корректного отображения данных надо зайти в General options > Analysis > Processor specific analysis options > Edit ARM architecture options и поставить галку «BE-8 code (ARMB)».

    Бряки и gdbserver

    То ли я работаю с такими версиями gdbserver, то ли лыжи не едут, но включенная по умолчанию в IDA «single stepping support» у меня не работает, и из-за этого при отладке не срабатывают вообще никакие бряки, кроме самой первой. В этом случае я захожу в настройки отладчика, выбираю «Set specific options» и убираю галку «Use stepping support».

    Эта настройка не сохраняется в idb, и для того, чтобы не делать этого каждый раз, в конфигурационном файле dbg_gdb.cfg необходимо исправить параметр SINGLE_STEP.

    И еще про gdbserver

    И еще поворчу про работу с gdbserver (в этот раз — в случае присоединения к удаленному процессу). Если на целевой машине включен ASLR, то у IDA может не получиться понять реальное расположение образа отлаживаемого файла в памяти. В результате IDA будет пытаться работать с адресами, которые указывают в какое-то невалидное пространство памяти. Для борьбы с этим можно еще до присоединения к удаленному процессу сделать rebase idb на актуальный адрес, и только потом присоединяться к процессу.

    Сбор мусора в IDAPython

    Интерпретатор Python, встроенный в IDA работает всегда и не закрывается до закрытия самой IDA. Поэтому сущности вашего Python-скрипта или плагина не будут автоматически удаляться. Кроме очевидных последствий вроде внезапных для автора утечек памяти, это может привести и к более забавным побочным эффектам, как, например, во время использования модуля logging.

    Если написать такой скрипт

    import logging
    
    def main():
        logger = logging.getLogger('test1-script')
        logger.setLevel(logging.DEBUG)
        formatter = logging.Formatter('[TEST 1] %(name)s - %(message)s')
        ch = logging.StreamHandler()
        ch.setFormatter(formatter)
        logger.addHandler(ch)
        logger.debug("Log message!")
    
    if __name__ == "__main__":
        main()

    и запустить его два раза подряд, увидим такой вывод:

    https://habrastorage.org/webt/cq/mj/am/cqmjamal8rb0l5cfeit8tll53wu.png

    Происходит это потому, что функция getLogger либо создает, либо получает из глобального кэша уже существующий объект класса Logger. Далее к полученному инстансу логгера (одинаковому при каждом запуске скрипта) добавляется еще один хэндлер. Проверить это можно просто: выводим кэш (словарь) логгеров и список хэндлеров:

    https://habrastorage.org/webt/kf/4t/ni/kf4tnigeguq6rnaga8n7v4tnoig.png

    Есть как минимум два способа бороться с этим:

    logging.Logger.manager.loggerDict.clear()

    или

    reload(logging)

    И последнее

    Минутка внимания еще нескольким трюкам:

    1. Начиная с версии 7.4, объявления локальных переменных в декомпиляторе могут быть «слохпнуты» по умолчанию — это настраивается в файле hexrays.cfg.
    2. Также в этой версии можно «прыгать» между фигурными скобками в псевдокоде по клавише «%» (Shift+5).
    3. С помощью горячей клавиши «/» можно скопировать псевдокод в ассемблерный листинг в виде комментариев.

    Источники

    1. Друзья-коллеги
    2. IDA Pro Book
    3. https://twitter.com/idatips
    4. Release Notes
    5. И другие.

    Buy a license

    The latest publicly available build of IDA, the processor and plugin SDK including the source code of 30+ processor modules and 20+ loaders. One full year of free downloadable updates. One full year of e-mail technical support.

    Понравилась статья? Поделить с друзьями:
  • Пронтосан раствор для заживления ран цена инструкция по применению взрослым
  • Candy aquamatic tempo aqua 2d 1140 инструкция
  • Типологии стиля руководства это
  • Баофенг 1801 инструкция на русском языке
  • Каффетин инструкция по применению при каком давлении можно принимать