如何實現360度的手遊安全防護?網易雲易盾專家分享最新實踐
那麽,究竟如何才能構建一體化的手遊安全防護?如何才能實現手遊市場的良性發展?
時下的Unity手遊面臨著復雜安全風險
手遊通常會面臨著遊戲修改器、遊戲加速器、模擬按鍵掛、遊戲破解版等外掛工具風險。
遊戲修改器:使用修改器能夠將遊戲傷害倍率從18%提升到999.9%,使得×××傷害增強了幾十倍。而且類似的原理還可以實現無敵、秒殺、無限藍、技能無CD等效果,因此修改器對遊戲平衡的危害相當大。常用修改器包括燒餅修改器、八門神器、GameGuardian(GG修改器及其各種修改版)。其中GG修改器流行於即時對戰類遊戲,比如熱門的吃雞遊戲。
遊戲加速器:加速器除了可以加速,還可以減速。使用燒餅加速器的效果,背景速度會隨加速倍數加大而提高。它分為2種類型,一是手機加速器,比如燒餅加速器、GG加速器;二是模擬器加速器,比如我們熟知的天天加速器。
模擬按鍵掛:雖然只是模擬點擊,但卻可以做到自動遊戲,可以刷各種金幣、積分,對遊戲平衡也會有比較大的影響。常見的模擬按鍵掛包括觸動精靈、觸摸精靈、按鍵精靈、叉叉助手、遊戲蜂窩等。遊戲破解版:破解版提供了很多變態功能來吸引玩家,比如通過專門破解遊戲售賣來進行盈利,月付150元就能超過很多遊戲的ARPU值了。這樣破解版的存在會嚴重影響普通玩家體驗,給遊戲收入和口碑都造成很大損失。
除了這些外掛工具風險外,手遊安全中的破解風險同樣影響嚴重。
一般而言,破解風險包括Unity mono腳本解密、Unity il2cpp腳本解析、Assetbundle資源篡改、存檔數據被修改、協議破解等多個方面。
Unityil2cpp腳本解析:以libil2cpp.so和global-metadata.dat作為輸入,使用Il2CppDumper即可進行解析,這樣子類名、函數名以及對應的偏移都能被解析出來。 ![](http://i2.51cto.com/images/blog/201809/13/ba98001917164d2d4a2f729fd7816fc2.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) Assetbundle資源篡改:如常見的槍擊遊戲中,將Assetbundle資源裏面的材質屬性修改為透明即可達到透視的效果,可讓使用修改版的玩家獲取不對稱優勢。而且除了資源被篡改的風險外,還存在資源被競品盜取、分析的風險。存檔數據被修改:某些遊戲存檔數據以明文形式存在,如果這些數據不去服務端校驗,或者是單機遊戲的話,則存在巨大的安全風險,遊戲的各種屬性可以直接修改。
旅行青蛙是一個沒有任何保護的Unity3d遊戲,突然火了以後,搜索引擎可以搜索到大量的破解版本,QQ群上也可以搜索大量的輔助群。在其中,就藏著許多的安全風險。比如:
使用GG加速器可以使三葉草瞬間長滿:
使用dnspy可以解析assets/bin/Data/Managed/Assembly-CSharp.dll:
通過搜索關鍵字,可以定位到獲取三葉草和旅行券的代碼位置:
原始代碼
修改後的代碼
修改後的效果
上面列舉的旅行青蛙手遊風險只是其中的一個典型,但是管中窺豹可以得知,目前的手遊市場面臨著錯綜復雜的安全挑戰,安全防護是所有手遊廠商都必須關註的重中之重。
網易雲易盾如何實現了一體化的安全防護?
針對這種情況,在今天(9月8日)的2018 RTC 實時互聯網大會?社交遊戲專場中,網易資深安全工程師張本梁分享了《網易Android遊戲保護實踐》主題內容,就當前的手遊安全形勢給出了分析和解答,並深度介紹了網易雲易盾安全解決方案的技術要點。
在張本梁看來,如果遊戲不做保護,不管是外掛工具還是破解,都可以修改遊戲邏輯,這會對遊戲造成很大的收入和口碑損害。而網易雲易盾所提供的一體化解決方案能夠很好地解決這些問題,不僅可以破解包的檢測,而且能夠跟破解者無感知對抗、對惡意用戶進行全方位的風險評估。它還具備完善的通用保護功能,支持任意的遊戲引擎,所以手遊廠商們完全可以根據遊戲需求自主選擇:
反修改器:易盾手遊保護采用修改行為檢測,可通殺所有修改器,包括所有已知和未知的修改器;
反加速:易盾手遊保護對Android系統內的加速器、模擬器進程加速的加速器都有檢測方案,同樣都是針對行為的檢測方案,不針對特定的某些加速器,通用性更好;
反模擬器:可以通殺所有已知和未知模擬器;
反調試:檢測方式隱蔽,大大提高動態逆向分析難度;
反模擬點擊:模擬點擊嚴格上來說不屬於非法外掛,處於灰色地帶,因此模擬點擊器都是公司化動作,應用很廣泛,但是模擬點擊腳本提供的功能對遊戲平衡也會帶來很大的不良影響。易盾手遊保護使用了進程+行為檢測相結合的方式,對模擬點擊器進行檢測;
文件校驗:兼顧了效率和安全性;
防二次打包:使用了更為底層的方式,可以繞過各種過校驗插件;
存檔加密:透明方式接入,不需要開發做額外接入工作;
反多開器:支持真機和模擬器上的多開;
反地理位置模擬:檢測真機和模擬器地理位置模擬;
......
對於潛在的破解風險,易盾安全解決方案還能夠從代碼層面提供詳盡的功能保護。
Unity mono DLL腳本加密
DLL腳本加解密的原理是修改或者HOOKmono_image_open_from_data_with_name,mono_image_open_from_data_with_name是CSharp腳本的加載函數,如果CSharp
DLL腳本做了加密,需要在這個函數執行之前解密。因此只要在這個函數這裏下斷點或者HOOK,就可以解密出原始DLL。不需要逆向加密算法。留意一下,這裏有個memcpy拷貝操作,mono會把解密後的DLL在內存中留存一份拷貝。
該方案包括三代加密方法:第一代加密:直接對DLL文件進行加密,在mono_image_open_from_data_with_name函數開始處解密。解密門檻很低,只要使用修改器就可以解密。第二代加密基於第一代加密的明顯弱點,針對解密加強了防護。解密門檻比較高,需要非常強的逆向開發能力才能破解。第三代加密則針對Csharp函數做加密,也就是方法級加密,動態解密。易盾采用的是第二代加密+第三代加密組合使用的方式來確保DLL腳本加密的安全強度。
IL2CPP 加密
Il2cpp腳本信息以lib2cpp.so形式存在,結合global-metadata.dat文件內的符號信息,對libil2cpp.so做so加殼,即可進行解析。如下所示,原始libil2cpp.so用IDA可以看到475個導出函數,但是加固後的libil2cpp.so導出函數則為空。
Assetbundle、靜態資源加密
那麽手遊如何進行易盾加固接入?首先需要確定遊戲加固項,而且易盾技術也支持雲端配置好加固項,然後獲取appkey,下載加固jar包工具,根據使用說明配置好appkey即可。
如何實現360度的手遊安全防護?網易雲易盾專家分享最新實踐