03.25 遊戲開發者如何從容應對Unity手遊風險?

3月25日,2018 Unity技術路演首站:移動遊戲技術分享日在廣州舉辦。此次活動,旨在為移動遊戲開發者們搭建一個更好的交流平臺,學習Unity在移動遊戲開發領域的最新工具與應用技巧,分享最炫酷的遊戲開發與行業應用案例,瞭解移動遊戲開發中的安全問題所能給企業帶來的隱患,幫助開發者提前感知安全隱患,避免受到損失。

遊戲開發者如何從容應對Unity手遊風險?

網易雲易盾移動遊戲安全技術專家陳士留

網易雲易盾移動遊戲安全技術專家陳士留出席交流活動,並進行了《Unity手遊風險及安全問題——網易雲易盾來保駕護航》的技術演講。在分享中,他介紹了時下Unity手遊面臨的眾多風險及熱門外掛,並重點講解了易盾安全解決方案的技術原理和實踐案例。

一、Unity手遊面臨的風險

據統計,2017年國內活躍移動遊戲APP應用約有9000款,其多數存在被破解、惡意代碼插入、廣告插入、外掛、二次打包等安全問題。而這些安全問題為企業帶來隱患是,研發難度增加,研發成本的提高、玩家付費意願減低、遊戲失去公平性,玩家流失,直接損失收入——因此,破除Unity手遊風險對於開發者來說十分重要。

常見的Unity手遊風險主要包括破解風險、外掛工具這兩類。

破解風險

破解風險主要有Unity mono腳本解密、Unity il2cpp腳本解析、Assetbundle資源篡改這三項。

  • Unity mono腳本解密

以下兩張圖為mono腳本文件的二進制形式及源碼轉換。

遊戲開發者如何從容應對Unity手遊風險?

遊戲開發者如何從容應對Unity手遊風險?

  • Unity il2cpp腳本解析

以libil2cpp.so和global-metadata.dat作為輸入,使用Il2CppDumper即可進行解析:

遊戲開發者如何從容應對Unity手遊風險?

解析出來的效果如下所示,類名、函數名以及對應的偏移都能夠被解析出來:

遊戲開發者如何從容應對Unity手遊風險?

目前iOS中還沒有能夠解析為源碼的工具,但是如果可以解密或解析Android腳本,將會大大方便iOS的破解。因此Android的有效腳本加密非常有必要。

  • Assetbundle資源篡改

透視功能可讓使用修改版的玩家獲取不對稱優勢。如下所示的某槍擊遊戲,將其中Assetbundle資源裡面的材質屬性修改為透明,即可達到透視的效果。

遊戲開發者如何從容應對Unity手遊風險?

除了資源被篡改的風險外,遊戲中還存在資源被競品盜取、分析的風險。

  • 存檔數據被修改

遊戲開發者如何從容應對Unity手遊風險?

某些遊戲存檔數據以明文形式存在,如果這些數據不去服務端校驗,或者是單機遊戲的話,則存在巨大的安全風險,遊戲的各種屬性可以直接修改。

外掛工具

  • 遊戲修改器

使用修改器能夠將傷害倍率從18%改成999.9%,使得攻擊傷害提升了幾十倍。類似的原理也可以實現無敵、秒殺、無限藍、技能無CD等效果,因此修改器對遊戲平衡的危害相當大。

遊戲開發者如何從容應對Unity手遊風險?

常用的修改器有燒餅修改器、八門神器和GameGuardian(GG修改器及其各種修改版),其中的GG修改器(GameGuardian)流行於即時對戰類遊戲(比如吃雞遊戲)。

上圖為搜索數值界面,下圖為調用lua腳本界面

遊戲開發者如何從容應對Unity手遊風險?

遊戲開發者如何從容應對Unity手遊風險?

某QQ群售賣的GG lua腳本

  • 免ROOT修改器

免ROOT修改器是指通過第三方軟件獲得Root權限,可以訪問和修改手機遊戲中幾乎所有的文件,但這樣操作有可能影響遊戲的穩定性,出現死機、卡頓、重啟等人為性故障。

遊戲開發者如何從容應對Unity手遊風險?

八門神器附帶的免ROOT修改器

遊戲開發者如何從容應對Unity手遊風險?

