網(wǎng)易云安全(易盾)移動安全技術(shù)專家卓輝在Unity技術(shù)開放日現(xiàn)場
以下內(nèi)容根據(jù)卓輝現(xiàn)場分享整理,有部分改動:
手游安全風(fēng)險(xiǎn)
手游安全問題原因分析
相比以前端游時(shí)代,手游開發(fā)基本上是腳本為主,開發(fā)迭代的周期比較短,但是同樣降低了逆向分析的門檻,破解者分析整個(gè)游戲變得更加容易。另一方面,一些重本地交互的手游的數(shù)據(jù)是放在客戶端計(jì)算,服務(wù)端對客戶端控制相對較弱,可以通過篡改客戶端的數(shù)據(jù)來達(dá)到作弊效果。第三,對普通玩家來講,安卓模擬器有很多,在模擬器作弊變得更加簡單。第四就是端游時(shí)代所用的保護(hù)方案,如驅(qū)動保護(hù),在手機(jī)端沒有辦法用,手機(jī)端對于APK的權(quán)限限制更加嚴(yán)格。而對于破解工作室來講,手游時(shí)代的成本更低,比如空間成本、電力成本、機(jī)器成本、破解成本,這樣導(dǎo)致大量端游打金工作室涌入手游吸金,給手游的生態(tài)帶來了極大的挑戰(zhàn)。
手游威脅
Unity引擎安全風(fēng)險(xiǎn)
對于強(qiáng)校驗(yàn)的MMORPG手游來講,通過逆向,導(dǎo)致整個(gè)通信協(xié)議直接被分析,客戶端和服務(wù)端的通信毫無保留的呈現(xiàn)在破解者面前,他可以修改數(shù)據(jù)包、發(fā)送帶欺騙性的數(shù)據(jù)包,最終可能開發(fā)出脫離客戶端的外掛,通過封包來模擬客戶端行為,這會嚴(yán)重危害手游的平衡性。
另外很多手游雖然有很強(qiáng)的校驗(yàn),但是對于場景中角色可移動區(qū)域的判斷、角色攻擊范圍的判斷、角色攻擊行為的判斷還是比較弱,這樣通過破解可以達(dá)到,穿墻、自動瞄準(zhǔn)、遠(yuǎn)程攻擊等作弊效果,對正常玩家的沖擊相當(dāng)厲害,最終玩家會慢慢流失。
對于弱校驗(yàn)和單機(jī)類的手游,可以導(dǎo)致內(nèi)購被破解,角色屬性被修改,導(dǎo)致玩家不需要付費(fèi)就可以達(dá)到甚至超過付費(fèi)玩家的水平,這會大大打擊付費(fèi)玩家的積極性,最終影響開發(fā)商收益。
Unity引擎安全解決方案
如何保護(hù)Unity引擎安全?很多開發(fā)團(tuán)隊(duì)可能也有自己開發(fā)加固保護(hù)系統(tǒng)的打算,如果要做好這套保護(hù)系統(tǒng),需要解決很多問題,主要包括以下四個(gè):
第一、保護(hù)方案自研成本比較高,需要不斷調(diào)研、不斷改進(jìn),不但需要了解破解流程,還需要深度掌握Unity引擎的運(yùn)行原理。
第二、安卓的兼容性問題,安卓設(shè)備碎片化嚴(yán)重,系統(tǒng)版本升級、用戶環(huán)境多樣化。需要不斷完善解決方案。網(wǎng)易在這一塊積累了很長時(shí)間,才開發(fā)出一套在性能、兼容性和安全強(qiáng)度都滿足的保護(hù)方案。如果游戲開發(fā)團(tuán)隊(duì)自研,兼容性會占用團(tuán)隊(duì)大量時(shí)間,降低游戲核心邏輯開發(fā)速度。
第三、對于破解來說,本身保護(hù)工作是一個(gè)矛和盾的過程,是不斷升級和不斷對抗的過程。如果游戲開發(fā)團(tuán)隊(duì)要去自研保護(hù)系統(tǒng),需要分析市面上的破解工具,并不斷分析他們破解的方法,然后才能不斷提高整個(gè)保護(hù)系統(tǒng)強(qiáng)度。
第四、第三方服務(wù)的兼容性,游戲現(xiàn)在越來越是一個(gè)精細(xì)化開發(fā)的模式,很多游戲團(tuán)隊(duì)只做一些核心的邏輯玩法的開發(fā), 所以保護(hù)就需要兼容支付模塊、熱更新方案及質(zhì)量跟蹤等各種第三方服務(wù)。而兼容這些第三方的服務(wù),又給游戲開發(fā)團(tuán)隊(duì)帶來了很大的挑戰(zhàn)。
另外傳統(tǒng)的腳本加密方法也會存在兩個(gè)問題。一個(gè)是靜態(tài)保護(hù)逆向分析難度不高,定位解密算法容易;另一個(gè)是動態(tài)保護(hù)較弱,反調(diào)試、反HOOK、反DUMP等保護(hù)強(qiáng)度不高,非公開的解密方法沒有防護(hù)。
要改進(jìn)傳統(tǒng)加密方法并打造安全的保護(hù)方案,首先需要解決以下四個(gè)問題:
第一個(gè)就是要提供足夠高效的保護(hù)方案。對于游戲保護(hù)來講,核心點(diǎn)是不能影響游戲運(yùn)行的性能,不能影響玩家體驗(yàn),要既能滿足保護(hù)強(qiáng)度、也能滿足性能要求。
第二就是腳本解密的算法和加載函數(shù)足夠復(fù)雜,可以抗靜態(tài)和動態(tài)分析,讓破解者無法獲取解密流程。
第三就是能夠防HOOK,防止在關(guān)鍵API上被下勾子,從而防止動態(tài)拷貝內(nèi)存。
第四是防DUMP,即使全內(nèi)存搜索也讓破解者找不到DLL文件。
網(wǎng)易云安全團(tuán)隊(duì)提供的解決方案加載原理,如下圖所示:
Unity資源保護(hù)這一塊原理也類似,處理unity.so的文件,當(dāng)這個(gè)資源請求發(fā)出以后,可以把加密后的資源文件進(jìn)行解密,因?yàn)橛泻芏?D游戲資源非常大,有一些有幾百兆,所以對加密方案和算法進(jìn)行了極大的優(yōu)化,可以保證資源文件解密的時(shí)間最多只要10ms,不會影響游戲的性能,對玩家無感知,以及對于游戲的FPS都沒有影響。另外資源加密對于游戲開發(fā)也是完全透明的。
通過一張概覽圖來看網(wǎng)易云安全的加固服務(wù)針對手游提供的功能: