- 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
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
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
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
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
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
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
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
Tanto no MacBook quanto no iPhone, a qualidade já não é mais como antes
Eu também queria rodar iOS 16 em um celular antigo para tentar fazer jailbreak
Seria ótimo se aparelhos da Apple também tivessem um SO alternativo como o Lineage OS
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-idfica no começo de cada linha, então prepend está corretoTenho 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