Unity3D程序腳本反編譯分析與加密

作者:深思數盾

前言

對於使用 Unity3D 開發的程序,存在被反編譯的風險,也面臨著被 dump 內存的威脅,最終引起遊戲或工程被抄襲甚至盜版。 下面簡單介紹對Unity3D 腳本分析過程,同時提供了對其保護的參考手段。

工具集

dnSpy、Ollydbg、Cheat Engine

背景

大家都知道 Unity3D 使用開源 mono C# 語法 ,所有代碼都不是編譯到 EXE,而是位於 {APP}uildgame_DataManagedAssembly-CSharp.dll (對於最新的 Unity3D 2017 不是這樣),而且 mono 語法只是跟 C# 兼容,但是原理完全不一樣,傳統的 C# 加殼全部失效,因為 Assembly-CSharp.dll 不是標準的 DLL 載入過程,既不是 PE 的 DLL,也不是 dotNet 的 DLL 載入,而是由 mono.dll 讀取 Assembly-CSharp.dll 的 C# 腳本解釋執行。這一切不用等官方 IL2CPP 或自己定製 mono 引擎!

反編譯

反編譯 Unity3D 的腳本代碼,使用 dnSpy 就可以達到很好的效果,dnSpy 可以準確的將 Unity3D 的腳本文件以及標準的 DotNet 動態庫文件反編譯成源碼形式。一般,將需要被反編譯的文件拖入 dnSpy 工具即可。效果如下,其中可以完整的看到編碼者的代碼邏輯:

截圖官方demo被反編譯

根據反編譯後的代碼就可以進一步分析軟體的流程走向,甚至篡改原有過程,具體不做描述。

如何對腳本代碼進行保護?

對於這種腳本代碼的保護,通常採用腳本文件加密,解釋器解密的形式來實現加密方案,下面簡單介紹下可以針對這種腳本進行保護的現成產品:Virbox Protector、Virbox AHS。

Virbox Protector、Virbox AHS 分別可以防止靜態分析、動態調試 Unity3D 的軟體產品,具有如下特性:

1.一鍵加密你的代碼邏輯,無法反編譯,無法 dump 內存。

2.不降低遊戲幀數, 甚至某些情況下還能提高遊戲幀數。

3.Assembly.DLL 代碼按需解密,只有調用到才會在內存解密,不調用不解密,黑客無法一次解出所有的代碼。

4.完整授權方案,支持雲授權、軟鎖授權,USB 加密鎖授權、網路鎖授權,支持限制時間、限制次數、限制網路並發。

5.自帶反黑引擎,驅動級別反調試,對大部分調試器有效。

(注意:如果需要最高安全強度的遊戲反外掛,請參考反黑引擎 )

使用加密工具前後比較

1.dnspy 反編譯被加殼的結果:

加殼前

加殼後

分析:從對比的結果看到很多代碼信息已經丟失,再次進行分析時也會有很大困難。

2.PC 上的 X64Dbg 和 OllyDbg 調試失敗與附加失敗

分析:Virbox AHS 提供的這種針對動態調試的保護方案在實時分析程序時會起到顯著的作用。

3.Cheat-Engine 讀取內存失敗(需要新的反黑引擎支持)

分析:通過對原程序內存數據的保護,想使用修改數據的形式來進行作弊的惡意行為也會被拒之門外。

典型客戶場景

1.Unity3D 遊戲客戶街機遊戲

2.VR 設備交互體驗

3.機器/醫療/工業/航天等 VR 交互


推薦閱讀:

Unity3D UGUI優化:製作鏡像圖片(2)
基於物理的渲染—基於Haar小波基的實時全局光照明
大萌喵的著色器特效第二發---相交高亮(掃描效果)
優化筆記:C# 從 List<T> 移除空元素
聊聊那些不常見的Shader

TAG:Unity游戏引擎 | 反编译 |