1 points par GN⁺ 2025-11-28 | 1 commentaires | Partager sur WhatsApp
  • Projet décrivant en détail le processus technique permettant de faire fonctionner iOS 6 sur un iPod touch de 3e génération, officiellement non pris en charge
  • Exécution d’une version plus récente sur du matériel ancien en modifiant et en reconstruisant des composants essentiels d’iOS comme le DeviceTree, iBoot, le Kernelcache, le Restore Ramdisk et le Root Filesystem
  • Utilisation d’un script Python pour comparer et appliquer automatiquement les différences de DeviceTree entre l’iPhone 3GS et l’iPod touch 3, avec un patch iBoot pour contourner la vérification de signature du code
  • Pour la recréation du Kernelcache, usage de l’outil kcgen de macOS afin d’intégrer le noyau et les kext armv7, de supprimer les symboles inutiles et d’appliquer la compression
  • Forte portée technique par l’extension du potentiel d’un ancien matériel et le partage de techniques d’analyse de la structure interne d’iOS et de création de firmware personnalisé

Vue d’ensemble des composants d’iOS

  • iOS se compose notamment de iBoot, du Kernelcache, du DeviceTree, du système de fichiers en espace utilisateur et du firmware destiné aux processeurs auxiliaires
    • iBoot est le chargeur de démarrage, décliné en quatre formes : iBSS, iBEC, LLB et iBoot
    • Le Kernelcache est un fichier regroupant le noyau et les extensions du noyau (kext) dans un seul binaire
    • Le DeviceTree définit la configuration matérielle et les paramètres de fonctionnement logiciel, et il est modifié par iBoot pendant l’exécution
    • Le système de fichiers est séparé entre le restore ramdisk pour l’installation et le root filesystem pour le stockage permanent

Test sur iPhone 3GS

  • L’iPhone 3GS et l’iPod touch 3 utilisent des SoC S5L8920X / S5L8922X similaires
  • Comme l’iPhone 3GS prend officiellement en charge iOS 6, un test de démarrage d’iOS 6.0 a été effectué avec l’iBoot et le DeviceTree d’iOS 5.1.1
  • Le principal problème venait d’une incompatibilité du DeviceTree, iOS 6 exigeant de nouveaux nœuds et propriétés, dont nvram-proxy-data

Modification du DeviceTree

  • Un script Python a été écrit pour calculer et appliquer les différences entre les deux DeviceTree
    • Le script est publié dans le dépôt SundanceInH2A
  • La propriété nvram-proxy-data doit contenir un dump de la NVRAM ; si elle est laissée vide, le noyau se bloque à une étape précoce
  • Pour l’application à l’iPod touch 3, les éléments spécifiques à l’iPhone ont été supprimés avant l’application du diff

Patch iBoot

  • Les opérations de base consistent à contourner la vérification de signature Image3, injecter des boot-args et appliquer un patch debug-enabled
  • nvram-proxy-data doit être rempli dynamiquement ; l’usage d’une valeur statique risquerait d’écraser la NVRAM réelle
  • L’appel à UpdateDeviceTree() est remplacé afin d’insérer nvram-proxy-data et random-seed
  • L’argument amfi=0xff est ajouté pour désactiver la signature du code
  • Avec d’autres combinaisons iBoot+noyau, il faut vérifier les différences de DeviceTree et la structure boot_args

Génération du Kernelcache

  • Un noyau iOS 6 et des kext pour l’iPod touch 3 existaient dans une build interne, mais leur chargement simultané nécessitait la création d’un prelinked kernelcache
  • L’outil kcgen de macOS est utilisé pour générer un kernelcache armv7
    • Options principales : -arch armv7, -all-personalities, -strip-symbols, -uncompressed
    • Après suppression des symboles inutiles, conversion en slice unique avec lipo -thin armv7
  • Le kernelcache généré est ensuite compressé puis empaqueté dans un conteneur Image3
  • La liste des kext a été établie en comparant iOS 5.1.1 et 6.0 sur l’iPhone 3GS, avec nécessité de modifier l’Info.plist du kext Wi-Fi

