Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Virtuailor — IDAPython инструмент для автоматического создания виртуальных таблиц C++ в IDA Pro | Kitploit
Инструменты/GitHubGitHub/0xgalz/virtuailor
Статический анализДинамический анализ (песочница)Обратная инженерияОтладчикиАнализ Бинарных Файлов
GitHub0xgalz/virtuailor

Virtuailor

IDAPython инструмент для автоматического создания виртуальных таблиц C++ в IDA Pro

Репозиторий
1.4k13946 лет назадПроверено Kitploit

Популярное

Смотреть все →

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

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Virtuailor - Инструмент IDAPython для восстановления vtable в C++

Virtuailor - это инструмент IDAPython, который восстанавливает vtable для C++ кода, написанного для архитектуры Intel, как 32-битного, так и 64-битного, а также AArch64 (Новинка!). Инструмент состоит из двух частей: статической и динамической.

Первая часть - статическая, содержит следующие возможности:

  • Обнаруживает косвенные вызовы.
  • Перехватывает присвоение значений косвенных вызовов с помощью условных точек останова (код перехвата).

Вторая часть - динамическая, содержит следующие возможности:

  • Создаёт структуры vtable.
  • Переименовывает функции и адреса vtable.
  • Добавляет смещение структуры к ассемблерным косвенным вызовам.
  • Добавляет перекрёстные ссылки (xref) от косвенных вызовов к их виртуальным функциям (несколько xref).
  • Для AArch64 - пытается исправить неопределённые vtable и связанные виртуальные функции (поддержка прошивок).

Как использовать?

Virtuailor теперь поддерживает версии IDA от 7.0 до новейшей (7.5). Если вы используете версии IDA старше 7.4, вам нужно переключиться на ветку beforeIDA-7.4. Ветка master поддерживает новейшую доступную версию (7.5).

  1. По умолчанию Virtuailor будет искать виртуальные вызовы во ВСЕХ адресах кода. Если вы хотите ограничить код только определённым диапазоном адресов, нет проблем, просто отредактируйте файл Main, чтобы добавить нужный диапазон в переменные start_addr_range и end_addr_range:
root@kitploit:~
if __name__ == '__main__':

    start_addr_range = idc.MinEA()  # You can change the virtual calls address range
    end_addr_range = idc.MaxEA()
    add_bp_to_virtual_calls(start_addr_range, end_addr_range)
  1. Опционально (но крайне рекомендуется) создайте снимок вашей idb. Просто нажмите ctrl+shift+t и создайте снимок.

  2. Нажмите File->Run script..., затем перейдите в папку Virtuailor и выберите запуск Main.py. Вы можете посмотреть следующую гифку для более наглядного объяснения. How to use

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

После этого точки останова будут размещены в вашем коде, и всё, что вам нужно сделать, - это выполнить код с помощью отладчика IDA, выполнить любые необходимые действия и увидеть, как строятся vtable! Для AArch64 вы можете настроить удалённый gdb-сервер и отлаживать с помощью отладчика IDA.

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

Также для меня очень важно отметить, что это вторая версия инструмента с поддержкой как 32, так и 64 бит, а также AArch64. Вероятно, в некоторых случаях небольшое количество точек останова будет пропущено. В таких случаях, пожалуйста, создайте issue и свяжитесь со мной, чтобы я смог улучшить код и помочь исправить это. Заранее спасибо за это :)

Вывод и общие функции

Структуры vtable

Структуры, которые Virtuailor создаёт на основе vtable, использованных в сработавших виртуальных вызовах. Функции vtable извлекаются из памяти на основе соответствующего регистра, который использовался в опкоде BP.

vtable example

Поскольку я хотел создать корреляцию между структурой в IDA и vtable в секции данных, BP изменяет имя адреса vtable в секции данных на имя структуры. Как вы можете видеть на следующем изображении:

vtable example

Имена виртуальных функций также изменяются, за исключением случаев, когда имена не являются именами IDA по умолчанию (функции с символами или функции, изменённые пользователем). В таких случаях имена функций останутся прежними и также будут добавлены в структуру vtable с их текущими именами.

Выбранные имена строятся по следующему шаблону:

  • vtable_
  • vfunc_ остальная часть имени представляет собой смещение от начала сегмента. Это в основном связано с тем, что большинство бинарных файлов в наши дни являются PIE и PIC, и таким образом применяется ASLR (вместо использования полного имени адреса, которое также довольно длинное в 64-битных средах). Структура vtable также имеет комментарий: "Was called from offset: XXXX" - это смещение от начала сегмента.

Добавление структур к ассемблеру

После создания vtable Virtuailor также добавляет связь между созданной структурой и ассемблером, как вы можете видеть на следующих изображениях:

BP after an execution, Example 2

P.S: Смещение структуры, используемое в BP, актуально только для последнего выполненного вызова. Чтобы получить лучшее понимание всех выполненных виртуальных вызовов, была добавлена функция xref, как объяснено в следующем разделе.

Перекрёстные ссылки на виртуальные функции

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

xref

Прошлые доклады и лекции

Инструмент был представлен на RECon Brussels, Troopers и Warcon. Презентацию можно найти по следующей ссылке: https://www.youtube.com/watch?v=Xk75TM7NmtA

Благодарности

Командам RECon Brussels, Troopers, Warcon, а также Nana, @tmr232, @matalaz, @oryandp, @talkain, @shiftreduce

Лицензия

Плагин лицензирован под лицензией GNU GPL v3.

Скачать инструмент