好久没有降级这件事情了XD
在古老时代,Apple会把装置芯片码(ECID)以及你想要刷的iOS版本拿去签名,生成所谓
的SHSH,有了这个iTunes才会愿意帮你刷iOS。签名是一种单向函数,只要给一样的input
就会生成同样的output,故有人存下SHSH等到Apple不签了把该SHSH喂给iTunes欺骗它是
Apple签的,达到刷非最新版本的目的。
后来Apple学聪明了,在input那边加了个随机产生的资料,也就是nonce。这样一来备份
下来的SHSH就不能用了,因为你每次产生的nonce不同,生成的SHSH也会不同。你如果
要使用备份好的SHSH,那必须要你的装置随机产生的nonce跟你当初备份时的一样才行。
理论上这样应该是完全不用想要降级了,那最近是在说什么呢?
稍微看了一下tihmstar的blog:https://tihmstar.blogspot.de/
状况应该是这样:
1. 如果有JB,tihmstar有办法让你的装置产生特定的nonce。这就是为什么备份SHSH2的
板友们可能会看到六个资料夹,其中五个有一串像乱码的东西。那串乱码就是nonce,
那个资料夹里的SHSH就是针对该nonce去签名出来的。至于为什么需要备份这五个特定
的nonce呢?作者本来说要等Prometheus释出再说明,但是从他的其他回答可以猜测
他是要去改乱数产生器(所以需要已经JB的装置),那估计他修改完产生的nonce应该是
只有 或 很可能是 这五个。
2. 如果没有JB,tihmstar之前有在研究nonce collision,也就是不断重开机,装置有
机会产生一样的nonce。他甚至写了以下的tool让使用者统计自己的装置在不断重新开机
的状况下有多少机率会产生一样的nonce,最常产生的nonce又是哪几个:
https://github.com/tihmstar/noncestatistics
假设装置有不是太低的机率产生出一样的某个nonce,那就可以针对该nonce备份SHSH2,
然后想要刷机时就不断重开机直到随机产生的nonce又出现一样的,就可以刷了(倒)
不过从他的统计:https://ghostbin.com/paste/6k62b
有些装置怎么样就是不会collide啊....
如果以上两点猜测没错的话,其实Prometheus的限制相当大,因为你的装置需要是下列
两者之一:
1. 已经JB,且该JB有enable tfp0或类似东西,才可以修改乱数产生器。以iOS9来说,
9.1那个有,9.3用Luca那个JailbreakMe的有,9.0的盘古没有,而且根据i0n1c:
https://twitter.com/i0n1c/status/810780811800801280 (tihmstar有retweet)
9.0盘古的看来要加上tfp0也很难...
2. 你的装置每次重开机产生的随机nonce要有重复性,而且你有备份到该nonce相关的
SHSH2。重复的原因目前不明,只是看起来越新的装置越不容易重复(6S根本不会啊...)
估计是旧装置的乱数产生器用的seed比较差所以不够"乱"吧...
那如果到目前为止都没有错,那可以进一步得到以下结论:
1. 在iOS 9.1那版盘古JB且有照板上方法备份SHSH2,应该未来可以用Prometheus
2. 在iOS 9.3那版Luca JailbreakMe JB,且有照版上方法备份SHSH2,同上
3. 在iOS 9.3那版但是用的是盘古JB,好像可以重开机回到未JB直接服用Luca JB,
然后同2
4. 在iOS 9.0那版盘古JB,或者其他任意iOS然后根本没有JB,基本上可以去跑跑
noncestatistics 看看你的装置会不会产生重复nonce,然后针对该nonce备份SHSH2,
如果几乎不重复那就只能看别人玩Prometheus了...
5. 承上,有鉴于第四点的装置无法在Apple关掉10.1.1签名的时候用Prometheus刷10.1.1
然后又已知之后Luca的JB只能用在10.1.1 (10.2已经patch掉该漏洞了),那想要尝试
10.1.1 JB势必要趁Apple来在签时刷上10.1.1,只是这样就要入狱等Luca了...
对没有JB的人来说还好,对9.0 JB的人要考虑清楚XD
以上是个人心得,有错还请指正。