轉 iOS應用安全 遊戲安全之IPA破解原理及防禦

2021-07-03 17:45:21 字數 3624 閱讀 3345

本文**:

ios應用安全遊戲應用有乙個很氾濫但被視為雞肋的問題,即ios ipa破解問題。因為國內大多數遊戲靠內購和廣告盈利,遊戲安裝包也只是在早期象徵性的收費,之後就會免費,所以對ios應用安全ipa從只能在購買者裝置安裝變成可免費到處安裝並不關注。

支援三種語言,中文、英文、德文,前景很可觀

4. idownloads **

5. igui **

以上訊息,對於依靠安裝包收費的ios應用開發來說,無疑是噩耗,其實由不少人也在網上號召支援正版,要求智財權保護的力度加強。這些願望或許終有一天會實現,但從技術的角度來分析ios應用安全問題的所在,給出有效的防禦方案,無疑比願望更快。

----破解原理部分----------------------------------------

條件一,裝置越獄,獲得root許可權,去除掉裝置上的簽名檢查,允許沒有合法簽名的程式在裝置上執行

(ios 3.0 出現,不同的ios版本,原理都不一樣)

條件二,解密mach-o可執行檔案

之所以要先獲得正常的ipa的原因是mach-o檔案是有drm數字簽名的,是ios應用安全加密過的,而解密的核心就是解密加密部分,而我們知道,當應用執行時,在記憶體中是處於解密狀態的。所以首要步驟就是讓應用先正常執行起來,而只有正常購買的應用才能達到這一目的,所以要先正常購買。

購買後,接著就是破解了。隨著ios裝置cpu 的不同(arm 6 還是arm 7),mach-o檔案格式的不同(thin binary 還是fat binary),應用是否對破解有防禦措施(檢測是否越獄,檢測應用檔案系統的變化),破解步驟也有所不同,但核心步驟如下:

第一步:獲得cryptid,cryptoffset,cryptsize

cryptid為加密狀態,0表示未加密,1表示解密;

cryptoffset未加密部分的偏移量,單位bytes

cryptsize加密段的大小,單位bytes

第二步:將cryptid修改為0

第三步:gdb匯出解密部分

第四步:用第二步中的解密部分替換掉加密部分

第五步:簽名

第六步:打包成ipa安裝包

整個ipa破解歷史上,代表性的工具如下:

代表工具:crackulous(gui工具)(來自hackulous)

代表工具:clutch(命令列工具)(來自hackulous)

代表工具:poedcrackmod(命令列工具)(來自hackulous)

由rastignac編寫,基於poedcrack,是第乙個支援破解fat binaries的工具。shell編寫

代表工具:cracktm(命令列工具)(來自hackulous)

由madhouse編寫,最後版本為3.1.2,據說初版在破解速度上就快過poedcrack。shell編寫

