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

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

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

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

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

Категории

Все категории
Loading categories
ghidra_kernelcache — фреймворк Ghidra для реверс-инжиниринга kernelcache iOS | Kitploit
Инструменты/GitHubGitHub/0x36/ghidra_kernelcache
Безопасность iOSОбратная инженерияАнализ Бинарных ФайловАнализ Прошивок
GitHub0x36/ghidra_kernelcache

ghidra_kernelcache

фреймворк Ghidra для реверс-инжиниринга kernelcache iOS

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

Популярное

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

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

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

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

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

ghidra_kernelcache: фреймворк для Ghidra для реверс-инжиниринга iOS kernelcache

Этот фреймворк является конечным продуктом моего опыта в реверс-инжиниринге Kernelcache. Обычно я ищу уязвимости путем ручного аудита ядра и его расширений и автоматизировал большинство вещей, которые действительно хотел видеть в Ghidra, чтобы ускорить процесс реверсинга, и это оказалось эффективным и экономит много времени. Фреймворк работает на iOS 12/13/14/15 и на macOS 11/12 (как kernelcache, так и одиночные KEXT) и был опубликован с намерением помочь людям начать исследования ядра iOS без необходимости готовить собственное окружение. Как я считаю, этот фреймворк (включая набор инструментов, которые он предоставляет, и некоторые базовые знания IOKit) достаточен для начала взлома Kernelcache.

Фреймворк полностью написан на Python и может быть расширен для создания других инструментов. Он предоставляет несколько базовых API, которые можно использовать практически в любом проекте, экономя время на чтение многословной документации. Вы можете ознакомиться с основными функциями в каталоге utils/.

Ghidra хорош при анализе Kernelcache, но, как и другие инструменты RE, требует некоторой ручной работы. ghidra_kernelcache предоставляет хорошую отправную точку для исправления проблем как в начале, так и в процессе реверс-инжиниринга, обеспечивая качественный вывод декомпилятора.

Существует похожий проект, созданный @_bazad в IDAPro под названием ida_kernelcache, который предоставляет хорошую отправную точку для исследователей, желающих работать с образом ядра в IDA. Мой фреймворк немного похож на работу Брэндона, но выходит за ее рамки, предлагая гораздо больше возможностей, чтобы сделать процесс работы с kernelcache менее болезненным.

Возможности:

  • Символизация iOS kernelcache.
  • Восстановление иерархии классов C++ и виртуальных таблиц.
  • Ссылки на вызовы виртуальных методов.
  • Автоматическое исправление диспетчерских таблиц внешних методов как для ::externalMethod(), так и для ::getTargetAndMethodForIndex().
  • Применение пространств имен к методам классов.
  • Распространение имен символов и типов по аргументам функций.
  • Применение сигнатур функций для известных функций ядра.
  • Импорт старых структур и классов из старого проекта в новый.

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

Установка

Клонируйте репозиторий:```sh git clone https://github.com/0x36/ghidra_kernelcache.git

**Важное примечание**: Проект протестирован на Ghidra 10.1_PUBLIC и 10.2_DEV и не является обратно совместимым.

Перейдите в *`Windows → Script Manager`*, нажмите на *`script Directory`*, затем добавьте *`ghidra_kernelcache`* в список путей к каталогам.
Перейдите в *`Windows → Script Manager`*, в списке *scripts* перейдите в категорию *`iOS→kernel`* и отметьте плагины, которые там видны, они появятся на панели инструментов GHIDRA.

В каталоге [logos/](https://github.com/0x36/ghidra_kernelcache/tree/master/logos) вы можете разместить свои собственные логотипы для каждого инструмента.

## Символизация iOS kernelcache

`ghidra_kernelcache` на первом этапе требует [iometa](https://github.com/Siguza/iometa/) (создан [@s1guza](https://twitter.com/s1guza)), мощный инструмент, предоставляющий информацию о классах C++ в двоичном файле ядра. Замечательно то, что он работает как отдельный бинарный файл, поэтому вывод можно импортировать в вашу любимую среду обратной разработки, просто проанализировав его. Моя среда берет вывод iometa и анализирует его для символизации и исправления виртуальных таблиц.

### Использование
После распаковки ядра выполните следующие команды:```sh
$ iometa -n -A /tmp/kernel A10-legacy.txt > /tmp/kernel.txt
# if you want also to symbolicate using jtool2
$ jtool2 --analyze /tmp/kernel