Modification du Restore Ramdisk

  • Patch de asr et remplacement de options.n88.plist par options.n18.plist pour ajuster le partitionnement
  • Réimplémentation du binaire rc.boot afin d’installer l’exploit iBoot
    • Remontage du ramdisk et définition de umask
    • Appel à restored_external -server pour éviter un redémarrage après la restauration
    • Une fois la restauration terminée, création de la troisième partition, écriture de l’exploit, définition de boot-partition sur 2 puis redémarrage

Modification du Root Filesystem

  • Ajout de /System/Library/CoreServices/SpringBoard.app/N18AP.plist et prise en compte des fonctionnalités d’iOS 6
  • Fusion de la configuration de l’écran d’accueil d’iOS 5.1.1 avec celle de l’iPod touch 4
  • Ajout des firmwares Multitouch, Wi-Fi et Bluetooth
    • Pour le Bluetooth, le hardcoding de /usr/sbin/BlueTool est surchargé via /etc/bluetool
  • Suppression de la clé LimitLoadToHardware du daemon FairPlay afin de l’activer aussi sur l’iPod touch 3
  • À partir d’iOS 6.1, des patchs supplémentaires sont nécessaires en raison du cache de signature des LaunchDaemon
  • Modification de la map des Product ID : remplacement du 0x2714 de l’iPhone 3GS par le 0x2715 de l’iPod touch 3
  • Modification de getDeviceVariant() dans MobileGestalt pour qu’il renvoie toujours "A"
  • Lors de la modification du cache partagé DYLD, le recalcul du hash SHA-1 permet de rétablir la signature du code

Exploit iBoot

  • Réécriture d’un exploit utilisant un bug du pilote HFS+ d’iOS 5
  • L’exploit a été amélioré pour devenir plus déterministe que les versions précédentes

Conclusion et suite

  • L’ensemble du travail s’est révélé moins difficile que prévu, et la publication des outils a suscité de nombreuses questions liées au jailbreak
  • Un jailbreak simple semble possible via des patchs noyau et l’installation de Cydia
  • Prochain objectif : tester l’exécution d’iOS 6 sur iPad 1
  • Le projet fournit une ressource concrète pour l’analyse de la structure interne d’iOS et la réutilisation d’appareils anciens

