Les KexecUtils de Winocm pour iOS

Ce sont quatre petits utilitaires qui permettent de charger une «autre» de chaîne de démarrage à partir de l'interface utilisateur d'iOS (appareil completement démarré).
1) ibsspatch : D'après ce que j'ai lu, il est utilisé pour retirer les vérifications de signatures sur l'iBSS (RELEASE) pour permettre de charger le kernel (cas d'iOS 4.x et les versions antérieures) ou l'iBEC (iOS 5.x et les versions ultérieures) qui est lui aussi «patché».
Pour les appareils compatibles avec l'exploit BootROM Limera1n (A4 et antérieurs), il est possible d'utiliser l'outil de jailbreak RedSn0w pour «patcher» la chaîne du démarrage en DFU et ainsi utiliser l'iBSS résultant décrypté avec kloader ou multi_kloader.

Pour obtenir des chargeurs d'amorçage DFU «patchés» en utilisant RedSn0w, il est premièrement préférable d'aller vider le cache de l'application et ensuite définir les «boot-args» désirés («verbose boot» et le «Root Device» dans le cas d'un dualboot). Puis, on sélectionne le fichier IPSW de la version d'iOS à laquelle l'on veut obtenir l'iBSS «patché» et l'on clique sur le bouton «Jailbreak».
RedSn0w «patchera» alors les différents éléments du démarrage d'iOS. Il faut annuler le Jailbreak en fermant RedSn0w, puisque l'on désire seulemt garder les fichiers utilisés. On retrouve ceux-ci dans "C:\\Utilisateurs\[utilisateur]\AppData\Roaming\redSn0w" (Windows 7). Il est important de noter que kloader fonctionne uniquement avec des fichiers .img3 decryptés.
Utilisation d'ibsspatch :
Dans le MobileTerminal, >root#ibsspatch [iBSS decrypté (entrée)] [iBSS «patché» (sortie)]
Exemple : >root#ibsspatch /var/mobile/images/iBSS.n88ap.RELEASE_decrypted.dfu /var/mobile/images/iBSS.n88ap.RELEASE_decrypted_patched.dfu
2) img3maker : Sert à créer un fichier IMG3 personnalisé et permet entre autre définir les valeur désirées au niveau de l'entête.
3) kloader : En résumé, il permet de placer un fichier IMG3 personnalisé en mémoire vive puis le charge. Il est possible d'utiliser kloader pour charger le début d'une «nouvelle» chaîne de démarrage et ainsi faire un genre de «dual-boot», c'est-à-dire démarrer sur un second système d'exploitation. Par exemple, l'iPad 2 de Winocm utilisé pour le triple-boot dans sa vidéo comprend 6 partitions, soit Système [id = 0, disk0s1s1] (iOS 5), Données [id = 1, disk0s1s2] (iOS 5), Système [id = 2, disk0s1s3] (iOS 6), Données [id = 3, disk0s1s4] (iOS 6), Système [id = 4, disk0s1s5] (iOS 7), Données [id = 5, disk0s1s6] (iOS 7). Son iPad démarre sous iOS 5 (il est à noter qu'elle semble posséder un iPad 2 avec iOS 5 correctement signé), elle utilise kloader pour charger le LLB (il est aussi possible que ce soit l'iBSS) d'iOS 6. Celui-ci est «patché» pour annuler la vérification des signatures et de l'intégrité puisque l'argument "boot-partition" sera modifié pour démarrer sur la partition système d'iOS 6 (le «checksum» ne sera plus valide, c'est pourquoi il faut «patcher» le LLB contre la vérification des signatures). Il est à noter que l'argument "rd" (Root Device) peut aussi être utilisé pour démarrer sur une autre partition. Au lieu de boot-partition = "2" pour démarrer sur le second système, ce sera rd = "disk0s1s3". À partir du LLB (RELEASE), l'iBoot* (RELEASE) sera chargé, dont la partition système d'iOS 6 est définie avec l'argument de démarrage boot-partition = "2" ou encore rd = "disk0s1s3". Finalement, puisqu'iBoot est capable d'intéragir avec le système de fichiers, un kernel d'iOS 6 est chargé à partir de /System/Library/Caches/com.apple.kernelcaches pour démarrer le Système.
L'outil kloader est, on pourrait dire (quelques restrictions s'appliquent), un remplacement à un exploit BootROM, mais seulement pour le second système chargé. Pour les appareils sans exploit BootROM (A5+), le dernier iOS signé devra quand même être installé, activé puis jailbreaké (à ce moment, l'exécution du code non-signé est possible) pour permettre l'utilisation de kloader avec MobileTerminal. Pour ce qui est de ceux dont il existe un exploit BootROM (A4-), l'activation peut être contournée et l'appareil est déja en partie jailbreaké parce que l'exécution du code non-signé est possible depuis le début de la chaîne de démarrage.
Pré-requis pour que kloader, on va dire «fonctionne» :
a) Un appareil iOS
b) iOS supérieur ou égal à 6.0, parce que vous allez obtenir l'erreur «illegal instruction» si on le lance sous iOS 5 en descendant.
c) Un jailbreak qui «patch» le Task_for_pid du Kernel. RedSn0w ainsi que Pangu pour 7.1.2 (iPhone 4) le font.
d) Les KexecUtils de Winocm pour iOS, dans ma source Cydia pré-compilés et enpaquetés prêt à être utilisés.
Utilisation de kloader :
Dans le MobileTerminal, >root#kloader [Bootloader en IMG3]
Exemple : >root#kloader /var/mobile/images/iBSS.n88ap.RELEASE_decrypted_patched.dfu
Prendre note que les fichiers .dfu sont en réalité au format IMG3.


