Unity Mono 是 Unity 引擎默認的腳本運行時環境,由跨平臺的開源 .NET 框架實現,它允許開發者使用 C# 等編程語言編寫游戲邏輯,憑借簡單易用的開發環境和高效的腳本編譯速度,得到了眾多游戲的青睞。
在 Mono 模式下,游戲 C# 代碼被編譯為 IL (中間代碼) 并生成 DLL 文件,然后將 DLL 打進游戲包文件。
但由于 IL 非常容易被反編譯軟件分析逆向,所以在無保護情況下,破解者改包和競品分析的難度非常低,游戲的安全性極差,如何有效進行加密成了行業痛點。
Mono模式下腳本的編譯運行
本文將通過案例演示分析反編譯工具dnspy的特點,并分析游戲該如何應對逆向及破解問題,提出有效地解決方案。
dnSpy 是一個免費開源、跨平臺的 .NET 調試器和反編譯器,可以在無源碼的情況下,進行代碼調試和修改。利用 IL 和 C# 等多種語言的支持,dnSpy 能夠將 .NET程序 的二進制文件反編譯成源代碼。
dnspy函數解析結果
一些游戲為了防止被逆向分析,會采用DLL函數加密,這種加密方式的優點在于只有使用方法才會進行解密,而一般游戲運行過程中不會用到所有方法,這樣內存中就不會存在一個完整的DLL。
函數加密后dnspy函數解析報錯
但DLL加固方案仍有缺點,使用解析工具可以看到函數名及部分函數,容易被破解者分析利用,存在一定的安全隱患。
想要保護游戲代碼,最重要的是不給破解者留下線索。為此,FairGuard研發了「 DLL結構虛擬化 」功能:
可對DLL的文件結構進行自定義重構,并對文件結構數據進行高強度加密。處理完后,所有的工具都無法再解析出任何數據,哪怕是專業的破解分析人員,要解密出里面的結構數據難度也是非常大。
虛擬化后的DLL結構010 Editor無法正常解析
此外,FairGuard游戲加固方案還提供global-metadata.dat / libil2cpp.so 等文件加密功能,以及多端通用的 Unity Assetbundle 資源加密方案。
為了保證游戲防護的整體性,我們的方案還包含:反外掛、防破解、反變速、反調試等多項功能,有效解決游戲面臨的各項安全問題。
反外掛功能
針對游戲面臨的內存修改風險,FairGuard研發了行為檢測方案,可對內存修改行為進行精準識別,通殺各類修改器外掛及其變種,做到有效防護。
防破解功能
FairGuard獨家無API簽名校驗技術,對游戲的引擎與代碼進行深度加密,并對游戲包簽名和文件完整性進行多重校驗,防止游戲被植入惡意模塊、剔除廣告等。
變速閃退功能
采用更加底層的檢測手段,經大量實機測試,可無視任何變速器及其變種,一旦檢測到變速情況,將立即閃退游戲。
反調試功能
防止外掛作者對游戲進行調試,阻止對游戲的靜態或動態分析,一旦發現立即閃退。