iPad2 iOS5.1 降级越狱未遂记

没的越狱的PAD,就是二啊!

刚入手时候本来是 iOS 5.0.1,店主也显得很意外,他以为都是 5.1。然后自己用绿毒越狱了折腾了几天,然后某天在“同步助手”什么按钮上点了下,重启后就变白苹果了,这还不是最杯具的。最杯具是我还不知道啥是 SHSH,当然没备什么份了。二啊!

遂尝试网上所有提到的新旧越狱方法,小雨伞、红雪、甚至绿毒0.5什么的都试过了,最后当然而且居然还是不行。在不得已之下,用 iTunes 升级到最新的 5.1(越狱无望)。所以问题就变成降级了,由于系统版本跟 SHSH 挂钩,加上苹果只提供对最新版 iOS 的在线验证,最后不了了之。

说“当然”不行,是因为其实一开始就已经意识到,一旦白苹果,摆在面前就是一条不归路了,至少在 5.1 的越狱问世之前是这样。我倒不是说一定得免费,起码让我能用个快捷方式、装个好软件之类的吧。乖乖的用 AppStore 吧,它还不乖乖的让你用,进去要不断重试,下载也要不断重试。

说“居然”不行,是因为理论上,让我去找 iOS 的漏洞我是做不到,但让我研究下苹果升级(对我来说当然是降级)的验证过程是否有什么便宜可占,我始终觉得存在可能。当然,最后还是碰到了大石头,毕竟苹果对客户端和服务器的重要信息都加了密。分享一下个人所得,期待高手参与讨论。

一、设备还原升级的基本过程

1、一般我们会在设置的还原模式,在 iTunes 中,用 shift+restore 来指定一个 iOS 的固件(iPad2,1_5.0.1_9A405_Restore.ipswiPad2,1_5.1_9B176_Restore.ipsw);不加按 shift,则直接在线升级最新版。

2、然后 iTunes 会首先向验证服务器(gs.apple.com)发出一次 request,内容包括一个一次性唯一码、设备 ECID、19个 BLOB 的验证码,包括:AppleLogo、BatteryCharging、BatteryCharging0、BatteryCharging1、BatteryFull、BatteryLow0、BatteryLow1、BatteryPlugin、DeviceTree、KernelCache、LLB、RecoveryMode、RestoreDeviceTree、RestoreKernelCache、RestoreLogo、RestoreRamDisk、iBEC、iBSS、iBoot。

3、如果请求格式正确,服务器会返回一个 response,内容包含一个 APTicket 和目前 iOS 最新版的 19 个 Blob 对应的验证码(这其实就是 SHSH),当其和固件里的 BuildManifest.plist 验证信息符合时,还原才可以继续进行。

4、固件会解压到 C:\ProgramData\Apple Computer\iTunes\iPad Temporary Files\ 中,该目录在升级完后会自动删除。

5、一些需要简单解码并运算的数据会被解压到临时目录:%temp%\PerXXX.tmp 下。例如 APTicket 会被 base64 解码为一个二进制文件:\amai\apticket.der;\amai\debug 下保存了前面对话内容:tss-request.plisttss-response.plist

6、系统会根据 APTicket 里的密匙,将固件里七百多兆的系统包 038-3701-001.dmg(5.0.1)、038-1769-169.dmg(5.1) 开始升级或还原到设备上(这步是个人的猜想)。

7、升级过程的日志保存在:C:\Users\Afly\AppData\Roaming\Apple Computer\iTunes\iPad Updater Logs\ 下,每次升级记录为一个 iPadUpdater.log

二、降级尝试和一些猜想

1、以上所有验证码都可以用 base64 解密。但解密后的内容确是苹果自己的二进制算法加密过的。因为我对 SHSH 中的 APTicket 进行 base64 解码为一个文件,发现跟系统自己解密得到的 apticket.der 一模一样。

