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

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

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

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

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

Категории

Все категории
Loading categories
xnu — Гибридное ядро, объединяющее Mach, FreeBSD и IOKit для macOS и iOS. Обеспечивает основные системные службы, каркас драйверов и принудительное применение политик безопасности на x86_64 и ARM64. | Kitploit
Инструменты/GitHubGitHub/apple-oss-distributions/xnu
Безопасность встроенных системКриминалистика памятиОтладчикиАппаратная БезопасностьАнализ Прошивок
GitHubapple-oss-distributions/xnu

xnu

Гибридное ядро, объединяющее Mach, FreeBSD и IOKit для macOS и iOS. Обеспечивает основные системные службы, каркас драйверов и принудительное применение политик безопасности на x86_64 и ARM64.

Репозиторий
3.5k397591 год назадПроверено Kitploit

Популярное

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

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

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

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

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

Что такое XNU?

Ядро XNU является частью операционной системы Darwin и используется в macOS и iOS. XNU — это аббревиатура от X is Not Unix. XNU — это гибридное ядро, объединяющее ядро Mach, разработанное в Университете Карнеги — Меллона, с компонентами из FreeBSD и написанным на C++ API для драйверов, называемым IOKit. XNU работает на архитектурах x86_64 и ARM64 как для однопроцессорных, так и для многопроцессорных конфигураций.

Дерево исходного кода XNU

  • config — конфигурации для экспортируемых API на поддерживаемых архитектурах и платформах.
  • SETUP — базовый набор инструментов для настройки ядра, управления версиями и управления символами kext.
  • EXTERNAL_HEADERS — заголовки, взятые из других проектов, чтобы избежать циклов зависимости при сборке. Эти заголовки должны регулярно синхронизироваться при обновлении исходного кода.
  • libkern — код библиотеки C++ IOKit для управления драйверами и kext.
  • libsa — код начальной загрузки ядра для запуска.
  • libsyscall — интерфейс системных вызовов для пользовательских программ.
  • libkdd — исходный код пользовательской библиотеки для разбора данных ядра, например, структурированных данных ядра.
  • makedefs — правила и определения верхнего уровня для сборки ядра.
  • osfmk — подсистемы на основе ядра Mach.
  • pexpert — платформозависимый код, такой как обработка прерываний, атомарные операции и т.д.
  • security — интерфейсы политик обязательного контроля доступа и связанная реализация.
  • bsd — код подсистем BSD.
  • tools — набор утилит для тестирования, отладки и профилирования ядра.

Как собрать XNU

Сборка ядра DEVELOPMENT

Система сборки xnu может собирать ядро на основе переменных KERNEL_CONFIGS и ARCH_CONFIGS, передаваемых в качестве аргументов. Вот синтаксис:```text make SDKROOT= ARCH_CONFIGS= KERNEL_CONFIGS=

Где:

* `<sdkroot>`: путь к macOS SDK на диске. (по умолчанию `/`)
* `<variant>`: может быть `debug`, `development`, `release`, `profile` и настраивает флаги компиляции и утверждения в коде ядра.
* `<arch>`: может быть допустимой архитектурой для сборки. (Например, `X86_64`)

Чтобы собрать ядро для той же архитектуры, что и работающая ОС, просто введите```text
make SDKROOT=macosx.internal

Кроме того, поддерживается настройка архитектур через ARCH_CONFIGS и конфигураций ядра с помощью KERNEL_CONFIGS.```text make SDKROOT=macosx.internal ARCH_CONFIGS=X86_64 KERNEL_CONFIGS=DEVELOPMENT make SDKROOT=macosx.internal ARCH_CONFIGS=X86_64 KERNEL_CONFIGS="RELEASE DEVELOPMENT DEBUG"

> Примечание: По умолчанию архитектура устанавливается в соответствии с архитектурой сборочной машины, а конфигурация ядра по умолчанию задана для сборки в режиме `DEVELOPMENT`.

Это также создаст загрузочный образ, kernel.[config] и бинарный файл ядра с символами, kernel.[config].unstripped.

Чтобы установить ядро в DSTROOT, используйте цель `install_kernels`:```text
make install_kernels DSTROOT=/tmp/xnu-dst

