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

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

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

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

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

Категории

Все категории
Loading categories
ida_kernelcache — Инструментарий IDA для анализа kernelcache iOS. | Kitploit
Инструменты/GitHubGitHub/bazad/ida_kernelcache
Безопасность встроенных системСтатический анализБезопасность iOSАнализ уязвимостейОбратная инженерияОтладчикиМобильная безопасностьАнализ Бинарных ФайловАнализ Прошивок
GitHubbazad/ida_kernelcache

ida_kernelcache

Инструментарий IDA для анализа kernelcache iOS.

30585207 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

ida_kernelcache: инструментарий IDA для анализа kernelcache iOS

ida_kernelcache — это модуль IDAPython для IDA Pro, упрощающий работу с kernelcache iOS. Модуль предоставляет функции для:

  • Преобразования новых статических тегированных указателей iOS 12 в обычные указатели ядра.
  • Разбора сегмента __PRELINK_INFO ядра в словарь Python.
  • Переименования сегментов в IDA в соответствии с именем расширения ядра, сегментом Mach-O и секцией Mach-O.
  • Преобразования опознаваемых указателей в некоторых сегментах в смещения IDA.
  • Реконструкции иерархии классов C++ на основе информации OSMetaClass.
  • Символизации таблиц виртуальных методов C++ (как самой vtable, так и её методов).
  • Символизации смещений в секциях __got и функций-заглушек в секциях __stubs.
  • Автогенерации структур IDA, представляющих таблицы виртуальных методов C++.
  • Автогенерации структур IDA, представляющих классы C++ в kernelcache, на основе наблюдаемых паттернов доступа.

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

В дополнение к штатной функциональности модуля ida_kernelcache содержит несколько скриптов, упрощающих анализ kernelcache iOS. Например, с помощью скриптов можно автогенерировать структуры C, используемые функцией.

Многие методы, применяемые в ida_kernelcache, были разработаны для memctl и заимствованы непосредственно из него.

Версии

ida_kernelcache тестировался с IDA Pro 6.95 на kernelcache для iOS 10.1.1, 11.0, 11.2, 11.3.1 и 12.0 beta. В настоящее время поддерживаются только Arm64 kernelcache начиная с iOS 10.

Начало работы

Вам нужно, чтобы в IDA уже был загружен распакованный файл kernelcache. Ссылку для загрузки конкретного IPSW можно найти на сайте Apple, а существует множество публичных инструментов (включая memctl), способных распаковать kernelcache.

В IDA выберите "File" -> "Script file..." в строке меню, затем выберите скрипт ida_kernelcache.py в главном каталоге. Это загрузит модуль ida_kernelcache в интерпретатор IDAPython под именами ida_kernelcache и kc. В приглашении IDAPython введите kc.kernelcache_process() и нажмите Enter, чтобы начать анализ kernelcache. Эта функция выполняет все основные виды анализа, поддерживаемые ida_kernelcache. Функция будет работать несколько минут, пока IDA распознаёт и анализирует новые функции.

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

Модуль ida_kernelcache

ida_kernelcache предназначен для загрузки через ida_kernelcache.py; подмодули в каталоге ida_kernelcache не предназначены для прямой загрузки. Однако ida_kernelcache открывает доступ к функциональности многих из этих подмодулей. Вот что делает каждый из них:

  • ida_utilities: Этот модуль оборачивает некоторые функции IDA, предоставляя более удобный API. Особенно полезны is_mapped, read_word, read_struct, force_function и ReadWords. is_mapped проверяет, отображён ли адрес и, опционально, содержит ли он известное значение. read_word считывает слово переменного размера по адресу. read_struct считывает тип структуры в словарь Python или объект доступа Python, что значительно упрощает разбор структур данных. force_function использует несколько приёмов, чтобы превратить адрес в начало функции в IDA. ReadWords — это генератор для перебора слов данных и их адресов в диапазоне.

  • build_struct: Этот внутренний модуль содержит утилиты для автоматического заполнения структуры IDA на основе последовательности обращений к структуре.

  • class_struct: Этот модуль предоставляет функции для генерации структур IDA, представляющих таблицы виртуальных методов C++ и классы. initialize_vtable_structs сканирует (символизированные) таблицы виртуальных методов и создаёт структуры IDA для хранения указателей на виртуальные методы. initialize_class_structs выполняет анализ потока данных виртуальных методов для выявления обращений к полям каждого класса, а затем строит структуры IDA для представления классов. Инструкции, которые, судя по всему, ссылаются на поле, также преобразуются в ссылки со смещением в структуре. Подробнее см. docstring модуля.

  • classes: Этот модуль определяет тип ClassInfo, который хранит информацию о классах C++ в kernelcache, и предоставляет функцию collect_class_info для сканирования kernelcache на предмет классов и заполнения глобального словаря class_info соответствием имён классов объектам ClassInfo. Тип ClassInfo записывает имя класса, экземпляр OSMetaClass, таблицу виртуальных методов и имя суперкласса для каждого класса C++. Кроме того, каждый объект ClassInfo хранит ссылки на ClassInfo суперкласса и ClassInfo всех прямых подклассов, что упрощает изучение и обход иерархии классов. collect_class_info также сохраняет набор всех таблиц виртуальных методов в глобальном множестве vtables.

  • data_flow: Этот внутренний модуль содержит операции потока данных, используемые остальной частью ida_kernelcache.

  • kernel: Этот модуль предоставляет глобальные переменные base и prelink_info. base — это базовый адрес образа ядра (начало заголовка Mach-O ядра). prelink_info — это разобранный словарь __PRELINK_INFO.

  • kplist: Этот модуль предоставляет функцию kplist_parse для разбора plist в стиле ядра.

  • metaclass: Этот модуль предоставляет функцию initialize_metaclass_symbols, которая добавляет символ для каждого известного экземпляра OSMetaClass.

  • offset: Этот модуль предоставляет функции initialize_data_offsets и initialize_offset_symbols. Первая сканирует сегменты в поисках указателей, которые можно преобразовать в смещения. Вторая символизирует смещения в секции __got каждого kext, если цель смещения имеет символ.

  • segment: Этот модуль предоставляет функцию initialize_segments для переименования сегментов IDA в более полезные. По умолчанию IDA, похоже, создаёт имена сегментов, комбинируя предположение об идентификаторе пакета с секцией Mach-O, описывающей область. initialize_segments извлекает настоящий идентификатор пакета из словаря __PRELINK_INFO и переименовывает каждый сегмент, чтобы включить идентификатор пакета, сегмент Mach-O и секцию Mach-O. Это позволяет, например, различать __TEXT.__const и __DATA_CONST.__const. Этот модуль также предоставляет функцию kernelcache_kext (повторно экспортируемую на верхнем уровне) для определения kext, содержащего указанный адрес (только для старого формата kernelcache с раздельными kext iOS 11).

  • stub: Многие kext в kernelcache содержат функции-заглушки в секции __stubs, которые переходят к функциям в самом ядре. К сожалению, эти заглушки создают барьер для распространения перекрёстных ссылок и информации о типах. Этот модуль не решает эти проблемы, но он немного упрощает просмотр заглушек, автоматически переименовывая функции-заглушки так, чтобы имя целевой функции было видимым. Заглушки и их цели принудительно преобразуются в функции в IDA, что помогает согласовать функции в IDA с функциями в исходном коде.

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