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

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

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

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

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

Категории

Все категории
Loading categories
ida_kcpp — Модуль IDAPython для улучшения поддержки C++ поверх ida_kernelcache | Kitploit
Инструменты/GitHubGitHub/cellebrite-labs/ida_kcpp
Статический анализБезопасность iOSОбратная инженерияМобильная безопасностьАнализ Бинарных Файлов
GitHubcellebrite-labs/ida_kcpp

ida_kcpp

Модуль IDAPython для улучшения поддержки C++ поверх ida_kernelcache

Репозиторий
14215362 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

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

ida_kcpp

Модуль IDAPython, предоставляющий гораздо более удобный способ реверс-инжиниринга кэшей ядра iOS.

Большая часть кэша ядра iOS написана на C++, который компилируется в сложный бинарный код, использующий множество разыменований виртуальных таблиц вместо явных прямых вызовов. ida_kcpp использует преимущество реконструкции иерархии классов из ida_kernelcache. Он сопоставляет IDB и синхронизирует бинарные функции с оригинальными виртуальными методами. Это позволяет навигировать по кэшу ядра iOS двойным щелчком по вызову виртуального метода C++, находить их перекрёстные ссылки и сохранять всё это синхронизированным во время живого исследования.

ida_kcpp вдохновлён ida_medigate, но выигрывает от уникальной структуры кэша ядра iOS и предоставляет более мощную и удобную среду для исследования.

general_view

Установка

  • Установите ida_kernelcache (форк Cellebrite)
  • Необязательно, но настоятельно рекомендуется: установите ida-referee (форк Cellebrite) для отслеживания перекрёстных ссылок на поля структур из обращений в декомпиляторе

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

С помощью ida-setup:

ida-setup plugin install -e /path/to/ida-kcpp

Или вручную:

  1. Установите ida-netnode
  2. Убедитесь, что ida_kernelcache и ida_kcpp находятся в пути Python IDA.

Также можно добавить, вписав в ~/.idapro/idapythonrc.py:

import sys
sys.path.append(IDA_KCPP_PATH)
sys.path.append(IDA_KERNELCACHE_PATH)
  1. создайте символическую ссылку ~/.idapro/plugins/ida_kcpp_plugin.py на ida_kcpp_plugin.py

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

Предварительный анализ

  1. Откройте анализируемый kernelcache. Если ida_kernelcache ещё не запускался, запустите его через edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernel
  2. Выполните Edit >> Plugins >> Kernel Cache CPP >> Perform Initial sync... (Могут появиться некоторые предупреждающие окна — пока их можно игнорировать). На этом шаге имена виртуальных функций переименовываются путём установки их префикса в соответствии с классом, которому они принадлежат. Этот шаг также декомпилирует все виртуальные функции, устанавливает их аргумент this и изменяет соответствующий член ::vmethods так, чтобы он был указателем на функцию декомпилированного типа. Этот шаг может занять некоторое время...
  3. Теперь у вас есть «Synced IDB», но обратите внимание — плагин ещё не активирован.

Активация плагина для синхронизированного IDB

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

Активируйте ida_kcpp, нажав edit >> Plugins >> Kernel Cache CPP >> Activate Plugin (это установит хуки Hexrays, а также запустит ida_kernelcache.collect_class_info())

Деактивация плагина

нажмите Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin

Обзор возможностей

Синхронизатор виртуальных функций

Переименование виртуальных функций

При переименовании виртуальной функции можно изменить манглированное имя (например, __ZNK10AppleA7IOP9method_86Ev_99) или заменить его на человекочитаемое имя (AppleA7IOP::method_86), которое будет манглировано автоматически. Соответствующий член ANCESTOR::vmethods также будет переименован, а вместе с ним будут переименованы все виртуальные функции, реализующие тот же виртуальный метод.

Обновление прототипа виртуальной функции

То же самое относится и к изменению прототипа виртуальной функции. В этом случае прототип соответствующего члена ANCESTOR::vmethods будет изменён на указатель на функцию типа, который только что был задан, с установкой this как ANCESTOR *. Кроме того, прототипы всех соответствующих реализаций виртуального метода у ПОТОМКОВ ANCESTOR будут изменены с установкой их this как DESCENTANT *.

Улучшенные XREFS

  • Мы добавляем xref от каждой виртуальной функции к её абстрактному члену ::vmethods.
  • Используя ida_referee, мы можем отслеживать использования каждого поля и особенно члена ::vmethods (виртуальные вызовы) в декомпиляторе.
    • Мы также добавили горячую клавишу CTRL+SHIFT+Y для виртуальной функции, чтобы напрямую открывать окно xrefs для соответствующего члена ::vmethod. В IDA есть баг, и это работает только из окна дизассемблера, но не из декомпилятора.

Улучшенная навигация

  • Декомпилятор: двойной щелчок по вызову виртуальной функции открывает окно, позволяющее пользователю выбрать реализацию виртуального метода.

    image-20220707161129479

  • Представление Local Types (Shift+F1):

    • Двойной щелчок по виртуальному методу переходит к реализации (примечание: IDA 9 также показывает диалог переименования, который можно закрыть)
    • Cmd+Enter на виртуальном методе также переходит к реализации (более чистый вариант по сравнению с двойным щелчком)
    • Исправлен баг IDA, из-за которого двойной щелчок по имени структуры, содержащему ::, не выполнял переход.

Будущие улучшения

  1. Добавление поддержки совместимости с классами C++ в IDA7.2. Требует изменения раскладки структур ida_kernelcache, что мы пока не сделали по причинам обратной совместимости
  2. Добавление интерфейса разрешения конфликтов имён/прототипов.

Мета

Авторы: Uriel Malin, Ievgen Solodovnykov и Omer Porzecanski из Cellebrite Labs. Разработано и протестировано для IDA 9.2 на macOS с Python 3.13

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