① 如何防止Unity3D代碼被反編譯
在Unity3D中,代碼會編譯到Assembly-CSharp.dll。基於以上兩點,代碼的保護有以下三種:
第一種是對代碼進行混淆,諸如混淆軟體CodeGuard、CryptoObfuscator、de4dot
第二種是對Assembly-CSharp.dll進行加密後,重新對mono進行編譯
Virbox Protector直接進行加殼後,無需手動編譯mono,能防止反編譯
② 如何防止unity3d代碼被反編譯
防止Unity3D代碼被反編譯是手游安全中常見的破解風險。Unity的破解風險主要體現在Unity mono腳本解密、Unity il2cpp腳本解析、Assetbundle資源篡改三項。mono腳本文件的二進制形式及源碼轉換圖示,展示了如何對mono腳本進行解密。Il2cpp腳本解析則需要使用Il2CppDumper工具,解析後能獲得類名、函數名以及對應偏移信息。盡管iOS中還無法解析為源碼,但Android的有效腳本加密對於防止破解尤為重要。Assetbundle資源篡改,如修改材質屬性,可實現透視效果,同時還有資源被競品盜取、分析的風險。存檔數據被修改也是安全問題,如果數據不進行服務端校驗或為單機游戲,游戲屬性修改風險巨大。保護Unity安全時,自研保護系統面臨高成本、兼容性問題、對抗破解的持續升級和第三方服務兼容性挑戰。網易雲易盾提供了Unity mono DLL腳本加密、IL2CPP加密、Assetbundle加密等解決方案,通過修改或HOOK mono_image_open_from_data_with_name函數,實現對CSharp DLL腳本的加密,以防止其被解密。Unity mono DLL腳本加密經歷了從直接文件加密到抹掉PE頭、再到方法級加密的三代技術演進。IL2CPP加密則需結合global-metadata.dat文件內的符號信息進行解析,通過SO加殼保護libil2cpp.so來實現。Assetbundle加密後,Unity Studio無法解析資源。網易易盾保護方案特點包括純Native保護、對引擎SO做加殼、兼容性和穩定性高、性能影響小,支持多平台加固。在選擇保護方案時,應考慮DEX加殼的兼容性和安全性問題,而網易易盾提供的純Native保護方案為手游提供了一種更加安全和兼容性強的解決方案。