KernelCache

From The French Apple Wiki
Revision as of 10:49, 16 October 2025 by Mxt (talk | contribs) (Created page with "# Kernelcache Le **kernelcache** est un fichier essentiel dans l'écosystème des systèmes d'exploitation d'Apple (iOS, iPadOS, macOS, watchOS, etc.). Il regroupe le noyau du système d'exploitation ainsi que toutes ses extensions (connues sous le nom de KEXTs, pour Kernel Extensions) dans un seul fichier. Ce fichier est ensuite encapsulé et souvent chiffré dans un conteneur spécifique, selon la version du système et le matériel utilisé : un conteneur **IMG3** po...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
  1. Kernelcache

Le **kernelcache** est un fichier essentiel dans l'écosystème des systèmes d'exploitation d'Apple (iOS, iPadOS, macOS, watchOS, etc.). Il regroupe le noyau du système d'exploitation ainsi que toutes ses extensions (connues sous le nom de KEXTs, pour Kernel Extensions) dans un seul fichier. Ce fichier est ensuite encapsulé et souvent chiffré dans un conteneur spécifique, selon la version du système et le matériel utilisé : un conteneur **IMG3** pour iPhone OS 2.0 et supérieur, un conteneur **IMG4** pour les appareils équipés d'une puce A7 ou plus récente et les Apple Watches, ou un conteneur **8900** pour les versions iPhone OS 1.0 à 1.1.4.

Dans ce document, nous allons explorer en détail le fonctionnement du kernelcache, son contenu, les outils utilisés pour l'analyser, ainsi que les évolutions récentes dans son format, notamment à partir de l'iPhone XS (iPhone11) et d'iOS 12.

---

    1. Qu'est-ce que le kernelcache ?

Le kernelcache est une archive qui combine : - **Le noyau** : le cœur du système d'exploitation, responsable de la gestion des ressources matérielles et logicielles. - **Les extensions du noyau (KEXTs)** : des modules logiciels qui étendent les fonctionnalités du noyau, comme les pilotes pour le matériel (USB, stockage, réseau, etc.) ou les frameworks système (sécurité, cryptographie, etc.).

Le kernelcache est optimisé pour réduire le temps de démarrage du système en préchargeant le noyau et ses extensions dans un fichier unique, évitant ainsi le chargement individuel des KEXTs au démarrage. Ce fichier est généralement chiffré pour des raisons de sécurité, en particulier sur les appareils iOS, afin de protéger le système contre les modifications non autorisées.

Le kernelcache est utilisé sur tous les systèmes d'exploitation d'Apple, mais son format et sa structure varient en fonction de l'appareil et de la version du système d'exploitation.

---

    1. Structure du kernelcache

Le kernelcache contient une liste impressionnante d'extensions du noyau, chacune avec un rôle spécifique. Par exemple, pour un kernelcache extrait d'iOS 6.1.3 sur un iPhone 4 (iPhone3,1), l'outil **joker** (disponible sur [newosxbook.com](http://newosxbook.com/)) a permis d'identifier 153 KEXTs. Voici un extrait des extensions présentes dans ce kernelcache, avec leurs adresses de chargement et leurs identifiants :

- **Libkern Pseudoextension** (`com.apple.kpi.libkern`) : Fournit des fonctions de base pour la gestion des KEXTs. - **Mach Kernel Pseudoextension** (`com.apple.kpi.mach`) : Gère les appels système Mach. - **I/O Kit Pseudoextension** (`com.apple.kpi.iokit`) : Framework pour les pilotes matériels. - **AppleARMPlatform** (`com.apple.driver.AppleARMPlatform`) : Support pour les processeurs ARM d'Apple. - **IOCryptoAcceleratorFamily** (`com.apple.iokit.IOCryptoAcceleratorFamily`) : Gestion du chiffrement matériel. - **IOUSBFamily** (`com.apple.iokit.IOUSBFamily`) : Support pour les périphériques USB. - **AppleJPEGDriver** (`com.apple.driver.AppleJPEGDriver`) : Gestion du décodage JPEG. - **IOSurface** (`com.apple.iokit.IOSurface`) : Gestion des surfaces graphiques.

Chaque KEXT est chargé à une adresse mémoire spécifique, et le kernelcache contient également des informations sur les appels système (syscalls) et les traps Mach, qui sont essentiels pour l'interaction entre le noyau et les applications.

      1. Formats de conteneur

Le kernelcache est encapsulé dans différents formats selon les versions d'iOS et le matériel : - **8900** : Utilisé dans iPhone OS 1.0 à 1.1.4, un format simple et non chiffré. - **IMG3** : Introduit avec iPhone OS 2.0, ce format inclut le chiffrement pour sécuriser le noyau. - **IMG4** : Utilisé à partir des puces A7 (iPhone 5s, 2013) et sur les Apple Watches. Ce format est plus moderne et prend en charge des fonctionnalités avancées de sécurité.

---

    1. Analyse du kernelcache

Pour analyser un kernelcache, plusieurs outils spécialisés ont été développés, notamment dans le cadre de la recherche sur la sécurité et le jailbreaking.

      1. L'outil Joker

L'outil **joker**, développé par Jonathan Levin (disponible sur [newosxbook.com](http://newosxbook.com/)), est utilisé pour extraire des informations à partir d'un kernelcache déchiffré. Il permet : - D'extraire les adresses des appels système et des traps Mach. - De lister toutes les extensions du noyau (KEXTs) et leurs adresses de chargement. - D'extraire les KEXTs individuellement (fonctionnalité appelée "Kextraction").