Zygisk-IL2CppDumper對抗方案

眾所周知,Unity引擎中有兩種腳本編譯器,分別是 Mono 和 IL2CPP 。這兩種腳本編譯器各有優(yōu)勢,同時也存在一些安全性問題,本文將從游戲安全角度對其進(jìn)行分析并提供對策。
Mono 是由跨平臺的開源.NET 實現(xiàn),它允許開發(fā)者使用 C# 等編程語言編寫游戲邏輯,為游戲開發(fā)提供了簡單易用的環(huán)境和高效的腳本編譯速度,得到了一些中小型游戲的青睞。
在 Mono 模式下,游戲 C# 代碼被編譯為 IL (中間代碼) 并生成 dll 文件,然后將 dll 打進(jìn)游戲包文件。但由于 IL 非常容易被 ILSpy / .NET Reflector 等專業(yè)反編譯軟件分析逆向,所以在無保護(hù)情況下,游戲的安全性極差。

相對于 Mono,IL2CPP 可以將游戲 C# 代碼轉(zhuǎn)換為 C++ 代碼,然后編譯為各平臺 Native 代碼。
Native 代碼提高了逆向/反編譯難度,可有效提高外掛開發(fā)和游戲破解的門檻。此外,IL2CPP 還具有執(zhí)行效率高、內(nèi)存占用小等優(yōu)勢,已被大多數(shù)游戲采用。

雖然 IL2CPP 可以在某種程度上提高游戲的安全性,但并非沒有漏洞。在 IL2CPP 模式下,Unity 將 C# 代碼中的類名、屬性名、字符串等信息記錄在 global-metadata.dat 文件,引擎依賴這些數(shù)據(jù)實現(xiàn)某些 C# 語言特征。
而 IL2CPP 啟動時會從這個文件讀取所需要的類名、屬性名等信息,正是這一機制給了破解者可乘之機。
破解者可使用 IL2CPPDumper 解析 global-metadata.dat 文件,并將文件里的類名等字符串信息對應(yīng)到 Native 代碼中去,大幅降低了逆向分析難度。

面對IL2CPPDumper的逆向分析,可采用對 libil2cpp.so 文件、global-metadata.dat 文件進(jìn)行加密來與之對抗,從而避免游戲代碼被分析。
而 Zygisk-IL2CppDumper 、funil2cpp 等逆向工具的出現(xiàn),將游戲安全對抗激烈程度抬升到了新高度。

Zygisk-IL2CppDumper是刷機工具M(jìn)agisk中的一個插件,相比于IL2CPPDumper的靜態(tài)分析,Zygisk-IL2CppDumper有以下幾個特點:
Zygisk-IL2CppDumper可以做到在游戲運行過程中,動態(tài)dump函數(shù)名和函數(shù)偏移,可繞過保護(hù)、加密以及混淆。
啟動游戲后,會在目錄下自動生成dump.cs,即使游戲有檢測到異常閃退,也不影響dump.cs的獲取。
Zygisk-IL2CppDumper采用github Action,僅需fork項目,填寫包名等簡單步驟就可逆向分析代碼,極大程度降低了外掛、破解門檻。
針對 Zygisk-IL2CppDumper 逆向分析工具對游戲造成的嚴(yán)重危害,F(xiàn)airGuard游戲加固依托十余年游戲安全對抗經(jīng)驗,研發(fā)了一套成熟完善的對抗方案,可有效提高分析破解門檻。目前,該方案已接入多家大廠旗下熱門游戲,可行性與有效性得到了充分認(rèn)證。
歡迎通過「站內(nèi)私信」了解產(chǎn)品信息、體驗免費試用