Unity手遊引擎安全解析及實踐

2021-09-10 04:36:16 字數 3582 閱讀 5836

近日,由unity主辦的「unity技術開放日」在廣州成功舉辦,網易移動安全技術專家卓輝作為特邀嘉賓同現場400名遊戲開發者分享了網易在手遊安全所積累的經驗。當下,很多手遊背後都存在靠汲取開發商利益的灰色產業鏈,它們通過破解,對遊戲進行重打包達到修改支付、修改廣告等目的。通過利用外掛程式、篡改資料、遊戲加速等手段來破壞遊戲平衡,流失付費玩家,這些都極大的危害著手遊生態。卓輝通過介紹目前各種unity手遊破解方法及對遊戲的危害,分享了網易為unity引擎安全所做的工作,幫助手遊開發者規避這些安全風險。

一、手遊安全風險

手遊安全問題原因分析

相比以前端遊時代,手遊開發基本上是指令碼為主,開發迭代的週期比較短,但是同樣降低了逆向分析的門檻,破解者分析整個遊戲變得更加容易。另一方面,一些重本地互動的手遊的資料是放在客戶端計算,服務端對客戶端控制相對較弱,可以通過篡改客戶端的資料來達到作弊效果。第三,對普通玩家來講,安卓模擬器有很多,在模擬器作弊變得更加簡單。第四就是端遊時代所用的保護方案,如驅動保護,在手機端沒有辦法用,手機端對於apk的許可權限制更加嚴格。而對於破解工作室來講,手遊時代的成本更低,比如空間成本、電力成本、機器成本、破解成本,這樣導致大量端遊打金工作室湧入手遊吸金,給手遊的生態帶來了極大的挑戰。

手遊威脅

二、unity引擎安全風險

網易安全團隊分析了公司內外很多unity遊戲的安全問題,概括來講就是靜態資料安全(指令碼和資源)、動態資料安全(角色動態資料、執行速度)和收益安全(支付和廣告)。unity引擎的指令碼檔案作為乙個dll檔案存在,可以用reflector工具進行反編譯,得到如下圖所示**:

整個遊戲的指令碼**毫無保留的呈現在我們面前,這樣對破解者來講,相當於和開發團隊一樣擁有了遊戲的源**。如果我們用unity studio反編譯u3d引擎的資源檔案,也可以拿到相關遊戲的資源資料,如下圖所示:

那麼這些破解會帶來哪些危害呢?

對於強校驗的mmorpg手遊來講,通過逆向,導致整個通訊協議直接被分析,客戶端和服務端的通訊毫無保留的呈現在破解者面前,他可以修改資料報、傳送帶欺騙性的資料報,最終可能開發出脫離客戶端的外掛程式,通過封包來模擬客戶端行為,這會嚴重危害手遊的平衡性。

(gameguarddian修改器實現瞬移.mp4)

對於弱校驗和單機類的手遊,可以導致內購被破解,角色屬性被修改,導致玩家不需要付費就可以達到甚至超過付費玩家的水平,這會大大打擊付費玩家的積極性,最終影響開發商收益。

三、unity引擎安全解決方案

那麼我們如何保護unity引擎安全,保護自己的合法權益呢?

對於很多開發團隊可能也有自己開發加固保護系統的打算,如果要做好這套保護系統,需要解決很多問題,主要包括以下四個:

第一、保護方案自研成本比較高,需要不斷調研、不斷改進,你不但需要了解破解流程,還需要深度掌握unity引擎的執行原理。

第二、安卓的相容性問題,安卓裝置碎片化嚴重,系統版本公升級、使用者環境多樣化。需要不斷完善你的解決方案。網易在這一塊積累了很長時間,才開發出一套在效能、相容性和安全強度都滿足的保護方案。如果遊戲開發團隊自研,相容性會占用團隊大量時間,降低遊戲核心邏輯開發速度。

第三、對於破解來說,本身保護工作是乙個矛和盾的過程,是不斷公升級和不斷對抗的過程。如果遊戲開發團隊要去自研保護系統,需要分析市面上的破解工具,並不斷分析他們破解的方法,然後才能不斷提高整個保護系統強度。

第四、第三方服務的相容性,遊戲現在越來越是乙個精細化開發的模式,很多遊戲團隊只做一些核心的邏輯玩法的開發, 所以保護就需要相容支付模組、熱更新方案及質量跟蹤等各種第三方服務。而相容這些第三方的服務,又給遊戲開發團隊帶來了很大的挑戰。

