1 puntos por GN⁺ 2025-11-28 | 1 comentarios | Compartir por WhatsApp
  • Proyecto que explica en detalle el proceso técnico para ejecutar iOS 6 en un iPod touch de 3.ª generación, un dispositivo sin soporte oficial para esa versión
  • Ejecuta una versión más nueva en hardware antiguo modificando y reconstruyendo componentes clave de iOS como DeviceTree, iBoot, Kernelcache, Restore Ramdisk y el Root Filesystem
  • Usa scripts en Python para comparar y aplicar automáticamente las diferencias de DeviceTree entre el iPhone 3GS y el iPod touch 3, y recurre a parches de iBoot para omitir la verificación de firma de código
  • Para regenerar el Kernelcache, utiliza la herramienta kcgen de macOS para integrar el kernel y los kext de armv7, eliminar símbolos innecesarios y aplicar compresión
  • Tiene un alto valor técnico por ampliar el potencial del hardware antiguo y compartir técnicas de análisis interno de iOS y creación de firmware personalizado

Resumen de los componentes de iOS

  • iOS está compuesto por iBoot, Kernelcache, DeviceTree, el sistema de archivos en espacio de usuario y firmware para coprocesadores, entre otros
    • iBoot es el cargador de arranque y existe en cuatro formas: iBSS, iBEC, LLB e iBoot
    • Kernelcache es un archivo que agrupa el kernel y las extensiones del kernel (kext) en un solo binario
    • DeviceTree define la configuración del hardware y los parámetros de funcionamiento del software, y iBoot lo modifica durante la ejecución
    • El sistema de archivos se divide en el restore ramdisk para instalación y el root filesystem para almacenamiento permanente

Pruebas con iPhone 3GS

  • El iPhone 3GS y el iPod touch 3 usan SoC similares: S5L8920X / S5L8922X
  • Como el iPhone 3GS sí tiene soporte oficial para iOS 6, se probó arrancar iOS 6.0 junto con el iBoot y el DeviceTree de iOS 5.1.1
  • El problema principal fue la incompatibilidad del DeviceTree, ya que iOS 6 requiere nodos y propiedades nuevas como nvram-proxy-data

Modificación de DeviceTree

  • Se creó un script en Python para calcular y aplicar las diferencias entre ambos DeviceTree
    • El script está publicado en el repositorio de SundanceInH2A
  • La propiedad nvram-proxy-data debe incluir un volcado de NVRAM; si se deja vacía, el kernel se detiene en una fase temprana
  • Al aplicarlo al iPod touch 3, primero se eliminaron las entradas exclusivas del iPhone y luego se aplicó el diff

Parches de iBoot

  • De forma predeterminada se realizan bypass de la verificación de firma Image3, inyección de boot-args y parche debug-enabled
  • nvram-proxy-data debe llenarse dinámicamente; usar un valor estático puede sobrescribir la NVRAM real
  • Se reemplaza la llamada a UpdateDeviceTree() para insertar nvram-proxy-data y random-seed
  • Se añade el argumento amfi=0xff para desactivar la firma de código
  • En otras combinaciones de iBoot+kernel, es necesario revisar las diferencias del DeviceTree y la estructura de boot_args

Creación de Kernelcache

  • Existían en builds internas el kernel de iOS 6 y los kext para iPod touch 3, pero para cargarlos al mismo tiempo fue necesario generar un prelinked kernelcache
  • Se generó un kernelcache para armv7 usando la herramienta kcgen de macOS
    • Opciones principales: -arch armv7, -all-personalities, -strip-symbols, -uncompressed
    • Tras eliminar símbolos innecesarios, se convirtió a un único slice con lipo -thin armv7
  • El kernelcache generado se comprimió y luego se empaquetó en un contenedor Image3
  • La lista de kext se armó comparando iOS 5.1.1 e iOS 6.0 del iPhone 3GS, y fue necesario modificar el Info.plist del kext de Wi‑Fi

Modificación de Restore Ramdisk

  • Se aplicó un parche a asr y se cambió options.n88.plist por options.n18.plist para ajustar la distribución de particiones
  • Para instalar el exploit de iBoot, se reimplementó el binario rc.boot
    • Remontaje del ramdisk y configuración de umask
    • Llamada a restored_external -server para restaurar sin reiniciar al finalizar
    • Al completar la restauración, se crea una tercera partición, se escribe el exploit, se configura boot-partition en 2 y luego se reinicia

Modificación de Root Filesystem

  • Se añadió /System/Library/CoreServices/SpringBoard.app/N18AP.plist e incorporaron funciones de iOS 6
  • Se fusionó la configuración de la pantalla de inicio de iOS 5.1.1 con la del iPod touch 4
  • Se agregaron firmwares de Multitouch, Wi‑Fi y Bluetooth
    • En Bluetooth, el valor hardcodeado de /usr/sbin/BlueTool se sobrescribió con /etc/bluetool
  • Al eliminar la clave LimitLoadToHardware del daemon FairPlay, también pudo habilitarse en el iPod touch 3
  • En iOS 6.1 o superior se requieren parches adicionales por la caché de firmas de LaunchDaemon
  • Se modificó el mapa de Product ID: se reemplazó 0x2714 del iPhone 3GS por 0x2715 del iPod touch 3
  • Se modificó getDeviceVariant() de MobileGestalt para que siempre devolviera "A"
  • Al modificar la caché compartida de DYLD, es posible restaurar la firma de código recalculando el hash SHA-1

Exploit de iBoot

  • Se reescribió un exploit basado en un bug del controlador HFS+ de iOS 5
  • Se mejoró para que fuera más determinista que versiones anteriores

Conclusión y planes futuros

  • El trabajo completo no resultó tan difícil como se esperaba y, tras publicar las herramientas, hubo muchas consultas relacionadas con el jailbreak
  • Existe la posibilidad de hacer jailbreak de forma sencilla con parches de kernel e instalación de Cydia
  • El siguiente objetivo es probar la ejecución de iOS 6 en el iPad 1
  • Este proyecto aporta una referencia práctica para analizar la estructura interna de iOS y reutilizar dispositivos antiguos

1 comentarios

 
GN⁺ 2025-11-28
Comentarios en Hacker News
  • Creo que algo así hace mucha falta también para los iDevices
    No tiene sentido que un iPad Air de 1.ª generación, aunque viejo, siga siendo útil y termine tirado como e-waste
    El problema es que Apple ya no le da soporte y además tiene una política que incluso bloquea la instalación de otros sistemas operativos
    En Mac existe OpenCore Legacy Patcher, que permite correr las versiones más recientes de macOS en Macs antiguas

    • Relacionado con eso, hice una lista de apps que permite filtrar aplicaciones que todavía funcionan en dispositivos iOS viejos
    • Este tipo de discusión se siente como una negación de la realidad de los residuos electrónicos
      Más que “viejo pero útil”, simplemente es “un dispositivo viejo”
      El ritmo del avance tecnológico es demasiado rápido, así que un equipo como el iPad Air de 2013 ya tiene problemas incluso para navegar por la web
      Probé usar un Mac mini 2012 con OpenCore Legacy Patcher, pero al final me pasé a Linux por la caída de rendimiento y los kernel panic
      Al final, estos dispositivos hay que verlos como una especie de bien de consumo temporal
      El derecho a reparar es importante, pero la mayoría de la gente no sigue usando dispositivos antiguos
      Si lo comparamos con los autos, aunque un Corolla modelo 1999 fuera completamente open source, la mayoría igual se compraría uno nuevo
    • Con la llegada de Apple Silicon y Tahoe, el futuro de OCLP se volvió incierto
      El equipo de Dortania también dijo que el soporte para Apple Silicon es prácticamente imposible, y parece que a las Macs Intel con chip T2 pronto también se les acabará el soporte
      Da la impresión de que al final también llegará el día en que las Macs antiguas entren en la misma discusión de fin de soporte que el iPhone y el iPad
    • Hace poco compré un iPad Air 1 en Mercari por 25 dólares y está en excelente estado
      Maneja bien EPUB y PDF, pero WebKit está tan desactualizado que navegar por la web es casi imposible
      El kernel parece ser una versión de 2021, pero WebKit da la impresión de haberse quedado detenido desde 2018
    • Me da curiosidad cómo se implementa exactamente eso de “bloquear la instalación de otros sistemas operativos”
  • Esto se sale un poco del tema, pero tengo varios iPhone 5/5s/SE
    Los uso sin conexión para registro de frecuencia cardíaca, control de action cams y grabación de voz
    Siguen siendo pequeños, rápidos y totalmente útiles incluso en 2025

    • Yo me salgo todavía más del tema: una vez intenté quitarle el módulo de radio a un Samsung Galaxy IV
      No sé si en un iPhone se pueda, pero fue un experimento interesante
  • En mis primeros años en Apple trabajé en los proyectos de iOS 6 y Snow Leopard
    Este artículo me hizo recordar la estructura cerrada del sistema operativo y la terminología de esa época, y me dio gusto verlo

  • Todavía adoro mi iPad Air de 2014
    iOS 12.5 fue la última versión, pero la mayoría de las apps siguen funcionando bien
    Lo uso de 6 a 7 horas al día y con un navegador un poco más moderno me bastaría

    • Creo que este es precisamente un caso de obsolescencia programada
      Apple prohíbe en iOS los navegadores que usan su propio motor de renderizado
      Así que cuando se detienen las actualizaciones de iOS, no solo Safari sino también todos los navegadores y las apps con WebView envejecen al mismo tiempo
  • Está interesante, pero si con este método se pudiera hacer downgrade de iOS 26 a iOS 18, eso sí parecería magia de verdad

    • La 26 (Tahoe) tiene muchos errores y poca madurez en todas las plataformas
      Tanto en MacBook como en iPhone, la calidad ya no se siente como antes
    • Probablemente tendría que haber alguna demanda en la UE para que se pudiera hacer downgrade del sistema operativo
      Yo también quisiera volver un teléfono viejo a iOS 16 para hacerle jailbreak
    • Lamentablemente, no hay exploit para ese dispositivo
  • Ojalá existiera en dispositivos Apple un sistema alternativo como Lineage OS

    • La raíz del problema es la política de bootloader bloqueado
      Mientras Apple no lo desbloquee, será imposible instalar sistemas operativos libremente
  • Me pregunto si con este método se podría arrancar iPhone OS 1.0 en un iPhone 2G
    En mi dispositivo solo arranca hasta la 1.1.4, y la 1.1.1 se queda detenida por un fallo de inicialización de FTL
    Me gustaría volver a probar la vieja activación mediante hack de llamada de emergencia, pero perdí el 2G que usaba en aquel entonces

  • Fue un artículo interesante
    Solo que en el ejemplo de código, --bundle-id va al inicio de cada línea, así que prepend es el término correcto

  • Tengo un iPad Air 1 viejo y me pregunto si se puede actualizar desde iOS 12

  • Ojalá se legislara para obligar a las empresas a abrir los dispositivos que ya no reciben soporte