妳知道ios為什麽不能刷任意系統版本嗎?
這段時間,有關降級的消息真的是鬧得沸沸揚揚,結果也是令人生氣。
昨天我就說了,即使不相信也抱著可能會出現的態度,就下載了壹大批固件等著給“主子們”降級,為此還犧牲了硬盤裏的500g,現在真的是越想越火大!
也曾有老哥詢問過有關降級驗證的問題,這到底是怎麽回事呢?
為什麽手機在我們手上,而能否降級的權利卻在蘋果公司的手上呢,今天我將帶來的就是蘋果的降級機制——
壹、離線升級時代
在很久以前,在允許離線升級的時代,蘋果公司其實是無法控制用戶的系統版本的。
這樣壹來用戶可以隨意的升降系統版本。(不過在當時,用戶們渴望的是得到更多的功能,大概只會想著升級而不是降級吧)。
在2009年第49周之前生產的iPhone 3GS及更早版本機器中沒有驗證固件和簽名固件的相關信息,也就是可以直接下載固件刷機,就像現在的安卓系統。所以在此之前的設備可以任意刷機,刷任意版本均可。
二、在線升級時代初期
而在取消離線升級後的早期,iOS Device在升級時會連到服務器,發送設備信息,通過版本驗證。
然後獲得許可後就可以升級。這時候的破解方法是把服務器的“許可”提前存下來,之後重播。(即保存SHSH)
在2009年49周後生產的機器和在此之後的iPhone 4,蘋果通過處理器加入了壹個驗證機制,刷機必須簽名固件。
拿到授權文件為固件簽名。這個授權文件就是我們口中的SHSH,蘋果在iPhone 4s及以後的設備中通過修復處理器漏洞的方式禁止了本地簽名固件的驗證,所以iPhone 4s及以後機型不能通過本地簽名的方式繞過驗證。
4S最初上市時是iOS5,而由於iOS6和iOS7的驗證機制不同,即iOS6以前的用戶要升級到iOS7及以後的系統必須要先升級到iOS6,時過境遷,當時的iOS5不能直接升級到最新的系統,而iOS6卻支持OTA升級到最新系統。
蘋果為了保證iOS5的用戶能夠升級最新版iOS,所以開放驗證,允許這部分用戶先升級到iOS 6.1.3,再通過iOS 6.1.3升級到iOS 9。
網絡上的4s降級教程的原理就是通過修改iOS版本號到iOS 5,然後欺騙蘋果拿到iOS 6的升級許可,然後全新安裝iOS 6。這就是為什麽這個降級需要越獄的原因。
目前Apple改進後的在線驗證方式是iOS Device在升級時,除了發送設備信息,還會生成壹個隨機數(nonce)參與驗證。因此無法用錄制重播法騙過bootloader。
驗證邏輯由bootloader實現,代碼被主芯片secure boot保護,因此難以篡改;
芯片唯壹密鑰藏在OTP中,只能使用不能讀取,因此難以偽造客戶端請求;
再加上使用非對稱算法,服務器端的簽名也難以偽造了;
所以,強制雙向驗證+保護驗證邏輯+保護驗證密鑰,於是目前暫時處於道高壹丈的階段。
可能會有老哥想到偽造,這是可以的,但是驗證服務器可以偽造,驗證結果卻無法偽造,只能截獲真的服務器結果然後重放,這就是數字簽名強大的地方。
三、刷機降級
老哥們不知道有沒有在刷機的時候註意到這些:
正在聯系iPhone軟件更新服務器。
正在驗證已更新的iPhone軟件。
正在驗證已更新的iPhone固件。
如果是沒有開通驗證通道的系統版本,即使成功刷入,也不能通過激活。比如以前沒有開發者權限刷beta版出現激活錯誤。
說起來,就是iphone刷機必須使用iTunes,而且必須聯網才可以刷機。
iTunes在開始刷機之前,會檢查當前iphone的型號是否允許刷入當前所選擇的固件。也就是說蘋果允許妳刷什麽才能刷什麽。至於為什麽不能偽造服務器,我猜想是使用SSL證書進行驗證。而蘋果的SSL證書是無法偽造的,所以也就無法偽造服務器了。
所以,如果真的想偽造,除非具備以下兩個條件
1、破解iTunes,幹掉驗證系統版本的代碼;
2、搞清楚iTunes和蘋果驗證服務器通信的協議,並制作壹個假服務器,允許刷入任何版本的固件。
四、刷機過程
我在這裏就通俗地把刷機這個過程描述壹下,同時分析不能隨意刷機的原因:
1、妳從網上下載壹個ipsw格式的固件,打開iTunes,連接手機,固件就可以刷進去了;
2、實際上,刷機過程中,數據是這麽流動的:“ipsw文件--> iTunes --> iOS設備的CPU --> iOS設備的Flash/eMMC”
3、其中非常關鍵的壹點是:只有CPU才能把固件寫到Flash/eMMC中,所以妳能不能成功刷機,在於CPU同不同意。CPU不同意,妳就刷不進去。
4、由於iOS設備是全盤加密的,往Flash/eMMC裏寫東西要先加密。這個加密密鑰寫在CPU內部,只有CPU才知道。而且每臺設備的密鑰都是不壹樣的。
5、所以,妳沒有密鑰,就無法向Flash/eMMC寫入正確的數據,即使把Flash/eMMC拆下來刷入也不行。
CPU的決定需要驗證來自蘋果服務器的固件簽名,假如固件簽名正確,就可以刷入固件。所以iTunes必須向蘋果服務器詢問這個固件的簽名,提供給CPU。蘋果服務器根據這個固件的真偽、版本號,來決定是否提供簽名。所以,蘋果服務器對妳能否刷入固件是有決定權的。
可以想象以下情景:
iTunes:我要刷入這個固件
CPU:那妳得提供這個固件的簽名
iTunes向蘋果驗證服務器索要了這個固件的簽名
iTunes:這是這個固件的簽名
CPU:這個簽名是真的!這個包可以刷入。
如果固件過期的話,會是以下情景:
iTunes:我要刷入這個固件
CPU:那妳得提供這個固件的簽名
iTunes向蘋果驗證服務器索要這個固件的簽名
蘋果驗證服務器:這個固件過期了,所以我不能給妳提供簽名。(數字簽名使用非對稱加密技術,具有不可偽造性。所以妳不能自行偽造簽名)
雖然數字簽名不能偽造,但是可以保存下來重放。前幾年可以使用SHSH刷入舊版固件,就是這個原理。可以想象以下情景:
iTunes:我要刷入這個固件
CPU:那妳得提供這個固件的簽名
iTunes拿出了收藏多年的舊簽名
iTunes:這是這個固件的簽名
CPU:這個簽名是真的!這個包可以刷入。
(實際上要搭建壹個假的驗證服務器,把收藏多年的舊簽名提供給iTunes)
這種重放攻擊是很容易避免的,所以現在SHSH已經沒用了。妳可以想象成以下情景:
iTunes:我要刷入這個固件
CPU:那妳得提供這個固件的簽名,並且簽名中含有隨機數fasdjhpgia;
收藏的舊簽名中,隨機數不是fasdjhpgia,而是另外壹個,所以無法使用。
最後再來個通俗易懂的:
比如iPhone是壹艘能發射核彈的潛艇,在最早期只需要艦長壹聲命令就可以直接發射核彈(離線升級降級時代)。
後來高層覺得不行,就要求發射核彈之前和總統通話,確認,得到確認指令後才發射(在線驗證)。
但是恐怖分子(黑客)找到了壹個辦法,破解了總統辦公室的電話線,接了壹根接到自己家裏。
核潛艇打電話來要發射核彈的時候,恐怖分子就會模仿總統的語氣和聲音從而讓潛艇以為是真的。
高層還是覺得不行,首先就把電話線全部檢修了壹遍,安全性大幅度提升(A5以後暫時沒辦法)。
然後驗證的時候加壹串及時生成的密碼,兩邊對上才給通過,所以除了有漏洞的設備其他暫時沒辦法了。
所以說,如果保存了SHSH的話,就可以降級,部分機器有boot漏洞的可以直接降級。
但這樣的話不能激活,只能做到偽激活。
篇幅有限,就到這了,有關蘋果的驗證機制老哥們知道了嗎?