前陣子一個朋友開了一個iPhone有關的Wiki,閑暇之餘幫忙弄了不少資料上去,也把自己很久以前寫的一篇文章重新整理後發上去了。剛開了CSDN部落格,不能讓它空著,就把那篇文章在這裡發一下吧。
這篇文章將討論關於 .ipsw 檔案中各類檔案的解密方法。
準備工具
- Cygwin(運行vfdecrypt及其它Linux工具所需環境,如果您只需使用vfdecrypt也可點此下載所需檔案置於vfdecrypt所在目錄。)
- VFDecrypt(用於解密主檔案系統的工具。)
- img3decrypt(用於解密 img3 檔案。)
- WinRAR(或其它任何可以解壓ZIP壓縮包的工具。)
- HFSExplorer(需要Java運行環境,也可使用收費的PowerISO和其它任何可以解壓dmg鏡像的工具替代。)
注意事項
從3.1版本開始,蘋果改為在Snow Leopard平台下進行封裝韌體,由於Snow Leopard新的檔案管理機制導致在所有非Snow Leopard平台中(比如Leopard或Windows)開啟dmg檔案後某些類型的檔案(比如所有*.lproj目錄中的*.strings檔案)會顯示0位元組大小並且檔案內容為空白。這是由於Snow Leopard把這些檔案的內容存放在了資源分支(Resource fork)中,在Leopard及更早版本的Mac OS X平台下雖然無法讀取但檔案內容仍然存在,但是在Windows中這些檔案的內容會連同整個資源分支被丟棄。目前尚未有有效方法能夠解決此問題。
瞭解 IPSW 檔案檔案說明
IPSW檔案,也就是升級iPhone/iPod touch時所使用的韌體安裝包,使用的是ZIP壓縮演算法,可以直接使用WinRAR等工具開啟。
以iPod touch第一代2.2.1韌體為例,開啟以後可以看見內有如下檔案:
- .fseventsd(目錄)
- Firmware(目錄)
- 018-4437-16.dmg
- 018-4443-16.dmg
- 018-4490-10.dmg
- kernelcache.release.s5l8900x
- Restore.plist
(3.x多了一個BuildManifesto.plist檔案,不過我們不需要用到。)
其中,Firmware目錄存放著重新整理韌體時用於引導裝置的核心檔案,這裡暫時不需要用到;另外三個*.dmg檔案則是iPhone/iPod touch的系統鏡像。
Restore.plist檔案描述了各個檔案的用途。使用記事本等文字編輯器即可開啟。其中包含了如下內容:
<key>RestoreRamDisks</key>
<dict>
<key>Update</key>
<string>018-4437-16.dmg</string>
<key>User</key>
<string>018-4443-16.dmg</string>
</dict>
從中可以知道,018-4437-16.dmg是“升級記憶體盤”(Update Ramdisk),018-4443-16.dmg是“恢複記憶體盤”(Restore Ramdisk),使用iTunes“升級”韌體時實際上是讓裝置啟動並載入018-4437-16.dmg,而“恢複”韌體時啟動的則是018-4443-16.dmg。如果要自行提取 VFDecrypt 密匙的話,就要從恢複記憶體盤裡提取。
繼續往下,會看到這一段:
<key>SystemRestoreImages</key>
<dict>
<key>User</key>
<string>018-4490-10.dmg</string>
</dict>
這段內容表示,重新整理韌體時往機器上寫入的“系統記憶體盤”(System Ramdisk)為018-4490-10.dmg,一般也是占整個韌體體積最多的檔案,因為裡麵包含iPhone/iPod Touch的檔案系統。也就是說,提取檔案系統就是提取這個檔案的內容。
可能有人會問,為什麼要特別說明Restore.plist裡的內容呢?回答是,因為這三個dmg鏡像的檔案名稱不是固定的,不同版本的檔案名稱不一樣,所以要自己看Restore.plist來瞭解每一個檔案是幹什麼的。
密碼編譯演算法
系統記憶體盤 (System Ramdisk) 是 IPSW 檔案中最大的檔案(大約200MB),每個裝置型號對應一個 VFDecrypt 密匙。解密這個檔案需要用到VFDecrypt工具,這就是本文主要討論的。
升級記憶體盤 (Update Ramdisk) 和恢複記憶體盤 (Restore Ramdisk) 以及其他檔案使用被稱作 img3 的演算法加密。加密密匙對應裝置處理器,每種類型的處理器對應一對IV和KEY密匙。請使用img3decrypt來解密這類檔案。
要擷取解密這兩類檔案的密匙,請參閱 VFDecrypt 密匙 頁面,或從 PwnageTool 的 *.plist 檔案中擷取。
解密 img3 檔案
需要用到 img3decrypt
解密需要用到的KEY和IV密匙請在這裡擷取:VFDecrypt 密匙
解密命令:
img3decrypt.exe <輸入檔案> <輸出檔案> [-k <KEY>] [-iv <IV>]
如果不給出 KEY 和 IV 參數,則工具會輸出 KBAG 資料。如果您願意,可以使用 iPhone/iPod Touch 上的硬體 AES 引擎從這些有限的 KBAG 資料中計算出 KEY 和 IV。如果您成功這麼做,歡迎把您計算並驗證過的 KEY 和 IV 添加到VFDecrypt 密匙頁面供大家使用。
關於 img3decrypt 工具的更多功能及使用方法,請移步 http://code.google.com/p/img3decrypt/
解密系統記憶體盤
需要用到 vfdecrypt
解密需要用到的密匙請在這裡擷取:VFDecrypt 密匙。在3.x韌體中,您也可以使用 GenPass 從已解密的恢複記憶體盤提取出密匙。
在本例中我們使用的密匙是 ee4eeeb62240c1378c739696dff9fef2c88834e98877f55a29c147e7d5b137967197392a
如果您在 Cygwin 環境中操作
- 把下載下來的檔案解壓得到vfdecrypt.exe,放到C:/Cygwin/bin目錄中(假設Cygwin安裝在C:/Cygwin,下同)。
- 使用 WinRAR 開啟 .ipsw 檔案,從中解壓出系統記憶體盤(以2.2.1為例,檔案名稱為018-4490-10.dmg),放到C:/Cygwin/home/【您的使用者名稱】。
- 啟動 Cygwin,敲入以下命令:
vfdecrypt -i 018-4490-10.dmg -o 018-4490-10-decrypted.dmg -k ee4eeeb62240c1378c739696dff9fef2c88834e98877f55a29c147e7d5b137967197392a
稍等片刻,便能在C:/Cygwin/home中看到解密後的檔案 018-4490-10-decrypted.dmg。使用 HFSExplorer 開啟即可。
如果您沒有或不想安裝 Cygwin
- 在您喜歡的地方建立一個檔案夾。
- 把vfdecrypt.exe解壓到這個檔案夾中,同樣地把本文開頭所說的運行庫(點此下載)也一併解壓到這個檔案夾中。
- 使用 WinRAR 開啟 .ipsw 檔案,從中解壓出系統記憶體盤,同樣放到這個檔案夾中。
- 在“開始”菜單中點擊“運行”,輸入“cmd”並斷行符號,開啟命令提示字元視窗,並定位到剛才建立的檔案夾
- 敲入以下命令:
vfdecrypt -i 018-4490-10.dmg -o 018-4490-10-decrypted.dmg -k ee4eeeb62240c1378c739696dff9fef2c88834e98877f55a29c147e7d5b137967197392a
稍等片刻,便能在該檔案夾中看到已經解密的 018-4490-10-decrypted.dmg。使用 HFSExplorer 開啟即可。
使用 GenPass 從已解密的恢複記憶體盤提取 VFDecrypt 密匙
除了到VFDecrypt 密匙頁面查閱已知的 VFDecrypt 密匙外,您也可以自己使用 GenPass 從已解密的恢複記憶體盤中計算出 VFDecrypt 密匙。如果您成功這麼做,歡迎把您計算並驗證過的密匙添加到VFDecrypt 密匙頁面供大家使用。
下載原始碼並編譯 GenPass
- 從 http://code.google.com/p/chronicdev/wiki/GenPass 下載 GenPass 的原始碼,儲存為 GenPass.c 放置於C:/Cygwin/home/【您的使用者名稱】中。
- 啟動 Cygwin,敲入以下命令編譯 GenPass 並複製到系統目錄:
gcc GenPass.c -lcrypto -o GenPass
cp ./GenPass.exe /bin
使用 GenPass 計算密匙
解密命令:
GenPass.exe <平台類型> <恢複記憶體盤> <系統記憶體盤>
其中“平台類型”與裝置所使用處理器類型有關,比如 iPod touch 1G 為 s5l8900x,要知道自己的裝置的平台類型,請使用 WinRAR 開啟您所使用的裝置的 .ipsw 韌體檔案,從中找到一個約4M的檔案名稱類似於“kernelcache.release.s5l8900x”的檔案,其中最後一個“.”號後面的即為“平台類型”