2、苹果的二进制加密是可以破解的。我们知道 Mac 系统下十分常见的 plist 格式文件,有明文的也有二进制的。例如 “C:\Users\Afly\AppData\Roaming\Apple Computer\Preferences\com.apple.iTunes.plist”,直接用记事本打开是文件头为 bplist00 的乱码,但用专用的 plistEditor.exe 则可以打开为一普通的 XML。我发现这种乱码跟 apticket.per 直接打开的乱码非常神似。你懂我的意思,假如我将其文件头改为 bplist00 的话,天知道会怎样……

3、ipsw 固件为 zip 格式,可以用 7-zip 打开随便修改里面的文件,iTunes 不会验证该文件包 SHA1 之类的信息。

4、理论上,客户端 iTunes 跟服务器的所有交互信息我们都是可以通过软件截取和修改的。当然,iTool小雨伞之类的 TSS 服务其实就是通过建立本地代理来伪造这个 SHSH 的验证对话。

5、刷机/越狱前的备份还是相当重要滴。不过因为我没有备份,所以也不清楚具体的验证过程是如何的。

6、还原模式或 DFU 模式都差不多,感觉 DFU 问题出现的少一点。如果进入这里也不用多说了。

三、剩下的问题

1、既然 ipsw 包的信息和内容我们都知道、设备信息、SHSH 信息都知道了、外围的 base64 解压我们也知道了,那直接将 5.0.1 固件里的 038-3701-001.dmg 替换并重命名为 5.1 固件里的 038-1769-169.dmg,然后直接选取升级不就行了?我也以为这样就可以了实现无痛降级了。

一开始挺顺利,iPad2 重启进还原模式,开始还原,然后报错(代码14),查看日志,说“没有拿到 metadata,访问被拒绝”。是滴:dmg 包是有解压密码的。所以才有了上面我说 apticket.per 一定包含解压此文件的密匙的猜想了。

2、一切会到起点:苹果的二进制加密

个人基本肯定其加密跟 plist 的加密一样,只不过其文件头比较特殊,plistEditor 之类的软件无法识别而已,而其的解密方法我又无法编译出来。试过用 UltraEdit 修改其文件头,尺寸不对应老失败。

3、假如能解密出 apticket 的这个加密,我们也可以得到 038-1769-169.dmg 的解压密码,也可以知道该密码存放在那个字段,从而进行伪造。

如果能来到这步,我觉得,就算最新版本的固件无法越狱,但随意降级应该是不成问题滴。客户端和服务器的通讯伪造我知道一些,但二进制等汇编什么的,我就弱项了,期待高手参与!

四、一些代码截图

小雨伞默认保存的 SHSH(YourECID-ipad2,1-5.1.shsh),解压后其实就是一个二进制的 plist 格式的文件,下图是用文本打开和支持 plist 的软件打开对比:

二进制 plist 格式(SHSH)

将 SHSH 的 APTicket 字段进行 base64 解码并存为文件然后直接用文本打开,和系统保存的 apticket.der 进行对比:

APTicket

——圈蓝色的地方看起来好像是明文,其实从 plist Editor 里根本没看到这些字符串,说明这是苹果的某种编码。这在 APticket 中也可以看到。

——圈红色的地方看起来就像是 XML 文件里的一个 <tag>。这在 APTicket 中也明显可以看到。

五、相关软件收集

绿毒 absinthe-win-0.4(iPhone4S/iPad2 @iOS5.0.1) :http://cache.greenpois0n.com/dl/absinthe-win-0.4.zip

最新版小雨伞 tinyumbrella-5.10.12:http://kuai.xunlei.com/d/EAKPVFGKTYLO

最新红雪 redsn0w 0.9.10b8b:http://kuai.xunlei.com/d/EAKPVFGKTYLO

可读取二进制 plist plistEditor 绿色版:http://kuai.xunlei.com/d/EAKPVFGKTYLO

读取 sqlite 数据格式 Sqliteman-1.2.2绿色版:http://kuai.xunlei.com/d/EAKPVFGKTYLO

可将 base64 编码解码为文件的 YeaBase64:http://kuai.xunlei.com/d/ERWYMJFRYXKD

One thought on “iPad2 iOS5.1 降级越狱未遂记

  1. 粉粉。。

    只看懂了标题 :(