另外傳統的指令碼加密方法也會存在兩個問題。乙個是靜態保護逆向分析難度不高,定位解密演算法容易;另乙個是動態保護較弱,反除錯、反hook、反dump等保護強度不高,非公開的解密方法沒有防護。

要改進傳統加密方法並打造安全的保護方案,首先需要解決以下四個問題:

第乙個就是要提供足夠高效的保護方案。對於遊戲保護來講,核心點是不能影響遊戲執行的效能,不能影響玩家體驗,要既能滿足保護強度、也能滿足效能要求。

第二就是指令碼解密的演算法和載入函式足夠複雜,可以抗靜態和動態分析,讓破解者無法獲取解密流程。

第三就是能夠防hook,防止在關鍵api上被下勾子,從而防止動態拷貝記憶體。

第四是防dump,即使全記憶體搜尋也讓破解者找不到dll檔案。

具體實現方法如上圖所示,只有做到靜態和動態全方面保護,我們的保護方法才能抵抗各種破解,各種分析。

接下來,我們來看一下網易雲安全團隊提供的這套解決方案的載入原理,如下圖所示:

手遊開始執行後,系統首先會去載入unity的mono的so檔案,這個so檔案已經被網易雲加固處理過,對so檔案和相應api進行了保護,並同時會載入遊戲安全模組。當遊戲程序讀取指令碼檔案時候,就會進入mono檔案,這個時候可以完成dll處理工作,讓unity引擎可以正常載入加密的指令碼檔案。整個過程對開發者透明,遊戲開發並不需要在開發的時候介入或者做什麼操作。

unity資源保護這一塊原理也類似,我們處理了unity.so的檔案,當這個資源請求發出以後,可以把加密後的資源檔案進行解密,因為有很多3d遊戲資源非常大,有一些有幾百兆,所以我們對加密方案和演算法進行了極大的優化,可以保證資源檔案解密的時間最多只要10ms,不會影響遊戲的效能,對玩家無感知,以及對於遊戲的fps都沒有影響。另外資源加密對於遊戲開發也是完全透明的。

最後,通過一張概覽圖來看下網易雲安全的加固服務針對手遊提供的功能:

要打造乙個既安全又高效的保護方案,需要團隊不斷投入人力和時間進行更新、公升級,不斷研究破解方法。提供穩定可靠的第三方服務既可以有效降低手遊安全風險,幫助開發團隊在核心業務上贏得更多時間和精力,降低成本,同時提高保護效果。通過網易多年內部安全服務的技術經驗積累,網易雲安全的應用加固形成了一套成熟高效的移動安全解決方案,已為公司內外數百款手遊提供安全保障。多個手遊技術負責人表示,在接入了網易加固服務之後,遊戲破解率直線下降,反外掛程式功能也大幅降低了外掛程式入侵,遊戲安全隱患得到了及時有效的扼制。

posted @

2017-10-31 20:34

00000000o 閱讀(

...)

編輯收藏

NeL 手遊引擎

nel 引擎用於ryzom,其中包括 基礎工具 網路 聲音 碰撞 ui 3d引擎等開發mmorpg的必備工具。ryzom於2002年上線,至今仍在運營,初期客戶端需要跑在56k甚至14.4k的數據機上,足見其底層庫的健壯與穩定。提取出misc和net兩個庫作為基礎,增加上層工具,搭建跨平台的手遊伺服...

unity手遊使用terrian注意事項

1.terrain比較佔效能,普通機器測試,未開terrain 60幀,開啟terrain後 30幀 2.terrain的size大小與占用效能無關,不過越小的terrain的烘焙上去的陰影越模糊,剛開始建議烘焙測試下 3.使用terrain建立一條河道時,攝像機鏡頭拉近拉遠會出現鋸齒,此時調節pi...

基於Unity3D引擎的Android遊戲優化

最近專案進入收尾階段,之前對專案做了很多優化,mesh合併 減少drawcall和模型骨骼以及物理計算,合併材質球,優化 等等,在ios上還好,但是android上,試過幾款手機,從低端到高階,發現效能還是很差,所以又花了幾天來研究摸索,終於把遊戲效能搞定。記錄下來,留作以後參考。1.更 新不透明貼...