(以下是bash指令碼工具的發展歷史(指令碼名(作者)),雖然目前都已廢棄,但都是目前好用的ipa 破解工具的基礎。

基於poedcrackmod 和 cracktm

我們可以通過分析這些工具的行為,原理及產生的結果來啟發ios應用安全防禦的方法。

我們以poedcrackmod和clutch為例

一、poedcrackmod分析(v2.5)

原始碼及詳細的原始碼分析見:

通過分析原始碼,我們可以知道,整個破解過程,除去前期檢測依賴工具是否存在(例如ldid,plutil,otool,gdb等),偽造特徵檔案,可以總結為以下幾步:

第一步. 將fat binary切分為armv6,armv7部分(採用swap header技巧)

第二步:獲得cryptid,cryptoffset,cryptsize

第三步. 將armv6部分的cryptid修改為0,gdb匯出對應的armv6解密部分(對經過swap header處理的mach-o檔案進行操作,使其在arm 7裝置上,強制執行arm 6部分),替換掉armv6加密部分,簽名

第四步. 將armv7部分的cryptid修改為0,gdb匯出對應的armv7解密部分(對原mach-o檔案進行操作),替換掉armv7加密部分,簽名

第五步.合併解密過的armv6,armv7

第六步.打包成ipa安裝包

註明:第三步和第四步是破解的關鍵,破解是否成功的關鍵在於匯出的解密部分是否正確完整。

由於binary fat格式的mach-o檔案在arm 7裝置上預設執行arm 7對應**,當需要匯出arm 6對應的解密部分時,要先經過swap header處理,使其在arm 7 裝置上按arm 6執行。

二、clutch分析

對於最有效的clutch,由於只找到了clutch 1.0.1的原始碼(最新版本是1.2.4)。所以從ipa破解前後的區別來觀察發生了什麼。

使用beyondcompare進行對比,發現有以下變動。

1. 正版的itunesmetadata.plist被移除

2.正版的sc_info目錄被移除

(1)sinf為metadata檔案

(2)supp為解密可執行檔案的金鑰

3.可執行檔案發生的變動非常大,但最明顯的事是cryptid的值發生了變化

itunesmetadata.plist 與 sc_info目錄的移除只是為了避免洩露正版購買者的一些基本資訊,是否去除不影響ipa的正常安裝執行。

----破解防禦部分----------------------------------------

在ipa防禦方面,目前沒有預防破解的好辦法,但可以做事後檢測,使得破解ipa無法正常執行以達到防禦作用。

而該如何做事後檢測呢,最直接的檢測方法是將破解前後檔案系統的變化作為特徵值來檢測。

通過分析poedcrackmod原始碼,會發現根據破解前後檔案時間戳的變化,或檔案內容的變化為特徵來判斷是不可靠的,因為這些特徵都可以偽造。如下所示,摘自於poedcrackmod指令碼

1.info.plist

增加signeridentity,(目前主流的minimumosversion版本為3.0,版本3.0之前的需要偽造signeridentity)

偽造info.plist檔案時間戳

2.itunesmetadata.plist 偽造itunesmetadata.plist檔案

偽造itunesmetadata.plist檔案的時間戳

3.mach-o檔案

lamerpatcher方法中,靠替換mach-o檔案中用於檢測的特徵字串來繞過檢測(題外話:裝置是否越獄也可以通過檢測檔案系統的變化來判斷,上篇帖子有講到:

所以最可靠的方法是根據cryptid的值來確定,為0便是破解版。當檢測出破解版本時注意,為了避免逆向去除檢測函式,需要多處做檢測。同時檢測函式要做加密處理,例如函式名加密,並要在多處進行檢測。

而根據特徵值來檢測破解的方法也不是完全沒用的,可以將特徵值加密成無意義的字串,最起碼lamerpatcher方法就無效了。同樣,檢測函式需要做加密處理,並要在多處進行檢測。

看了破解ipa的原理,你會發現,所有的工具和方法都必須執行在越獄機上,因此將安全問題託付給蘋果,幻想他可以將ios系統做得無法越獄,他提供的一切安全措施都能生效(例如安全沙箱,**簽名,加密,aslr,non executable memory,stack smashing protection)。這是不可能的,漏洞挖掘大牛門也不吃吃素的,自己的應用還是由自己來守護

iOS之安全加密

在專案中當我們提交使用者的隱私資料時,比如 登陸密碼 銀行賬號等,一定要使用post請求提交使用者的這些隱私資料。因為get請求的所有引數都直接暴露在url中。同時請求的url一般會記錄在伺服器的訪問日誌中,伺服器的訪問日誌是黑客攻擊的重點物件之一。僅僅用post請求提交使用者的隱私資料,還是不能完...

iOS 執行緒安全之 synchronized的用法

synchronized 的作用是建立乙個互斥鎖,保證此時沒有其它執行緒對self物件進行修改。這個是objective c的乙個鎖定令牌,防止self物件在同一時間內被其它執行緒訪問,起到執行緒的保護作用。例如 乙個電影院,有3個售票員。一場電影的總數量固定。3個售票員售票時,要判斷是非還有餘票。...

遊戲安全防護 高防IP

遊戲行業在網路遊戲行業裡幾乎也算的上比較容易遇到攻擊的遊戲種類之一了。遇到大量攻擊時,除了提高伺服器自身的防禦值以外,使用高防ip的形式防禦攻擊怎麼樣呢?今天就給大家講講高防ip是idc服務商為了讓廣大使用者能更好的防禦攻擊而研發的一款防禦類產品。目前也是比較廣泛應用於遊戲行業的一種防禦類產品。使用...