知物由學 | 保護iOS應用有新招,IPA加固打擊黑產“復刻”

網易易盾發表於2020-11-20
雖然蘋果宣稱所有的裝置和應用軟體都很安全,但iOS系統並非想象中那麼牢固,也有可能會被惡意軟體攻擊,更嚴重的是被黑產利用,造成經濟損失。不少遊戲的官方iOS版本剛推出,就有人尋找漏洞和越獄辦法,由此復刻山寨版的應用進行牟利。對此,iOS應用應該採取相應的加固保護措施,當機立斷殺滅黑產蛀蟲,避免安全漏洞被大規模“鑽空子”。 對於iOS應用的加固保護,通用的做法都是使用Xcode外掛的模式,基於原始碼進行加固。這種方式可以有效的保護使用者的原始碼安全,沒有洩露的風險。但是,原始碼加固也有幾個比較明顯的不足:

1)加固容易出錯
由於原始碼加固也需要執行完整的預編譯、編譯、連結流程,所以加固中途可能會出現一些編譯錯誤,導致加固失敗。

2)加固時間變長
原始碼加固除了執行正常的預編譯、編譯、連結流程外,還需要額外執行加密、混淆操作。所以,加固時間,相比Xcode直接打包要變長一些。

3)跨平臺支援有限
現在很多使用者都是使用跨平臺開發工具進行應用開發,這種方式他們是不需要轉化為Xcode專案就可以直接打包提審Appstore。所以,沒有Xcode專案也就沒法進行原始碼加固了。

01IPA加固方案概述

雖然被稱為IPA加固方案,但是該方案並不是基於IPA進行加固,而是基於Archive檔案(Archive實際上是一個資料夾),由Archive再匯出IPA。


知物由學 | 保護iOS應用有新招,IPA加固打擊黑產“復刻”


IPA加固方案,是基於 LLVM的 中間程式碼技術進行的,所以Xcode專案必須開啟bitcode,然後打包生成Archive。如果專案中用到了三方庫,而三方庫沒有開啟bitcode,這也沒關係,我們會提供支援bitcode的工具進行相容。


相比原始碼加固方案,IPA加固方案使用起來更方便。原始碼加固方案,是給使用者傳送加固工具,儲存在使用者的MAC電腦上,然後在該MAC電腦上執行加固命令。而IPA 加固方案,則採用線上加固的形式。使用者透過官網上傳 Archive 壓縮包,進行線上加固;加固完成後,下載加固後的新的Archive 壓縮包到使用者本地,最後匯出用於提審AppStore的IPA。

知物由學 | 保護iOS應用有新招,IPA加固打擊黑產“復刻”



02IPA加固方案優勢


專案型別無限制


IPA加固基於生成的Archive包,跟專案本身無關。不管是React Native、Flutter、weex、uni-app等跨平臺框架,還是Unity、Cocos等遊戲引擎,只要能開啟bitcode 並生成Archive包,就可進行加固。 

開發語言無限制


不管是Object-C,還是swift,以及C/C++或者其他的指令碼語言,IPA加固都一樣相容。隨著版本的迭代,就算他們的語法發生了顛覆性改變,IPA加固也是一樣相容。比如swift,如果是原始碼加固的方式,需要對swift 4、4.2、5各個版本分別做相容處理,這是一項很耗時的工作。

加固過程更穩定


IPA加固沒有了編譯、連結過程,就避免了容易出錯的編譯流程問題,大大提高加固過程的使用體驗。

加固效率更高效


IPA加固方案,執行在易盾高效能的雲伺服器上,所以加固時間更快,更不會因為客戶機器效能的原因導致加固時間延長。同時,Xcode打包後上傳到加固後臺平臺進行加固,不影響開發人員的正常開發以及其他工作。使用IPA加固方案也有2個限制:(1)必須開啟bitcode;(2)生成Archive包。

03IPA加固方案功能


1.程式碼邏輯混淆

對OC/Swift/C/C++程式碼進行控制流平展、控制流偽造、指令替換、間接跳轉、指令分割、不透明謂詞等處理,混淆程式碼執行流程。


知物由學 | 保護iOS應用有新招,IPA加固打擊黑產“復刻”


2.字串加密

對OC/Swift/C/C++程式碼中的明文字串進行加密保護,避免攻擊者透過關鍵詞來分析程式碼邏輯。明文字串,加密後如下:   

知物由學 | 保護iOS應用有新招,IPA加固打擊黑產“復刻”


3.防反編譯

防止攻擊者使用逆向分析工具將二進位制程式碼反編譯為虛擬碼。一個完整的函式,經過加固後,函式邏輯完全被隱藏。


以AGEmojiPageView類的setButtonTexts為例。加密前,有完整的實現邏輯可以檢視分析。


知物由學 | 保護iOS應用有新招,IPA加固打擊黑產“復刻”


加固後,setButtonTexts的實現已經被隱藏。

知物由學 | 保護iOS應用有新招,IPA加固打擊黑產“復刻”


4.防二次打包

對應用進行安全校驗,防止IPA被重新簽名釋出,如果重新簽名則直接退出。


5.反除錯

防止應用被LLDB、IDA等工具惡意除錯。


6.防數值修改

遊戲應用中有很多的數值資料,比如攻擊力、血量、魔法值等,修改器可以直接對這些數值進行篡改以達到破解的目的。防數值修改功能,就是讓修改器無法定位到該數值而達到無法修改的目的。


04總結


如果使用者的打包機子效能比較好、不方便對外提供archive包,可以選擇原始碼加固的方式,在使用者本地的機子上進行加固;如果使用者的打包機子效能不是太好、沒有xcode專案原始碼等,可以選擇IPA線上加固方式。 易盾透過多年技術深耕,在iOS安全加固方面有著諸多積累,具備了原始碼加固、IPA加固兩種方式並存的模式,並且在相容性、有效性、便捷性等方面已經具有相當的優勢,為普通應用、遊戲程式提供有效的安全保護。

相關文章