1 Punkte von GN⁺ 2025-11-28 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Projekt, das den technischen Prozess detailliert beschreibt, um iOS 6 auf dem iPod touch der 3. Generation auszuführen, der offiziell nicht unterstützt wird
  • Durch das Modifizieren und Rekonstruieren zentraler iOS-Komponenten wie DeviceTree, iBoot, Kernelcache, Restore Ramdisk und Root Filesystem wird eine neuere Version auf älterer Hardware lauffähig gemacht
  • Mithilfe von Python-Skripten werden die DeviceTree-Unterschiede zwischen iPhone 3GS und iPod touch 3 automatisch verglichen und angewendet; ein iBoot-Patch umgeht zusätzlich die Code-Signatur-Prüfung
  • Für die Neuerstellung des Kernelcache wird das macOS-Tool kcgen verwendet, um Kernel und kexts für armv7 zu integrieren, unnötige Symbole zu entfernen und die Komprimierung durchzuführen
  • Das Projekt ist technisch besonders relevant, weil es das Potenzial älterer Hardware erweitert und Know-how zur Analyse der iOS-Interna sowie zur Erstellung benutzerdefinierter Firmware teilt

Überblick über die iOS-Komponenten

  • iOS besteht aus iBoot, Kernelcache, DeviceTree, dem Userspace-Dateisystem und Firmware für Hilfsprozessoren
    • iBoot ist der Bootloader und liegt in vier Formen vor: iBSS, iBEC, LLB und iBoot
    • Der Kernelcache ist eine Datei, die Kernel und Kernel Extensions (kexts) in einem einzigen Binärformat bündelt
    • Der DeviceTree definiert die Hardwarekonfiguration und Parameter für das Softwareverhalten und wird während der Ausführung von iBoot verändert
    • Das Dateisystem ist in die Installations-Restore Ramdisk und das dauerhaft gespeicherte Root Filesystem unterteilt

Test mit dem iPhone 3GS

  • Das iPhone 3GS und der iPod touch 3 verwenden ähnliche S5L8920X / S5L8922X SoCs
  • Da das iPhone 3GS iOS 6 offiziell unterstützt, wurde getestet, iOS 6.0 zusammen mit iBoot und DeviceTree von iOS 5.1.1 zu booten
  • Das Hauptproblem war ein DeviceTree-Mismatch, da unter iOS 6 neu hinzugefügte Knoten und Eigenschaften wie nvram-proxy-data benötigt werden

Änderung des DeviceTree

  • Es wurde ein Python-Skript geschrieben, um die Unterschiede zwischen den beiden DeviceTrees zu berechnen und anzuwenden
    • Das Skript ist im Repository SundanceInH2A veröffentlicht
  • Die Eigenschaft nvram-proxy-data muss einen NVRAM-Dump enthalten; bleibt sie leer, hängt der Kernel in einer frühen Phase
  • Bei der Anwendung auf den iPod touch 3 wurden iPhone-spezifische Einträge entfernt und anschließend das Diff angewendet

iBoot-Patch

  • Standardmäßig werden Umgehung der Image3-Signaturprüfung, Injection von boot-args und ein debug-enabled-Patch durchgeführt
  • nvram-proxy-data muss dynamisch gefüllt werden; bei statischen Werten besteht das Risiko, dass der echte NVRAM überschrieben wird
  • Der Aufruf von UpdateDeviceTree() wird ersetzt, um nvram-proxy-data und random-seed einzufügen
  • Durch Hinzufügen des Arguments amfi=0xff wird die Code-Signierung deaktiviert
  • Bei anderen Kombinationen aus iBoot und Kernel müssen die DeviceTree-Unterschiede und die Struktur von boot_args geprüft werden

Erzeugung des Kernelcache

  • Ein iOS-6-Kernel und kexts für den iPod touch 3 waren in einem internen Build vorhanden, doch um sie gleichzeitig zu laden, musste ein vorverlinkter Kernelcache (prelinked kernelcache) erzeugt werden
  • Mit dem macOS-Tool kcgen wurde ein Kernelcache für armv7 erstellt
    • Wichtige Optionen: -arch armv7, -all-personalities, -strip-symbols, -uncompressed
    • Nach dem Entfernen unnötiger Symbole wurde mit lipo -thin armv7 in einen einzelnen Slice konvertiert
  • Der erzeugte Kernelcache wurde komprimiert und anschließend in einen Image3-Container verpackt
  • Die Liste der kexts wurde durch Vergleich von iOS 5.1.1 und 6.0 auf dem iPhone 3GS erstellt; zudem musste die Info.plist des Wi‑Fi-kext angepasst werden

