作者iPluto (键盘Apple Genius)
看板iPhone
标题[心得] SHSH, APTicket以及iOS降级
时间Tue Oct 2 14:15:43 2012
最近有一场Jailbreak的conference,叫做WWJC
里面请到很多骇客来讲解越狱相关知识
包括p0sixninja, iH8sn0w, pod2g等等
其中iH8sn0w的演讲主要在讲SHSH以及iOS降级
影片在
https://www.youtube.com/watch?feature=player_embedded&v=ltBwbSc_j28
投影片在
http://tinyurl.com/8wmej24
内容大致整理如下,我自己加上了一点背景知识让文章比较好读:
1. 什麽是SHSH?
简单的说从iPhone 3GS以来任何iDevice要安装iOS都需要经过Apple的认可,而Apple
一般来说只会认可最新版的iOS。SHSH可以看做是Apple的签名,iTunes必须要收到
Apple发的合格SHSH才会进行韧体回复。
SHSH只跟两样东西有关,一个是iOS版本,一个是iDevice的独一无二晶片码ECID,
所以你的iDevice要安装某个版本的iOS,你需要有Apple发给你的机器专属的该iOS
版本SHSH,不能用别人的,也不能用其他iOS版本的,跟你机器里装啥无关。
2. SHSH哪里来?怎麽用来降级?
SHSH理论上是从Apple发的,Apple只会发最新版本的iOS的SHSH,但是因为SHSH只跟
iOS版本以及机器ECID有关,所以举例来说,可以在5.0为最新时跟Apple要5.0 SHSH
等到5.1出了以後,你把之前存好的5.0 SHSH喂给iTunes,iTunes以为是Apple签的,
於是就开始刷5.0,也就是所谓的降级/平刷/非升级到最新版。
没有备份SHSH的状况下,你只能从Apple去取得SHSH,当然只有最新版iOS的,也就是
iTunes只能帮你安装最新版的iOS,谓之强迫升级。
3. SHSH为什麽失效了?
在iOS 5.0开始,Apple Server除了发SHSH还多发了一个叫APTicket的东西。
这是什麽东西呢?SHSH是把ECID跟iOS版本送去给Apple签名得到的产物,ApTicket
也是请Apple签名...但是签的是一个Nonce,它是一个随机产生的72-Byte 16进位码
就是一个随机的东西啦!
看出问题了吗?因为SHSH只跟ECID以及iOS版本有关,只要你的ECID跟iOS版本不变,
iTunes根本分不出来你是备份好的还是Apple新发的
可是APTicket就不一样了,每次都是随机产生的,所以你拿之前旧的喂给iTunes
马上就会被抓到,也就是单纯靠SHSH来降级已经做不到了。
所以严格来说,不是SHSH不见了或者没用了,它还是要用来签一部分的韧体
(LLB跟iBoot),只是光靠SHSH完成不了重刷,还需要APTicket。
4. 那为什麽好像iOS5在有些条件下还是可以降级?
问的好,希望答案不会让你睡着XD
A4 Device(iPad1, iPhone4)以及iPhone3GS都可以直接使用SHSH降级,因为有个硬体
上的漏洞存在,所以很容易(?)可以绕过APTicket的检查(当然还是要有SHSH)
A5开始就比较麻烦了,因为没有硬体上的漏洞,所以需要一些新的手法。
首先要知道iPhone的韧体ipsw在安装时,如果已经有合法的SHSH等等,都会被iTunes
一起包进ipsw然後一起刷进手机。所以APTicket也不例外。在安装时机器里已经有
一个APTicket,记录一个iOS版本和对应的随机码Nonce,在刷韧体的过程第一个
程序是iBEC,他也有记录一个iOS版本,
只要可以把iOS5.x的iBEC刷进去执行,
接下来就可以刷该版本的iOS。那Apple是怎麽决定要不要让你刷某版本的iBEC呢?
理论上要用APTicket来验证,可是在某一个状况不能这样做。
猜到了吗?就是OTAUpdate。因为在OTAUpdate开始後,你是不可能上网的(哪有手机
一边升级自己一边上网的...),所以Apple的检查很简单,就
看机器里面的APTicket
版本,然後接受你刷同版本或更高级的iBEC。在正常的OTAUpdate下,这个APTicket
是Apple在update开始前送进手机的。
好了,那要降级的话,概念就很简单,我要想办法刷进一个比较低版本的APTicket。
取得这个不是很难,因为从iOS5开始小雨伞在帮你存SHSH时也顺手帮你存了一个该版本
的APTicket,当然因为Nonce的关系他没办法直接像SHSH一样使用,但是它是有用的!
现在问题是要怎麽把它刷进去。
假设要从5.1.1降级到5.0.1,步骤大致上是这样:
你的机器安装了5.1.1,里面的APTicket也是5.1.1,根据前面的规则,可以安装并
执行>=5.1.1的iBEC,所以我们开始执行了5.1.1的iBEC。
接下来iTunes会开始安装5.1.1,但是我们把韧体一部分改掉了,把5.0.1的APTicket
偷偷塞进去,然後接下来的LLB跟iBoot两个程序只需要用SHSH签,所以也可以用备份
SHSH签好一起混进去。所以就是整个韧体档多了5.0.1的APTicket,被换掉了LLB跟
iBoot,其他不变。刷机的过程来到5.0.1的iBoot,此时就会达到可以安装5.0.1 iBEC
的状态,把这个5.0.1的iBEC装进去後,又根据前面的一个规则,只要开始跑5.0.1的
iBEC你就可以刷整个5.0.1,降级完成!
5. 那iOS6惹出了什麽麻烦?
现在只要APTicket不合格整个重刷的过程就会直接error跳出,加上Apple开始检查
你在韧体里动什麽手脚。以前可以把APTicket混进去刷但是现在就会被抓到了...
6. 那现在状况是?
A4系列以及3GS已经讲过,因为bootrom洞很大所以有SHSH就够了
iPad 2有4.3 SHSH一样可以降级到任何有SHSH+APTicket的版本,因为4.3根本没有
APTicket,故可以用之前iBEC >= APTicket那招来装旧版iBEC=>旧版iOS
iPad3跟iPhone4S目前可以平刷iOS 5.x,理由就是之前的iBEC版本需>=机器里的
APTicket版本+只要iBEC开始跑就可以刷跟iBEC同版本的iOS,只是现在因为没办法
再把旧版APTicket偷渡进去,故现在只有平刷的选择。
7. 那iPhone 5?
iPhone5在硬体里面就会检查签名,可是完全不检查SHSH只检查APTicket。
(其他机器现在是SHSH和APTicket并行)
不过反正iPhone5也没有什麽可以降级的啊XD
BTW,iH8sn0w今年才17岁,虽然没有geohot or comex猛,但是在大部分是大叔的骇客圈
也已经相当不简单了...
--
◢◤ ◢███◤ ◢◤
◤
◢◤ ◢◤◤
◢◤◤
◢◤
◢◤ ◢███◤◤
◢◤◤
◢◤ ◢◤ ◢██◤ ◢███◤
◢◤◤
◢◤ ◤
◢◤◤
◢◤◤
◢◤◤
◢◤◤◤
◢◤◤◢◤◤
◢◤◤
◢◤◤
◢◤◤
◢███◤◤
◢█◤ ◢███◤◤
◤
◤
◤
◤
◤
◤
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 164.67.195.197
1F:推 raikkonen10:所以能降级吗XD 10/02 14:24
2F:推 old5566:虽然有些看不懂,还是推 10/02 14:25
3F:→ callmeanswer:反正a5就是难搞(疑 10/02 14:28
4F:推 lordmi:虽然知道用意,不过只是要降刷也被封住实在是不方便... 10/02 14:28
5F:推 choselove:好深奥= = 10/02 14:30
6F:推 AirRider:看高手发文长知识:) 10/02 14:30
7F:推 eliczone:推 10/02 14:42
9F:推 polaristin:长知识推! 10/02 15:00
10F:推 leostyle:好文推,17岁...真令人汗颜啊... 10/02 15:06
11F:推 ryanlei:专业文! 10/02 15:26
12F:推 rabbit80891:好文 可惜还是会有一堆人不认真看 10/02 17:03
13F:推 hsin1207: 10/02 17:09
14F:推 Andruw0819:推~ 10/02 17:10
15F:推 whoiam:这就是3GS的好处?>< 10/02 17:32
16F:推 cazy328:想想自己17岁在干嘛 这年轻人真不简单 10/02 19:13
17F:推 mars1396:PUSH 10/02 20:54
18F:推 kuro50624:17岁... 10/02 21:11
19F:推 SkLc:好文 10/02 22:03
20F:推 dragonjc:推 10/02 23:23
21F:推 s890510:17..... 10/03 00:25
22F:→ iPluto:comex一个人搞出jb时也是17岁啊...XD 10/03 01:09
23F:→ iPluto:geohot 19岁就一个人搞出了jb+unlock了 10/03 01:09
24F:推 NicoNeco:好文 10/05 01:55
25F:推 scottnet:我刚加入iOS,这篇解说得很清楚~~感谢你的整理! 10/28 14:17
26F:推 jacka1:这篇好文,朝圣推 (2013) 12/27 15:08