1 pontos por GN⁺ 2025-11-28 | 1 comentários | Compartilhar no WhatsApp
  • Projeto que explica em detalhes o processo técnico para executar iOS 6 no iPod touch de 3ª geração, que não é oficialmente compatível
  • Execução de uma versão mais nova em hardware antigo por meio da modificação e reconstrução de componentes centrais do iOS, como DeviceTree, iBoot, Kernelcache, Restore Ramdisk e Root Filesystem
  • Uso de scripts em Python para comparar e aplicar automaticamente as diferenças de DeviceTree entre o iPhone 3GS e o iPod touch 3, além de patches no iBoot para contornar a verificação de assinatura de código
  • Para regenerar o Kernelcache, foi usada a ferramenta kcgen do macOS para integrar o kernel e os kexts para armv7, remover símbolos desnecessários e aplicar compressão
  • Alto valor técnico por ampliar o potencial de hardware antigo e compartilhar técnicas de análise da estrutura interna do iOS e criação de firmware customizado

Visão geral dos componentes do iOS

  • O iOS é composto por iBoot, Kernelcache, DeviceTree, sistema de arquivos em espaço de usuário e firmware para processadores auxiliares
    • O iBoot é o bootloader, com quatro formas: iBSS, iBEC, LLB e iBoot
    • O Kernelcache é um arquivo que reúne o kernel e as extensões de kernel (kext) em um único binário
    • O DeviceTree define a configuração de hardware e os parâmetros de funcionamento do software, e é modificado pelo iBoot durante a execução
    • O sistema de arquivos é dividido entre o restore ramdisk para instalação e o root filesystem para armazenamento permanente

Teste no iPhone 3GS

  • O iPhone 3GS e o iPod touch 3 usam SoCs semelhantes, S5L8920X / S5L8922X
  • Como o iPhone 3GS tem suporte oficial ao iOS 6, foi feito um teste de boot do iOS 6.0 junto com o iBoot e o DeviceTree do iOS 5.1.1
  • O principal problema era a incompatibilidade do DeviceTree, já que o iOS 6 exige nós e propriedades adicionados recentemente, como nvram-proxy-data

Modificação do DeviceTree

  • Foi criado um script em Python para calcular e aplicar as diferenças entre os dois DeviceTrees
    • O script foi publicado no repositório SundanceInH2A
  • A propriedade nvram-proxy-data precisa incluir um dump da NVRAM; se ficar vazia, o kernel trava nos estágios iniciais
  • Ao aplicar no iPod touch 3, os itens exclusivos de iPhone foram removidos antes de aplicar o diff

Patch no iBoot

  • Por padrão, são feitos bypass da verificação de assinatura do Image3, injeção de boot-args e patch de debug-enabled
  • nvram-proxy-data precisa ser preenchido dinamicamente; usar um valor estático traz o risco de sobrescrever a NVRAM real
  • A chamada UpdateDeviceTree() é substituída para inserir nvram-proxy-data e random-seed
  • O argumento amfi=0xff é adicionado para desativar a assinatura de código
  • Em outras combinações de iBoot + kernel, é necessário verificar as diferenças do DeviceTree e a estrutura de boot_args

Geração do Kernelcache

  • Um kernel e kexts do iOS 6 para o iPod touch 3 existiam em uma build interna, mas para carregá-los ao mesmo tempo foi necessário gerar um prelinked kernelcache
  • Foi usada a ferramenta kcgen do macOS para gerar um kernelcache para armv7
    • Principais opções: -arch armv7, -all-personalities, -strip-symbols, -uncompressed
    • Após remover símbolos desnecessários, ele foi convertido em um único slice com lipo -thin armv7
  • O kernelcache gerado foi comprimido e empacotado em um contêiner Image3
  • A lista de kexts foi montada comparando o iOS 5.1.1 e o 6.0 do iPhone 3GS, com necessidade de ajustar o Info.plist do kext de Wi‑Fi

Modificação do Restore Ramdisk

  • Foi feito patch no asr e alterado options.n88.plist para options.n18.plist para ajustar o layout das partições
  • O binário rc.boot foi reimplementado para instalar o exploit do iBoot
    • Remontagem do ramdisk e configuração de umask
    • Chamada de restored_external -server para evitar reinicialização após a restauração
    • Ao concluir a restauração, criação da terceira partição, gravação do exploit, configuração de boot-partition como 2 e reinicialização

Modificação do Root Filesystem

  • Adição de /System/Library/CoreServices/SpringBoard.app/N18AP.plist e incorporação de recursos do iOS 6
  • Mescla da configuração da tela inicial do iOS 5.1.1 com a do iPod touch 4
  • Adição de firmware de Multitouch, Wi‑Fi e Bluetooth
    • No Bluetooth, o hardcode de /usr/sbin/BlueTool foi sobrescrito com /etc/bluetool
  • A remoção da chave LimitLoadToHardware do daemon FairPlay permite ativá-lo também no iPod touch 3
  • No iOS 6.1 ou superior, são necessários patches adicionais por causa do cache de assinatura do LaunchDaemon
  • Ajuste do mapa de Product ID: substituição de 0x2714 do iPhone 3GS por 0x2715 do iPod touch 3
  • Modificação de getDeviceVariant() em MobileGestalt para sempre retornar "A"
  • Ao modificar o cache compartilhado do DYLD, é possível restaurar a assinatura de código recalculando o hash SHA-1

Exploit do iBoot

  • Reescrita de um exploit que usa um bug no driver HFS+ do iOS 5
  • Melhorado para ser mais determinístico do que a versão anterior

Conclusão e planos futuros

  • O trabalho completo não foi tão difícil quanto o esperado, e após a divulgação das ferramentas surgiram muitas perguntas relacionadas a jailbreak
  • Existe a possibilidade de jailbreak com patches no kernel e instalação do Cydia
  • O próximo objetivo é testar a execução do iOS 6 no iPad 1
  • O projeto oferece material de referência prático para análise da estrutura interna do iOS e reaproveitamento de dispositivos antigos

1 comentários

 
GN⁺ 2025-11-28
Comentários no Hacker News
  • Acho que iDevices também precisam muito disso
    Não faz sentido um iPad Air de 1ª geração, antigo mas ainda útil, acabar virando lixo eletrônico
    O problema é que a Apple não só deixou de oferecer suporte, como também tem uma política que impede até a instalação de outros sistemas operacionais
    No Mac existe o OpenCore Legacy Patcher, que permite rodar versões recentes do macOS até em Macs antigos

    • Relacionado a isso, criei uma lista de apps que permite filtrar aplicativos que ainda funcionam em dispositivos iOS antigos
    • Esse tipo de discussão parece uma negação da realidade do lixo eletrônico
      Em vez de “é antigo, mas ainda serve”, na verdade é só “um dispositivo antigo”
      O ritmo do avanço tecnológico é rápido demais, então um aparelho como o iPad Air de 2013 hoje já sofre até para navegar na web
      Usei um Mac mini 2012 com OpenCore Legacy Patcher, mas por causa de queda de desempenho e kernel panic acabei trocando para Linux
      No fim, esses dispositivos precisam ser vistos como uma espécie de bem de consumo temporário
      O direito ao reparo é importante, mas a maioria dos usuários não continua usando aparelhos antigos
      Fazendo uma analogia com carros, mesmo que um Corolla 1999 virasse totalmente open source, a maioria ainda compraria um carro novo
    • Com a chegada do Apple Silicon e do Tahoe, o futuro do OCLP ficou incerto
      A equipe da Dortania também disse que o suporte a Apple Silicon é praticamente impossível, e parece que os Macs Intel com chip T2 também logo deixarão de ser suportados
      No fim, parece que vai chegar o dia em que até os Macs antigos terão discussões sobre fim de suporte, assim como iPhones e iPads
    • Comprei recentemente um iPad Air 1 no Mercari por 25 dólares, e ele está em ótimo estado
      Lida bem com EPUB e PDF, mas o WebKit é antigo demais, então navegar na web é praticamente impossível
      O kernel parece ser uma versão de 2021, mas o WebKit parece ter parado em algum ponto depois de 2018
    • Fico curioso sobre como exatamente é implementado esse bloqueio de “impedir a instalação de outro SO”
  • Fugindo um pouco do assunto, tenho vários iPhone 5/5s/SE
    Uso offline para registro de frequência cardíaca, controle de action cam e gravação de voz
    Eles ainda são pequenos, rápidos e perfeitamente utilizáveis mesmo em 2025

    • Indo ainda mais longe no off-topic, eu já removi o módulo de rádio de um Samsung Galaxy IV
      Não sei se isso seria possível em um iPhone, mas foi um experimento interessante
  • No começo da minha carreira na Apple, trabalhei nos projetos do iOS 6 e do Snow Leopard
    Ao ler este texto, foi legal lembrar da antiga estrutura fechada do sistema operacional e dos termos usados na época

  • Ainda adoro meu iPad Air de 2014
    O iOS 12.5 foi a última versão, mas a maioria dos apps ainda funciona bem
    Uso de 6 a 7 horas por dia, e só um navegador um pouco mais atual já seria suficiente

    • Acho que este é exatamente um caso de obsolescência programada
      A Apple proíbe navegadores no iOS que usem seus próprios motores de renderização
      Então, quando as atualizações do iOS param, não só o Safari, mas todos os navegadores e apps com WebView ficam obsoletos ao mesmo tempo
  • É interessante, mas se desse para fazer downgrade de iOS 26 para iOS 18 com esse método, aí sim pareceria magia de verdade

    • O 26 (Tahoe) está cheio de bugs e pouco refinado em todas as plataformas
      Tanto no MacBook quanto no iPhone, a qualidade já não é mais como antes
    • Provavelmente só com algum processo na União Europeia seria possível liberar downgrade de SO
      Eu também queria rodar iOS 16 em um celular antigo para tentar fazer jailbreak
    • Infelizmente, não existe exploit para esse dispositivo
  • Seria ótimo se aparelhos da Apple também tivessem um SO alternativo como o Lineage OS

    • A raiz do problema é a política de bootloader bloqueado
      Enquanto a Apple não liberar isso, instalar livremente outro SO será impossível
  • Fico me perguntando se com esse método seria possível dar boot no iPhone OS 1.0 em um iPhone 2G
    No meu aparelho ele só inicia até o 1.1.4, e o 1.1.1 trava com falha na inicialização do FTL
    Eu queria muito tentar de novo a antiga ativação por hack de chamada de emergência, mas perdi o 2G que usava naquela época

  • Foi um texto interessante
    Só que, no exemplo de código, --bundle-id fica no começo de cada linha, então prepend está correto

  • Tenho um iPad Air 1 antigo e queria saber se dá para atualizar além do iOS 12

  • Seria bom se houvesse legislação para obrigar empresas a abrirem à força dispositivos que não recebem mais suporte