Änderung der Restore Ramdisk

  • Durch Patchen von asr und das Ändern von options.n88.plist zu options.n18.plist wurde das Partitionslayout angepasst
  • Zur Installation des iBoot-Exploits wurde die Binärdatei rc.boot neu implementiert
    • Erneutes Mounten der Ramdisk und Setzen von umask
    • Aufruf von restored_external -server, um nach der Wiederherstellung einen Neustart zu verhindern
    • Nach Abschluss der Wiederherstellung wird eine dritte Partition erstellt, der Exploit geschrieben, boot-partition auf 2 gesetzt und anschließend neu gestartet

Änderung des Root Filesystem

  • /System/Library/CoreServices/SpringBoard.app/N18AP.plist wurde hinzugefügt und Funktionen von iOS 6 wurden übernommen
  • Die Home-Screen-Konfigurationen von iOS 5.1.1 und dem iPod touch 4 wurden zusammengeführt
  • Firmware für Multitouch, Wi‑Fi und Bluetooth wurde hinzugefügt
    • Bei Bluetooth wurde die Hardcodierung in /usr/sbin/BlueTool durch /etc/bluetool überschrieben
  • Durch Entfernen des Schlüssels LimitLoadToHardware im FairPlay-Daemon lässt er sich auch auf dem iPod touch 3 aktivieren
  • Unter iOS 6.1 und neuer sind wegen des Signatur-Caches für LaunchDaemons zusätzliche Patches erforderlich
  • Änderung der Product-ID-Zuordnung: 0x2714 des iPhone 3GS wurde durch 0x2715 des iPod touch 3 ersetzt
  • getDeviceVariant() in MobileGestalt wurde so geändert, dass immer "A" zurückgegeben wird
  • Bei Änderungen am DYLD Shared Cache kann die Code-Signatur durch Neuberechnung des SHA-1-Hashs wiederhergestellt werden

iBoot-Exploit

  • Neufassung eines Exploits, der einen HFS+-Treiber-Bug aus iOS 5 nutzt
  • Gegenüber der früheren Version wurde er deterministischer verbessert

Fazit und weitere Pläne

  • Die gesamte Arbeit war weniger schwierig als erwartet; nach der Veröffentlichung der Tools gingen zahlreiche Anfragen zum Thema Jailbreak ein
  • Mit Kernel-Patches und einer Installation von Cydia scheint ein einfacher Jailbreak möglich
  • Das nächste Ziel ist, das Ausführen von iOS 6 auf dem iPad 1 zu testen
  • Das Projekt liefert praktisches Referenzmaterial zur Analyse der iOS-Interna und zur Nutzung älterer Geräte