Étude de la chaîne du démarrage lors de l'utilisation de kloader :
Fonctionne sous un appareil exécutant iOS 6.x ou ultérieur, avec ou sans exploit BootROM disponible (A5+, limité aux appareils à architecture armv7).

Mode normal, SecureROM (RELEASE) --> LLB (RELEASE) --> iBoot (RELEASE) -->DeviceTree + Kernel* (RELEASE) --> Système de fichiers sur NAND --> kloader / LLB* (RELEASE) --> iBoot* (RELEASE) --> DeviceTree + «Second» Kernel* (RELEASE) --> Système de fichiers sur NAND du second iOS
Exemple probable du «Triple-Boot» de Winocm :

Mode normal, SecureROM (RELEASE) --> [iOS 5] LLB (RELEASE) --> [iOS 5] iBoot (RELEASE) -->[iOS 5] DeviceTree + Kernel* (RELEASE) --> [iOS 5] Système de fichiers sur NAND --> kloader / [iOS 6] LLB* (RELEASE) --> [iOS 6] iBoot* (RELEASE) --> [iOS 6] DeviceTree + Kernel* (RELEASE) --> [iOS 6] Système de fichiers sur NAND
Note : En violet signifie l'endroit où la chaîne de confiance est brisée pour permettre l'exécution du code non-approuvé.
4) Multi_Kloader : Même principe que kloader, mais permet de placer deux fichiers IMG3 personnalisés en mémoire vive. Utilisation de multi_kloader :
Dans le MobileTerminal, >root#multi_kloader [Bootloader Stage 1 en IMG3] [Bootloader Stage 2 en IMG3]
Exemple : >root#multi_kloader /var/mobile/images/LLB.n88ap.RELEASE_decrypted_patched.img3 /var/mobile/images/iBoot.n88ap.RELEASE_decrypted_patched.img3
Note : L'astérix (*) devant le nom d'un élément de démarrage signifie qu'un patch lui est appliqué.


Copyright © 2020 — Pierre-Marc Bonneau

Conditions d'utilisation