1 commentaires

 
GN⁺ 2025-11-28
Commentaires sur Hacker News
  • Je pense qu’il faut absolument ce genre de chose aussi pour les iDevices
    C’est absurde qu’un iPad Air de 1re génération, ancien mais encore utilisable, finisse en déchet électronique
    Le problème, c’est qu’Apple ne le prend plus en charge et applique une politique qui bloque même l’installation d’autres systèmes d’exploitation
    Sur Mac, il y a OpenCore Legacy Patcher, qui permet de faire tourner les dernières versions de macOS sur d’anciens Mac

    • À ce sujet, j’ai créé une liste d’apps qui permet de filtrer les applications fonctionnant encore sur d’anciens appareils iOS
    • Ce genre de discussion ressemble à un déni de la réalité des déchets électroniques
      Ce n’est pas tant « ancien mais encore utilisable » que simplement « un vieil appareil »
      Le rythme du progrès technologique est si rapide qu’un appareil comme l’iPad Air de 2013 peine désormais même à naviguer sur le web
      J’ai essayé d’utiliser un Mac mini 2012 avec OpenCore Legacy Patcher, mais à cause de la baisse de performances et des kernel panics, je suis finalement passé à Linux
      Au fond, il faut voir ce type d’appareil comme une sorte de bien de consommation temporaire
      Le droit à la réparation est important, mais la plupart des utilisateurs ne continuent pas à se servir d’un vieil appareil
      Pour prendre une analogie automobile, même si une Corolla de 1999 devenait entièrement open source, la plupart des gens achèteraient quand même une voiture plus récente
    • Avec l’arrivée d’Apple Silicon et de Tahoe, l’avenir d’OCLP est devenu incertain
      L’équipe de Dortania a aussi dit que la prise en charge d’Apple Silicon était en pratique impossible, et les Mac Intel équipés de la puce T2 risquent eux aussi de perdre bientôt le support
      Au final, le jour viendra sans doute où les anciens Mac connaîtront eux aussi les mêmes débats sur la fin de support que les iPhone et iPad
    • J’ai récemment acheté un iPad Air 1 sur Mercari pour 25 dollars, et il est en excellent état
      Il gère bien les EPUB et les PDF, mais WebKit est tellement ancien que naviguer sur le web est presque impossible
      Le kernel semble dater de 2021, mais WebKit paraît figé depuis 2018
    • Je me demande comment est concrètement implémenté le fait de bloquer l’installation d’un autre OS
  • C’est un peu hors sujet, mais j’ai plusieurs iPhone 5/5s/SE
    Je les utilise hors ligne pour l’enregistrement de la fréquence cardiaque, le contrôle d’action cams et l’enregistrement vocal
    Ils restent compacts, rapides, et tout à fait utilisables en 2025

    • Pour m’éloigner encore plus du sujet, j’ai essayé de retirer le module radio d’un Samsung Galaxy IV
      Je ne sais pas si c’est possible sur iPhone, mais c’était une expérience intéressante
  • Au début de mon passage chez Apple, j’ai travaillé sur iOS 6 et Snow Leopard
    Cet article m’a fait plaisir, car il m’a rappelé l’ancienne structure fermée de l’OS et son vocabulaire

  • J’adore toujours mon iPad Air de 2014
    iOS 12.5 est la dernière version, mais la plupart des apps fonctionnent encore bien
    Je l’utilise 6 à 7 heures par jour, et il me suffirait d’un navigateur un peu plus récent

    • Pour moi, c’est exactement un cas d’obsolescence programmée
      Apple interdit sur iOS les navigateurs qui utilisent leur propre moteur de rendu
      Donc quand les mises à jour d’iOS s’arrêtent, non seulement Safari mais aussi tous les navigateurs et les apps basées sur WebView deviennent obsolètes en même temps
  • C’est intéressant, mais si cette méthode permettait de rétrograder d’iOS 26 vers iOS 18, ce serait vraiment de la magie

    • La 26 (Tahoe) est très boguée et manque de finition sur toutes les plateformes
      Sur MacBook comme sur iPhone, la qualité n’est plus ce qu’elle était
    • Il faudra sans doute au moins un procès de l’UE pour rendre possible le downgrade de l’OS
      Moi aussi, j’aimerais remettre un ancien téléphone sous iOS 16 pour le jailbreaker
    • Malheureusement, il n’existe aucun exploit pour cet appareil
  • J’aimerais bien qu’il existe aussi sur les appareils Apple un OS alternatif comme Lineage OS

    • La racine du problème, c’est la politique de verrouillage du bootloader
      Tant qu’Apple ne l’assouplit pas, l’installation libre d’autres OS restera impossible
  • Je me demande si cette méthode permettrait de démarrer iPhone OS 1.0 sur un iPhone 2G
    Sur mon appareil, seul le 1.1.4 démarre ; le 1.1.1 bloque sur un échec d’initialisation du FTL
    J’aimerais bien refaire l’ancien hack d’activation via appel d’urgence, mais j’ai perdu le 2G que j’utilisais à l’époque

  • Article intéressant
    En revanche, dans l’exemple de code, --bundle-id se met au début de chaque ligne ; prepend est donc le bon terme

  • J’ai un vieil iPad Air 1, et je me demande s’il est possible de le mettre à niveau depuis iOS 12

  • J’aimerais qu’on légifère pour obliger les entreprises à ouvrir de force les appareils qu’elles ne prennent plus en charge