如何對iOS App進行打補丁和重新簽名
有沒有想過在非越獄設備上運行修改後的iOS二進位文件?比如,你可以使用該技術插裝app,以進行動態分析。又或者你需要進行GPS欺騙,從而可以在鎖區玩Pokemon,但又擔心越獄檢測。
福利來了,你可以按照以下過程對修改後的應用程序進行重新簽名,然後便可在自己的設備上運行該應用程序。注意,該技術僅適用於非FairPlay加密二進位文件(從應用商店獲取的app均為FairPlay加密)。
蘋果的配置和代碼簽名系統本身就讓人有點暈頭轉向,所以,對app進行重新簽名著實不易。只有在配置文件和代碼簽名頭完全正確的前提下,app才能在iOS中運行。
這要求我們了解很多概念——不同類型的證書、BundleID、應用程序ID、團隊標識符,以及如何使用蘋果的構建工具將它們綁定在一起。
總之,讓iOS運行未使用默認方式(XCode)構建的特殊二進位文件可謂一大挑戰。
我們需要使用的工具集包括optool、蘋果的構建工具及一些shell命令。要復現以下步驟,請下載UnCrackableiOS App Level 1。我們的目標是使無法破解的應用程序在啟動時載入FridaGadget.dylib,這樣我們便可使用Frida來插裝它。
獲取開發人員配置文件和證書
配置文件是由蘋果簽名的、將一個或多個設備上的代碼簽名證書列入白名單的plist文件。
換言之,這是蘋果明確允許你的應用程序在某些上下文中運行,比如在選定設備的調試模式下。配置文件還列出了授予你的應用程序的許可權。代碼簽名證書包含將用於進行實際簽名的私鑰。
下面提供了兩種獲取證書和配置文件的方法,具體使用哪一種要看你是不是已註冊的iOS開發人員。
方法一:使用iOS
開發人員帳戶
如果你之前使用Xcode開發和部署過app,那你已經擁有一個代碼簽名證書。使用安全工具列出你現有的簽名身份:
已註冊開發人員可以從蘋果DeveloperPortal獲取配置文件。這需要首先創建一個新的App ID,然後發布一個配置文件——從而讓該App ID可以在你的設備上運行。
對於重新打包的目的,選擇什麼App ID並不重要 – 你甚至可以重新使用一個現有的App ID。重要的是要有一個匹配的配置文件。確保你創建的是開發配置文件而不是分發配置文件,因為稍後需要將調試器附加到應用程序。
在下面的shell命令中,作者使用的是與其公司的開發團隊相關聯的自己的簽名身份。
作者創建了app-id「sg.vp.repackaged」,以及一個名為「AwesomeRepackaging」的配置文件,這便生成了一個名為「AwesomeRepackaging.mobileprovision」的文件——運行示例時改為你自己的文件名。
方法二:使用常規的iTunes
帳戶
即使你不是付費開發人員,蘋果也會給你分發一個免費的開發配置文件。你可以使用你的常規蘋果賬戶並通過Xcode獲取配置文件,只需要創建一個空iOS項目,然後從app容器提取embedded.mobileprovision,此過程詳情請參見ncc博客。
獲得配置文件後便可使用安全工具檢查其內容。除允許的證書和設備外,在配置文件中還可找到授予app的許可權。
稍後的代碼簽名需要這些,所以按以下所示將這些提取到一個單獨的plist文件。還要看一下文件的內容,檢查一下是否有任何異常。
注意應用程序標識符(App ID),其是團隊ID(LRUD9L355Y)和Bundle ID(sg.vantagepoint.repackage)的組合。該配置文件僅對具有此特定app id的應用程序有效。
「get-task-allow」鍵也很重要——當設置為「true」時,允許其他進程(比如調試伺服器)附加到應用程序(因此,在分發配置文件中應設置為「false」)。
其他準備
為了使我們的應用程序在啟動時載入一個附加的庫,我們需要通過一定方法將額外的載入命令插入到主可執行文件的Mach-O頭中。我們使用optool來自動化這個過程。
我們還將使用ios-deploy,這個工具可以讓我們在不使用Xcode的情況下部署和調試iOS應用程序:
要遵循以下示例,你還需要FridaGadget.dylib:
除了上面列出的工具,我們還要使用OS X和Xcode附帶的標準工具(確保你已安裝Xcode命令行開發工具)。
打補丁、重新打包及重新簽名
現在要步入正題了。IPA文件實際上是ZIP文件,所以要使用任意一款zip工具解壓。然後,將FridaGadget.dylib複製到應用程序目錄中,然後使用optool將載入命令添加到「UnCrackable Level 1」二進位文件。
這種明顯的改動無疑會使主可執行文件的代碼簽名無效,因此這不能在非越獄設備上運行。你需要替換配置文件,然後使用配置文件中列出的證書對主可執行文件和FridaGadget.dylib進行簽名。
首先,我們將自己的配置文件添加到包中:
接下來,我們需要確保Info.plist中的Bundle ID與配置文件中指定的匹配。這樣做的原因是codesign將在簽名期間從Info.plist讀取Bundle ID -錯誤的值將導致簽名無效。
最後,我們使用codesign工具對這兩個二進位文件進行重新簽名:
安裝並運行應用程序
一切已經準備就緒,可以運行修改後的app了。按照以下方式在設備上部署並運行app。
如果一切順利,那麼應用程序應該在調試模式下在設備上啟動——附加有lldb。Frida現在也應該能夠附加到應用程序了。你可以使用frida-ps命令來驗證這一點。
現在便可使用Frida像平常一樣插裝app了。
故障排除
如果出現錯誤(通常會發生錯誤),那最有可能是因為配置文件和代碼簽名頭之間不匹配,在這種情況下,最好閱讀官方文檔並了解整個系統的工作原理。
參考來源:http://www.vantagepoint.sg/blog/85-patching-and-re-signing-ios-apps
*本文作者:華為未然實驗室,轉載請註明來自Freebuf.COM
※手電筒驚現海量Root病毒:私自扣費、強裝病毒、惡意彈窗
※SHA-1碰撞攻擊將會對我們產生怎樣的現實影響?
TAG:FreeBuf |
※大打補貼戰 Apple Pay能在中國翻身嗎?
※Apple Watch 3蜂窩網路存在缺陷 還未上市就打補丁
※[圖]尷尬:大學畢業典禮驚現Windows 7打補丁
※科技早報 – Apple Pay大打補貼戰、Skype改版遭用戶抵制 – 20170717
※如何快速黑掉一台沒打補丁的Windows電腦?
※Equifax因Struts漏洞未及時打補丁 面臨4500億美元集體訴訟賠償
※iOS11三打補丁,膠水粘合傷口何時能實現?
※WiFi安全協議曝出嚴重漏洞 蘋果谷歌微軟都要打補丁
※MIT研究人員發明漏洞修復系統,可自動給代碼打補丁
※一夜之間Wi-Fi都不安全了?蘋果谷歌微軟都要打補丁!
※快打補丁!微軟一口氣修復49個安全漏洞:XP赫然在列
※WiFi漏洞幾乎影響所有無線設備 微軟蘋果將打補丁
※「打補丁」恐不成,把職稱評定扳回正軌得「放大招」
※美國瀕海戰鬥艦「打補丁」,從科幻墜入現實
※這國放風造航母幫美打補丁,專家稱無非多出四個靶子
※美軍被菲律賓撞沉的軍艦要1年後才能露面,艦體被打補丁?
※4根鋼樑打補丁!美軍首曝9000噸被撞艦艇水下受損照
※中國女足0-1朝鮮!她們月薪1千、球衣打補丁,可能無緣世界盃
※拉米雷斯一錘定音!蘇寧7號隊長的球鞋居然打補丁:彷彿周星馳