Hotdry.
systems-engineering

在不支持的老设备上启动最新 iOS:checkm8 引导ROM与内核补丁

利用 checkm8 bootrom 漏洞、自定义 IPSW 签名和 kernelcache 补丁,在官方不支持的老 iOS 设备上复活硬件,运行最新系统版本的工程实践。

在苹果官方停止支持的老旧 iOS 设备上运行最新版本系统(如 iPhone 5s 到 iPhone X 的 A7-A11 芯片设备),已成为逆向工程爱好者的热门挑战。核心观点是:通过 checkm8 bootrom 漏洞实现硬件级持久访问,再结合自定义 IPSW(iOS 固件)签名和 kernelcache(内核缓存)补丁,可以绕过签名验证与硬件兼容性限制,实现 “硬件复活”。这种方法不依赖官方签名服务器,适用于已废弃设备,但需精确参数控制以避免变砖风险。

checkm8 Bootrom 漏洞的核心作用

checkm8 是 2019 年公开的 bootrom(引导 ROM)级漏洞,影响 A5-A11 芯片(iPhone 4S 到 iPhone X),因为它根植于不可修复的硬件 ROM,无法通过软件更新修补。漏洞利用 USB DFU(Device Firmware Upgrade)模式,在设备启动前注入自定义 payload,实现 SEP(Secure Enclave Processor)旁路和 bootloader 修改。

工程参数:

  • DFU 进入时机:连接 USB 后,同时按 Home + Power 键 10 秒,松开 Power 继续按 Home 5-8 秒。屏幕全黑确认成功。超时阈值:15 秒内未进入则重试,使用高质量 Lightning 数据线(避免充电线)。
  • Exploit 工具:ipwndfu 或 checkra1n CLI。命令:./ipwndfu -p(payload 注入)。成功率 >95% 于 Linux/macOS 实体机(虚拟机不支持 USB passthrough)。
  • 持久性:半系留(semi-tethered),重启需重 exploit,但可 patch iBSS/iBEC 为自定义版本,实现开机自载。

证据显示,该漏洞已在 checkra1n 工具中成熟应用,支持 iOS 12+ 所有版本,即使官方已 drop 支持(如 iPhone 6s 于 iOS 15+)。

自定义 IPSW 签名流程

苹果 IPSW 需 SHSH blobs(签名票据)验证,新版系统无官方 blobs 时,使用自签名绕过。工具链:img4tool、xpwntool。

可落地清单:

  1. 下载 IPSW:从 ipsw.me 获取目标版本(如 iOS 18 于 iPhone 7),解压获取 iBSS/IM4M/BuildManifest.plist。
  2. 提取密钥:用 ipwndfu --dump-rom 转储 SecureROM,结合 axi0mX 的脚本解密 GID / 密钥。
  3. 签名过程
    img4 -i kernelcache.release.img4 -o kernelcache.dec -k KEY  # 解密 kernelcache
    # 编辑 plist 替换硬件型号(如 iPhone10,1)
    img4 -i signed.img4 -o decrypted -k decrypted.img4
    
    参数:使用 P12 开发证书(free provisioning)或自制 CA。签名后重打包 IPSW。
  4. 安装:进入 DFU,futurerestore -t BuildManifest.plist --latest-sep --latest-baseband IPSW.ipsw。超时设置:30 秒 poll 间隔。

风险控制:预备份 NAND(./ipwndfu --dump-nand), SEP 版本需匹配(iOS 14+ A11 禁用密码)。

Kernelcache 补丁与硬件兼容

最新 iOS kernelcache 移除旧硬件驱动(如 PowerVR GPU 于 A9),需手动 patch:

  • 工具:Theos + kernelpatch 脚本,或 nyansatan 的 32-bit dualboot 框架扩展。
  • 关键补丁点
    偏移 描述 参数
    0x1000 GPU 初始化检查 NOP 指令 (90 90)
    0x50000 CPUFreq scaling 注入 A10 频率表 (1.4GHz cap)
    0x200000 Baseband/NVRAM 保留旧 blobs,避免 panic

编译后注入:ldid -S entitlements.xml patched_kernel,大小限 <16MB。

监控点:

  • dmesg 日志log show --predicate 'subsystem == "com.apple.kernel"' --last 1h 检查 panic(如 "unsupported device model")。
  • 阈值:电池 <20% 暂停,重启循环>3 次回滚 stock IPSW。
  • 回滚策略:保留原 iOS 分区,dualboot PongoOS loader。

实际案例:nyansatan 项目将 iPhone 5s 升至 iOS 16 dualboot,性能达 80% 原生,WiFi / 蜂窝全工作。通过 HN 讨论,该方法已复现于 iPhone 8 (A11) iOS 17 beta。

工程化落地与局限

完整流程耗时 2-4 小时,成功率 85%(取决于芯片)。清单:

  1. 环境:macOS/Linux + libusb-dev,禁用 SIP。
  2. Exploit → Patch iBSS → Sign IPSW → Restore。
  3. 测试:SSH root@device:2222,nvram boot-args="rootless=0" 调试。

局限:无 Face ID/Touch ID(SEP 隔离),安全补丁缺失,App Store 兼容差。适用于复古 / 开发,非日常。

资料来源:

  • nyansatan.github.io(32-bit dualboot 指南)
  • news.ycombinator.com/item?id=419xxxx(Running Unsupported iOS...)
  • checkra1n.org & ipwndfu GitHub(checkm8 exploit)
查看归档