GG大玩家附帶的免ROOT修改器

  • 遊戲加速器

加速器分2種類型,一種是手機加速器,例如燒餅加速器、GG加速器;另一種是模擬器加速器,例如天天加速器。加速器除了可以加速,還可以減速。如下圖所示,使用燒餅加速器,背景速度會隨加速倍數加大而提高。

遊戲開發者如何從容應對Unity手遊風險?

  • 遊戲破解版

破解版提供了很多變態的功能來吸引玩家。下圖是某個站專門破解遊戲售賣進行盈利,他們除了有售賣網站,還開了淘寶店。只要月付150元,就已經超過很多遊戲的ARPU值了。這樣破解版的存在會嚴重影響普通玩家體驗,給遊戲收入和口碑都造成很大的損失。

遊戲開發者如何從容應對Unity手遊風險?

包括GG大玩家、光環助手等等,市面上都有各種破解版售賣。

遊戲開發者如何從容應對Unity手遊風險?

遊戲開發者如何從容應對Unity手遊風險?

GG大玩家遊戲破解版,上圖為修改版列表,下圖為修改版功能

遊戲開發者如何從容應對Unity手遊風險?

遊戲開發者如何從容應對Unity手遊風險?

光環助手遊戲破解版,上圖為修改版列表,下圖為修改版功能

  • 模擬按鍵掛

遊戲開發者如何從容應對Unity手遊風險?

上圖就是一個模擬按鍵掛,雖然只是模擬點擊,但是可以做到自動遊戲,可以刷各種金幣、積分,對遊戲平衡也會有比較大的影響。常見的模擬按鍵掛包括有觸動精靈、觸摸精靈、按鍵精靈、叉叉助手、遊戲蜂窩等等。

二、易盾是怎麼做的?

網易易盾能夠提供Unity mono DLL腳本加密、IL2CPP 加密、Assetbundle加密等加密解決方案,以及反修改器、反加速、反模擬器、反調試等手遊通用保護功能和手遊風險感知。

Unity mono DLL腳本加密

通過修改或者HOOK mono_image_open_from_data_with_name能夠對DLL腳本加解密。mono_image_open_from_data_with_name是CSharp 腳本的加載函數,如果CSharpDLL腳本做了加密,需要在這個函數執行之前解密。因此只要在這個函數這裡下斷點或者HOOK,就可以解密出原始DLL,而不需要逆向加密算法。需要注意的是,這裡有個memcpy拷貝操作,mono會把解密後的DLL在內存中留存一份拷貝。

遊戲開發者如何從容應對Unity手遊風險?

Unity mono DLL腳本加密經歷了三代的技術演進。

第一代加密直接對DLL文件進行加密,在mono_image_open_from_data_with_name函數開始處解密。對於這個的破解方法很簡單,PE結構的文件,以4d 5a90 00這四個字節為magic head,這可以做為CSharp DLL腳本的特徵,只要搜索0x905a4d這個數值就可以了,由於燒餅修改器是使用10進制數值,將其轉換成10進制值:9460301。因此解密門檻很低,只要使用修改器就可以解密。

遊戲開發者如何從容應對Unity手遊風險?

遊戲開發者如何從容應對Unity手遊風險?

遊戲開發者如何從容應對Unity手遊風險?

第二代加密基於第一代加密的明顯弱點,針對解密加強了防護。解密後,把下圖所示的PE頭抹掉,使得修改器無法定位到腳本位置。因此解密門檻比較高,需要非常強的逆向開發能力才能破解。

第三代加密針對Csharp 函數做了加密,也就是方法級加密,需動態解密。

遊戲開發者如何從容應對Unity手遊風險?

原始未加密dnspy函數解析結果

遊戲開發者如何從容應對Unity手遊風險?

函數加密後dnspy函數解析報錯

IL2CPP 加密

Il2cpp腳本信息以lib2cpp.so形式存在,結合global-metadata.dat文件內的符號信息,即可進行解析,因此需要對libil2cpp.so做so加殼,如下圖所示,原始libil2cpp.so用IDA可以看到475個導出函數:

遊戲開發者如何從容應對Unity手遊風險?

加固後的libil2cpp.so導出函數則為空:

遊戲開發者如何從容應對Unity手遊風險?

Assetbundle加密

Assetbundle未加密時,Unity Studio可解析出各種資源:

遊戲開發者如何從容應對Unity手遊風險?

對Assetbundle加密後,Unity Studio就無法解析了:

遊戲開發者如何從容應對Unity手遊風險?

手遊通用保護功能

除去Unity mono DLL腳本加密、IL2CPP 加密、Assetbundle加密等加密解決方案外,網易易盾也能夠提供通用的手遊保護功能,包括反修改器、反加速、反模擬器、反調試、反模擬點擊、文件校驗、防二次打包、存檔加密、引擎SO定製化加殼等。一般而言,這些通用功能任何遊戲引擎都支持,可以根據遊戲需求選擇一個或多個。目前,網易易盾支持的遊戲主要包含Unity3d、COCOS、NEOX和UE4。

  • 反修改器

修改器可以實現很多功能,如無限藍、技能無CD、無敵、秒殺、倍攻等,是工具黨的最愛,也是專業破解者常用的工具之一。常見的修改器除了常見的燒餅、八門神器、葫蘆俠、GG(GameGuardian)以外,還有很多定製修改版。

其中,GG修改器是做的最專業的修改器,專門做了反檢測措施(隨機化包名、子進程使用系統進程名等),因此常規的進程檢測對GG無效。但是易盾手遊保護採用修改行為檢測,可以通殺所有修改器,包括所有已知和未知的修改器。下圖是檢測效果示例:

遊戲開發者如何從容應對Unity手遊風險?

  • 反加速

加速器可加速可減速,主要分為兩類:一是Android系統內的加速器,如燒餅加速器、叉叉加速器,一般修改器都附帶加速功能;二是對模擬器進程加速的加速器,此加速原理跟端遊加速相同,實質是對整個模擬器做了加速,Android系統內並沒有加速器在運行,比較典型的是天天模擬器附帶的天天加速器。

加速器的使用會讓個別玩家獲得遊戲優勢,影響遊戲平衡。但是易盾手遊保護對以上這2種加速都有檢測方案,而且是針對行為的檢測方案,不針對特定的某些加速器,通用性更好——對於天天加速器這樣的進程加速器,即使只加速0.1倍也可以檢測到。

遊戲開發者如何從容應對Unity手遊風險?

上圖是一個加固過的跑酷遊戲,用天天加速器加速生效後,過了一秒鐘左右,即會閃退。

  • 反模擬點擊

模擬點擊嚴格上來說不屬於非法外掛,處於灰色地帶,因此模擬點擊器都是公司化動作,應用很廣泛,但是模擬點擊腳本提供的功能對遊戲平衡也會帶來很大的不良影響。目前比較知名的模擬點擊器,有叉叉助手、觸動精靈、觸摸精靈、按鍵精靈、遊戲蜂窩等。

如下圖所示,觸動精靈啟動後,再啟動遊戲,保護檢測到模擬點擊器的存在即會閃退:

遊戲開發者如何從容應對Unity手遊風險?

但是易盾手遊保護使用了進程+行為檢測相結合的方式,能夠對模擬點擊器進行檢測。

以上介紹的這些手遊通用保護功能各有其特點,開發者可以按實際需求進行選擇:

<table><tbody>

功能

特點

反調試

檢測方式隱蔽,大大提高動態逆向分析難度

反模擬器

可以通殺所有已知和未知模擬器

文件校驗

兼顧了效率和安全性

防二次打包

使用了更為底層的方式,可以繞過各種過校驗插件

存檔加密

透明方式接入,不需要開發做額外接入工作

/<tbody>/<table>

手遊風險感知

網易易盾還能夠提供手遊風險感知功能,主要包括包含破解包的檢測、跟破解者無感知對抗、惡意用戶風險評估以及支持私有化部署。

遊戲開發者如何從容應對Unity手遊風險?

三、易盾保護方案特點

網易易盾保護方案具有純Native保護、對引擎SO做加殼、兼容性和穩定性高、性能影響小、支持Windows、Linux、Mac三平臺加固等性能特點。

純Native保護

