Автор: Тайлер Колган

Задний план

Информация о типе запуска, или RTTI, относится к информации о классе, представленной в скомпилированных двоичных файлах C++. В зависимости от иерархии классов, используемой программистом, написавшим исходный код, можно получить большой объем информации о программе. Это может быть чрезвычайно полезно в ходе реверсивного проектирования — простое знание имен может быть весьма полезным, но знание того, какие классы наследуются от каких других классов, еще более полезно. Более подробную информацию о RTTI смотрите в Статье в Википедии по теме.

Уже есть другие плагины IDA, которые выполняют эту функцию, например хорошо зарекомендовавший себя Class Informer, так зачем делать новый плагин? Извлечение RTTI из двоичного файла может быть весьма полезным, но если целевой двоичный файл содержит множество классов со сложными отношениями наследования, может быть трудно полностью понять, как они соотносятся друг с другом на практике. Вот как SusanRTTI пытается улучшить этот рабочий процесс: * Диаграмма классов в IDA * Вместо того, чтобы выводить простой текстовый список классов и их взаимосвязей с другими классами, этот плагин создает график в IDA, показывающий иерархию классов:

* Функциональность экспорта DOT * В дополнение к отображению графика с использованием собственного графического движка IDA, плагин поддерживает экспорт в формат DOT, что позволяет создавать еще более красивые графики с помощью внешнего инструмента, такого как GraphViz:

* Поддержка нескольких компиляторов * Форматы RTTI различаются для каждого компилятора C++. Этот плагин поддерживает синтаксический анализ RTTI из двоичных файлов, скомпилированных с помощью MSVC или GCC. * Не зависит от архитектуры и платформы * Этот плагин написан на Python, что позволяет ему работать на любой архитектуре (32-битные или 64-битные версии IDA) и на любой платформе (Windows, Linux, Mac) без модификации или перекомпиляции.

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

Требования для использования плагина довольно просты: если у вас установлена ​​копия IDA Pro с соответствующей установкой Python. Плагин можно получить на GitHub по следующему адресу: https://github.com/nccgroup/PythonClassInformer.

Сначала откройте базу данных IDA, для которой вы хотите прочитать RTTI. Затем в IDA перейдите в File -> Script file… и выберите «classinformer.py». (Вы также можете нажать Alt-F7, чтобы не использовать меню «Файл» каждый раз, когда вы хотите запустить плагин.) Если все пойдет хорошо, вы должны увидеть график в IDA, который выглядит примерно так:

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

Если вы хотите иметь больший контроль над форматированием диаграммы, вы также можете экспортировать диаграмму в файл DOT, чтобы визуализировать диаграмму с помощью внешнего инструмента. Просто щелкните правой кнопкой мыши на графике и нажмите «Экспорт DOT»:

Затем вы можете использовать такой инструмент, как GraphViz, для визуализации графика:

Вывод

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

Дата публикации: 5 октября 2017 г.

Первоначально опубликовано на www.nccgroup.trust.