Для более приятного опыта отладки ядра, с доступом ко всем локальным переменным и аргументам, но без всех дополнительных проверок ядра DEBUG, добавьте что-то вроде следующего в вашу команду make:```text CFLAGS_DEVELOPMENTARM64="-O0 -g -DKERNEL_STACK_MULTIPLIER=2" CXXFLAGS_DEVELOPMENTARM64="-O0 -g -DKERNEL_STACK_MULTIPLIER=2"

Помните заменить `DEVELOPMENT` и `ARM64` на соответствующие сборку и платформу.

> Дополнительные флаги: Вы можете передавать дополнительные флаги компилятору C в командной строке с помощью параметра сборки `EXTRA_CFLAGS`. Эти флаги добавляются к базовым `CFLAGS`, и значение по умолчанию для этого параметра — пустая строка.
>
> Этот параметр позволяет, например, выборочно включать отладочный код, защищённый макросом препроцессора. Пример использования...
>
> ```text
> make SDKROOT=macosx.internal PRODUCT_CONFIGS=j314s 
> EXTRA_CFLAGS='-DKERNEL_STACK_MULTIPLIER=2'
> ```

* Для сборки с конфигурацией ядра RELEASE

    ```text
    make KERNEL_CONFIGS=RELEASE SDKROOT=/path/to/SDK
    ```

### Сборка FAT-образа ядра

Укажите архитектуры в переменной окружения или при выполнении команды make.```text
make ARCH_CONFIGS="X86_64" exporthdrs all

Другие параметры Makefile

  • $ make MAKEJOBS=-j8 # это позволит использовать 8 процессов во время сборки. По умолчанию используется количество, равное удвоенному числу активных процессоров.
  • $ make -j8 # стандартный параметр командной строки также принимается
  • $ make -w # отслеживать рекурсивные вызовы make. Полезно в сочетании с VERBOSE=YES
  • $ make BUILD_LTO=0 # сборка без использования LLVM Link Time Optimization
  • $ make BOUND_CHECKS=0 # отключить -fbound-attributes для этой сборки
  • $ make REMOTEBUILD=user@remotehost # выполнить сборку на удаленном хосте
  • $ make BUILD_CODE_COVERAGE=1 # сборка с поддержкой сбора информации о покрытии кода

Система сборки XNU может опционально выводить цветное форматирование вывода сборки. Чтобы включить это, вы можете либо установить переменную окружения XNU_LOGCOLORS в y, либо передать LOGCOLORS=y команде make.

Настройка версии XNU

Версия xnu извлекается из SDK или KDK путем чтения CFBundleVersion из файла System/Library/Extensions/System.kext/Info.plist. Это можно настроить, установив переменную RC_DARWIN_KERNEL_VERSION в окружении или в командной строке make.

Подробнее см. в doc/building/xnu_version.md.

Форматы отладочной информации

По умолчанию во время фазы установки создается репозиторий отладочной информации DWARF; это «пакет» с именем kernel.development.<variant>.dSYM. Чтобы выбрать более старый формат отладочной информации STABS (где отладочная информация встроена в образ kernel.development.unstripped), установите переменную окружения BUILD_STABS.```sh export BUILD_STABS=1 make

## Сборка KernelCaches

Для тестирования ядра xnu необходимо собрать kernelcache, который связывает kext'ы и
ядро в единый загрузочный образ.
Для сборки kernelcache можно использовать следующие механизмы:

* Использование автоматической генерации kernelcache с помощью `kextd`.
  Демон kextd отслеживает изменения в директории `/System/Library/Extensions`.
  Таким образом можно установить новое ядро следующим образом:

    ```text
    cp BUILD/obj/DEVELOPMENT/X86_64/kernel.development /System/Library/Kernels/
    touch /System/Library/Extensions
    ps -e | grep kextd
    ```

* Ручной вызов `kextcache` для сборки нового kernelcache.

    ```text
    kextcache -q -z -a x86_64 -l -n -c /var/tmp/kernelcache.test -K /var/tmp/kernel.test /System/Library/Extensions
    ```


## Загрузка KernelCache на целевой машине

Разработочное ядро и iBoot поддерживают настройку аргументов загрузки, чтобы можно было безопасно загрузиться в тестовое ядро и, в случае проблем, безопасно вернуться к ранее используемому kernelcache.
Для настройки такого режима выполните следующие шаги:

1. Создайте кеш ядра с помощью команды kextcache как `/kernelcache.test`
2. Скопируйте существующие конфигурации загрузки в альтернативный файл

    ```sh
    cp /Library/Preferences/SystemConfiguration/com.apple.Boot.plist /next_boot.plist
    ```

3. Обновите kernelcache и boot-args для вашей конфигурации

    ```sh
    plutil -insert "Kernel Cache" -string "kernelcache.test" /next_boot.plist
    plutil -replace "Kernel Flags" -string "debug=0x144 -v kernelsuffix=test " /next_boot.plist
    ```

4. Скопируйте новую конфигурацию в `/Library/Preferences/SystemConfiguration/`

    ```sh
    cp /next_boot.plist /Library/Preferences/SystemConfiguration/boot.plist
    ```

5. Благословите (bless) том с новой конфигурацией.

    ```text
    sudo -n bless  --mount / --setBoot --nextonly --options "config=boot"
    ```

   Флаг `--nextonly` указывает использовать конфигурацию `boot.plist` только для одной загрузки.
   В случае паники ядра вы сможете легко перезагрузиться и вернуться к исходному ядру.


## Создание тегов и cscope

Настройте среду сборки и из корневой директории выполните:
Скачать инструмент