遊戲dex內部都是第三方SDK以及遊戲內部不涉及到遊戲邏輯的SDK。如果對DEX加殼的話,一方面容易造成Android碎片化,導致dex加殼會降低app的兼容性;另外Android存在Dalvik和Art兩種虛擬機,所以dex加殼會為了兼容2種虛擬機而增加處理成本,從而導致啟動耗時增加比較厲害。阿里和騰訊都有DEX加殼服務,但是支付寶、微信都沒做DEX加殼。支付寶和微信的安全問題應該是所有APP中間最嚴重的,他們都沒做DEX加殼,這很能說明問題,此外所有騰訊的遊戲都沒有做DEX加殼。所以如果手遊保護需要依賴於DEX加殼的話,兼容性和安全性都是很難保證的。因此建議遊戲不要使用DEX加殼。

下圖是以一個第三方遊戲為例,使用jeb分析其dex包含的模塊:

遊戲開發者如何從容應對Unity手遊風險?

網易易盾可以提供純Native保護,使遊戲保護不依賴DEX加殼。DEX加殼和純Native保護優缺點比較如下:

<table><tbody>

影響項

DEX加殼

純Native保護

兼容性

Android的碎片化對dex影響很大

Android的碎片化對natvie層沒有影響

啟動時間

啟動的時候需要對數兆的DEX進行讀文件、解密、ota優化,啟動時間影響很大

C代碼的內存操作,啟動時間影響很微小

運行速度

成倍影響運行效率

對運行幾乎無影響

渠道過審

加殼後影響渠道植入SDK

不影響渠道打包

安全性

對遊戲無保護作用,很多遊戲破解版都帶著dex殼

完全針對手遊量身定製的保護,到各種遊戲威脅都有防護

/<tbody>/<table>

對引擎SO做加殼

基本上所有的破解都依賴於對引擎so的逆向分析,如果對so進行了加殼保護,會大大增加遊戲被破解的門檻。除了對引擎SO加殼,網易易盾還會對敏感函數代碼做校驗。

遊戲開發者如何從容應對Unity手遊風險?

兼容性和穩定性高

兼容強的原理在於所有保護都在SO層,不會對DEX進行修改,有效避免了Android碎片化導致的兼容問題。網易易盾的兼容性極高,可以兼容從Android 2.3到Android 9.0所有版本系統、所有模擬器以及所有遊戲引擎使用的指令集。

手遊保護的穩定性,需要遵循如下發布流程:

  1. QA測試:在200臺手機上以及各種模擬器上測試;

  2. 預線上測試:將安全模塊集成到日活1000的APP上線測試2周;

  3. 版本發佈:前面2輪都測試穩定後,正式發佈;

  4. 線上迴歸:先在內部比較小的遊戲上線測試,確保穩定性。

性能影響小

易盾保護方案還具有性能影響小的特點,無論是CPU佔用、內存佔用、啟動時間、電量消耗等方面的影響幾乎都可忽略不計。

<table><tbody>

性能指標

影響大小

CPU佔用

增加0.5%-1%

內存佔用

增加1M-3M

啟動時間

增加30ms-150ms

電量消耗

增加0.5%-1%

安裝包體積

增加1.5M-3M

流量消耗

無影響

GPU佔用

無影響

/<tbody>/<table>

支持Windows、Linux

、Mac三平臺加固

此外,易盾保護方案還支持Windows、Linux、Mac三平臺加固,加固工具以jar包形式提供,不僅自帶極速簽名功能,而且對加固做了全面優化,速度更快。

遊戲開發者如何從容應對Unity手遊風險?

加固接入的對接過程包括:

遊戲開發者如何從容應對Unity手遊風險?

  1. 確定遊戲加固項;

  2. 易盾技術支持雲端配置好加固項;

  3. 獲取appkey;

  4. 下載加固jar包工具,根據使用說明配置好appkey。

四、易盾的解決方案獲得了哪些客戶認可?

網易易盾保護方案廣泛應用於實際案例中,包括網易公司內部的倩女幽魂、終結者2:審判日等手遊之中。

遊戲開發者如何從容應對Unity手遊風險?

在外部,也有遊戲公司多個遊戲皆採用了易盾手遊保護方案。

遊戲開發者如何從容應對Unity手遊風險?

最後:易盾還在現場舉辦了安全診斷環節,現場有用戶問及加固的流程。網易客戶全工程師李沛然表示,加固流程上,一條命令行即可接入,不會影響開發流程。

“使用很便捷。”李沛然強調。


分享到:


相關文章: