来源:http://disp.cc/b/522-4v3W

最近有一場Jailbreak的conference,叫做WWJC

裡面請到很多駭客來講解越獄相關知識

包括p0sixninja, iH8sn0w, pod2g等等

其中iH8sn0w的演講主要在講SHSH以及iOS降級

影片在http://www.youtube.com/watch?feature=player_embedded&v=ltBwbSc_j28

iH8Sn0w Keynote - JailbreakCon 2012 (WWJC) - YouTube

Tweet This Video:  Follow: @JailbreakCon Social Network: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  Facebook:...

投影片在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猛,但是在大部分是大叔的駭客圈

也已經相當不簡單了...

[转]SHSH, APTicket以及iOS降級的更多相关文章

  1. iPhone 3gs 5.0.1降級到4.3.3 昨晚搞定(有shsh備份)

    經過昨天白天一天的學習和準備,終於一次降級成功. 手機未降級時狀態: 無鎖港版   3GS 16G  固件:5.0.1  基帶:05.16.05 記錄且分享降級完整步驟: 準備以下軟件.工具 官網固件 ...

  2. 使用 NuGet 更新套件時將 jQuery 升級到 2.0.2 應該如何降級

    我們在 Visual Studio 2012 裡面會使用 NuGet 管理員管理那些常用的開發函式庫,例如jQuery.Json.NET. EntityFramework.ELMAH.… 等等.各位可 ...

  3. 偏执的iOS逆向研究员:收集全版本的macOS iOS+越狱+内核调试

    Intro 虽然“只有偏执狂才能够生存”这句话已经被假药停给毁了,但是作为一只有逼格的高大上的iOS逆向分析研究员,难道如果有现成的macOS/iOS全版本镜像可以下载并且无限“漫游”,难道你就不想来 ...

  4. Unity3D教程:茄子童萌會

    http://s.epb.idv.tw/han-shi-ku/unity Unity 0000 Unity3D學習之路 - C#學習筆記(一) 0001 Unity3D學習之路 - C#學習筆記(二) ...

  5. 比較Backbone.js, Angular.js, Ember.js, Knockout.js 心得

    還記得第一次寫網站的時候,我無意間寫成了 SPA(single page application),當時還沒有SPA這個詞,後來因為廣告主需要不同 url location 頁面的廣告展示,只好把部分 ...

  6. VMware虛擬化技術實作問答

    http://www.netadmin.com.tw/article_content.aspx?sn=1202130002&ns=1203280001&jump=3 Q4:啟用VMwa ...

  7. Exchange Version and UpdateRollups

    Exchange Server 2010 Product name Build number Date KB Microsoft Exchange Server 2010 RTM 14.0.639.2 ...

  8. IE Error: '__doPostBack' is undefined 问题解决

    突然遇到个很奇怪的BUG,翻页控件,其他浏览器一切正常,IE无法翻页,会提示 '__doPostBack' is undefined 后来搜索发现: [原文發表地址] Bug and Fix: ASP ...

  9. H5 App如此强悍,要降薪的恐怕已不只是iOS程序员

    2015年的最后几天,移动开发圈里最为火爆的话题之一无疑是“iOS程序员月薪降至12K”这则报道. 有人认为这是O2O创业遇冷所致,也有人认为这是iOS生态过于封闭致使智能硬件等新领域对iOS开发者的 ...

随机推荐

  1. Openstack本学习笔记——Neutron-server服务加载和启动源代码分析(三)

    本文是在学习Openstack过程中整理和总结.因为时间和个人能力有限.错误之处在所难免,欢迎指正! 在Neutron-server服务载入与启动源代码分析(二)中搞定模块功能的扩展和载入.我们就回到 ...

  2. 6.跑步者--并行编程框架 ForkJoin

    本文如果您已经了解一般并行编程知识.了解Java concurrent部分如ExecutorService等相关内容. 虽说是Java的ForkJoin并行框架.但不要太在意Java,当中的思想在其他 ...

  3. CSharp设计模式读书笔记(20):观察者模式(学习难度:★★★☆☆,使用频率:★★★★★)

    观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新.观察者模式的别名包括发布-订阅(Publish/ ...

  4. tiny210——uboot移植Makefile文章分析

    这东西已经写,我们没有时间发布,如今,终于有时间稍微长送记录汇总uboot学习过程.具体了.以后忘了也能够再温习回来嘛有些特殊字符显示得乱掉了 Makefile追踪技巧: 技巧1:能够先从编译目标開始 ...

  5. Unix/Linux环境C编程新手教程(41) C语言库函数的文件操作具体解释

     上一篇博客我们解说了怎样使用Linux提供的文件操作函数,本文主要解说使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #in ...

  6. 接口自动化测试:参数化封装(excel文件读取)

    log4j.properties文件配置 log4j.rootLogger = DEBUG,stdout,F log4j.appender.stdout = org.apache.log4j.Cons ...

  7. Python 2.7 Exception格式化工具

    首先说一个发现: try: 抛错误,抛异常 except Exception as e: 都被这里抓住了 except Error as e: 这里啥事都没了 然后,说说Exception as e的 ...

  8. SQL点滴30—SQL中常用的函数

    原文:SQL点滴30-SQL中常用的函数 该文章转载自http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 别人的总结,很 ...

  9. 快速构建Windows 8风格应用5-ListView数据控件

    原文:快速构建Windows 8风格应用5-ListView数据控件 本篇博文主要介绍什么是ListView数据控件.如何构建ListView数据控件. 什么是ListView数据控件? 1)  Li ...

  10. SQL点滴13—收集SQLServer线程等待信息

    原文:SQL点滴13-收集SQLServer线程等待信息 要知道线程等待时间是制约SQL Server效率的重要原因,这一个随笔中将学习怎样收集SQL Server中的线程等待时间,类型等信息,这些信 ...