Загрузите kernelcache в Ghidra, НЕ ИСПОЛЬЗУЙТЕ BATCH import, загрузите его как образ Mach‑O.
После загрузки и автоматического анализа Kernelcache нажмите на иконку на панели инструментов или просто нажмите Meta‑Shift‑K, затем укажите полный путь к выводу iometa, который в нашем случае — /tmp/kernel.txt.

Если вы хотите использовать символы jtool2, вы также можете использовать jsymbol.py, расположенный в категории iOS→kernel.

iOS kernelcache API

Полные примеры API находятся в ghidra_kernelcache/kc.py

→ Вот несколько примеров манипуляции объектами классов:```py from utils.helpers import * from utils.class import * from utils.iometa import ParseIOMeta

ff = "/Users/mg/ghidra_ios/kernel.txt" iom = ParseIOMeta(ff) Obj = iom.getObjects() kc = kernelCache(Obj)

symbolicate the kernel

kc.process_all_classes()

symbolicate the classes under com.apple.iokit.IOSurface bundle

kc.process_classes_for_bundle("com.apple.iokit.IOSurface")

symbolicate the classes under kernel bundle

kc.process_classes_for_bundle("kernel")

Process one class (including its parents)

kc.process_class("IOGraphicsAccelerator2")

Clears the content of the class structures (vtables are excluded)

kc.clear_class_structures()

Overwrite the old vtable structure definition and resymbolicate it again

kc.update_classes_vtable()

Reconstructing function call trees by enumerating all pac references and find their corresponding virtual method call

kc.explore_pac()

Как видите, вы можете полностью или частично символизировать kernelcache, если была выбрана частичная символизация, `ghidra_kernelcache` автоматически построит все зависимости классов перед продолжением.
Если запустить скрипт для всего kernelcache (полная символизация), `ghidra_kernelcache` потратит несколько минут на анализ образа ядра.

После завершения Ghidra предоставит следующее:

→ В фильтр закладок добавлена новая категория под названием «iOS»: 

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image1.png" alt="изображение1" width="200"/>
                    
                    
→ Виртуальные таблицы классов IOKit добавлены в закладку «iOS» для лучшего и более быстрого поиска виртуальных таблиц; вы можете просто искать kext или класс, вводя буквы, слова или пакет kext в строке поиска.

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image2.png" alt="изображение2"/>


→ Исправление виртуальной таблицы: дизассемблирует/компилирует неизвестный код, исправляет пространства имён, повторно символизирует методы класса и применяет определение функции к каждому методу:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image3.png" alt="изображение3"/>

→ Создание пространств имён классов и помещение каждого метода в соответствующее пространство имён:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image4.png" alt="изображение4"/>

→ Создание структуры класса с учётом иерархии классов:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image5.png" alt="изображение5"/>

→ Создание vtable классов, и каждый метод имеет собственное определение метода для лучшего вывода декомпиляции: 

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image6.png" alt="изображение6"/>

Полная реализация находится в [`utils/class.py`.](https://github.com/0x36/ghidra_kernelcache/blob/master/utils/class.py)

Вот несколько скриншотов до и после символизации с помощью `ghidra_kernelcache`:

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image7.png" alt="изображение7"/>

<img src="https://raw.githubusercontent.com/0x36/ghidra_kernelcache/master/screenshots/image8.png" alt="изображение8"/>
Скачать инструмент