1 Kommentare

 
GN⁺ 2025-11-28
Hacker-News-Kommentare
  • Ich finde, so etwas ist auch für iDevices absolut nötig.
    Es ergibt keinen Sinn, dass ein iPad Air der 1. Generation, das zwar alt ist, aber immer noch brauchbar, als Elektroschrott weggeworfen wird.
    Das Problem ist, dass Apple es nicht mehr unterstützt und sogar mit seiner Richtlinie, die Installation anderer Betriebssysteme zu blockieren, dagegen vorgeht.
    Für Macs gibt es OpenCore Legacy Patcher, mit dem sich auch auf alten Macs aktuelle macOS-Versionen betreiben lassen.

    • Dazu passend habe ich eine App-Liste erstellt, mit der man Apps filtern kann, die auf alten iOS-Geräten laufen.
    • Solche Diskussionen fühlen sich für mich wie eine Leugnung der Realität von Elektroschrott an.
      Statt „alt, aber noch brauchbar“ ist es eher einfach nur „ein altes Gerät“.
      Der technologische Fortschritt ist so schnell, dass ein Gerät wie das iPad Air von 2013 inzwischen selbst beim Webbrowsing an seine Grenzen stößt.
      Ich habe ein Mac mini von 2012 mit OpenCore Legacy Patcher benutzt, bin aber wegen Leistungseinbußen und Kernel Panics am Ende doch auf Linux umgestiegen.
      Letztlich sollte man solche Geräte als eine Art temporäre Konsumgüter betrachten.
      Das Recht auf Reparatur ist wichtig, aber die meisten Nutzer verwenden alte Geräte nicht dauerhaft weiter.
      Um es mit einem Autovergleich zu sagen: Selbst wenn ein Corolla von 1999 vollständig Open Source wäre, würden die meisten trotzdem ein neues Auto kaufen.
    • Mit dem Aufkommen von Apple Silicon und Tahoe ist die Zukunft von OCLP unklar geworden.
      Das Dortania-Team hat auch gesagt, dass Support für Apple Silicon praktisch unmöglich ist, und es sieht so aus, als würde auch bei Intel-Macs mit T2-Chip die Unterstützung bald enden.
      Am Ende wird wohl auch bei alten Macs irgendwann dieselbe Debatte über das Supportende geführt werden wie bei iPhone und iPad.
    • Ich habe mir kürzlich bei Mercari ein iPad Air 1 für 25 Dollar gekauft, und es ist in ausgezeichnetem Zustand.
      EPUBs und PDFs verarbeitet es gut, aber WebKit ist so veraltet, dass Webbrowsing fast unmöglich ist.
      Der Kernel scheint aus dem Jahr 2021 zu sein, aber WebKit scheint seit 2018 nicht mehr aktualisiert worden zu sein.
    • Ich frage mich, wie genau das Blockieren der Installation anderer Betriebssysteme technisch umgesetzt wird.
  • Etwas abseits vom Thema, aber ich habe mehrere iPhone 5/5s/SE.
    Ich nutze sie offline ausschließlich für Herzfrequenzaufzeichnung, Actioncam-Steuerung und Sprachaufnahmen.
    Sie sind immer noch klein und schnell und auch 2025 noch völlig brauchbar.

    • Um noch weiter abzuschweifen: Ich habe einmal beim Samsung Galaxy IV das Funkmodul entfernt.
      Ich weiß nicht, ob das auch bei einem iPhone möglich ist, aber es war ein interessantes Experiment.
  • In meiner frühen Zeit bei Apple habe ich an iOS 6- und Snow-Leopard-Projekten gearbeitet.
    Beim Lesen dieses Artikels kamen mir alte geschlossene OS-Strukturen und Begriffe wieder in den Sinn, was schön war.

  • Ich liebe mein iPad Air von 2014 immer noch.
    iOS 12.5 ist zwar die letzte Version, aber die meisten Apps funktionieren gut.
    Ich benutze es 6 bis 7 Stunden am Tag, und ein etwas neuerer Browser würde mir völlig reichen.

    • Für mich ist das ein Paradebeispiel für geplante Obsoleszenz.
      Apple verbietet auf iOS Browser mit eigener Rendering-Engine.
      Wenn also iOS-Updates ausbleiben, veralten nicht nur Safari, sondern alle Browser und Apps mit WebView gleichzeitig.
  • Interessant ist das schon, aber wenn man damit von iOS 26 auf iOS 18 downgraden könnte, wäre das wirklich magisch.

    • 26 (Tahoe) ist auf allen Plattformen buggy und unfertig.
      Sowohl auf dem MacBook als auch auf dem iPhone ist die Qualität nicht mehr so wie früher.
    • Wahrscheinlich bräuchte es erst eine EU-Klage, bevor OS-Downgrades möglich werden.
      Ich würde auch gern ein altes Handy auf iOS 16 zurücksetzen und jailbreaken.
    • Leider gibt es für das betreffende Gerät keinen Exploit.
  • Ich wünschte, es gäbe für Apple-Geräte auch ein alternatives OS wie Lineage OS.

    • Das Grundproblem ist die Bootloader-Sperrpolitik.
      Solange Apple sie nicht aufhebt, ist eine freie Installation anderer Betriebssysteme unmöglich.
  • Ich frage mich, ob man mit dieser Methode auf einem iPhone 2G iPhone OS 1.0 booten könnte.
    Auf meinem Gerät bootet nur bis 1.1.4, und bei 1.1.1 bleibt es mit FTL-Initialisierungsfehlern hängen.
    Ich würde die alte Aktivierung per Notruf-Hack gern noch einmal ausprobieren, aber mein damaliges 2G habe ich verloren.

  • Interessanter Artikel.
    Im Codebeispiel sollte --bundle-id allerdings an den Anfang jeder Zeile gesetzt werden, daher ist prepend korrekt.

  • Ich habe noch ein altes iPad Air 1 und frage mich, ob man es von iOS 12 aus upgraden kann.

  • Es wäre gut, wenn gesetzlich vorgeschrieben würde, dass Geräte, die Unternehmen nicht mehr unterstützen, zwangsweise geöffnet werden müssen.