知物由學|遊戲開發者如何從容應對Unity手遊風險?

2021-02-13 網易易盾

「知物由學」是網易雲易盾打造的一個品牌欄目,詞語出自漢·王充《論衡·實知》。人,能力有高下之分,學習才知道事物的道理,而後才有智慧,不去求問就不會知道。「知物由學」希望通過一篇篇技術乾貨、趨勢解讀、人物思考和沉澱給你帶來收穫的同時,也希望打開你的眼界,成就不一樣的你。當然,如果你有不錯的認知或分享,也歡迎通過郵件(zhangyong02@corp.netease.com)投稿。


以下為正文:

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

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

 

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

 

一、Unity手遊面臨的風險


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

 

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

 

破解風險

 

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

 

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

 

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

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

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

 

 

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

 

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

 


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

 

外掛工具

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

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

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

某QQ群售賣的GG lua腳本

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

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

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

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

 

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

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

 

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

 

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

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

二、易盾是怎麼做的?

網易易盾能夠提供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 mono DLL腳本加密經歷了三代的技術演進。

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

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

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

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

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

IL2CPP 加密

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

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


Assetbundle加密

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

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


手遊通用保護功能

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

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

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

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

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

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

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

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

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

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

功能

特點

反調試

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

反模擬器

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

文件校驗

兼顧了效率和安全性

防二次打包

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

存檔加密

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


手遊風險感知

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

三、易盾保護方案特點

網易易盾保護方案具有純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包含的模塊:

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

影響項

DEX加殼

純Native保護

兼容性

Android的碎片化對dex影響很大

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

啟動時間

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

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

運行速度

成倍影響運行效率

對運行幾乎無影響

渠道過審

加殼後影響渠道植入SDK

不影響渠道打包

安全性

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

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

對引擎SO做加殼

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

 

兼容性和穩定性高

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

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

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

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

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

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

性能影響小

 

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

 

性能指標

影響大小

CPU佔用

增加0.5%-1%

內存佔用

增加1M-3M

啟動時間

增加30ms-150ms

電量消耗

增加0.5%-1%

安裝包體積

增加1.5M-3M

流量消耗

無影響

GPU佔用

無影響

 

支持Windows、Linux、Mac三平臺加固

 

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

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

確定遊戲加固項;

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

獲取appkey;

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

 

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

 

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

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

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

「使用很便捷。」李沛然強調。

相關閱讀:

知物由學第三期:知物由學 | 一文讀懂網際網路內容審核機制

知物由學第四期 | 乾貨!一文了解安卓APP逆向分析與保護機制

知物由學第五期 | 這些企業大佬如何看待2018年的安全形勢?

相關焦點

  • Never Too Small to Dream Big —— Unity大賽獨立遊戲開發者張翰...
    Unity大賽有幸對張翰榮進行了採訪,採訪過程有感於這是一個非常真誠的獨立開發者。獨立遊戲是如何「贏在創意,貴在獨立精神」的?獨立遊戲製作人應對市場上的困境如何做出堅持?開發Unity遊戲過程中如何解決效率優化等問題?這位堅持夢想的獨立遊戲製作人為我們娓娓道來。
  • 新手如何從零開始學習unity
    自從 unity5發布免費過後,有很多獨立遊戲開發者轉向unity遊戲開發,unity的優勢就是多終端跨平臺打包,入門也快,很多人感覺自己的英文不好,就覺得學不會,其實這是一個誤區,unity的界面雖然是英文的,但是它的窗口就只有那麼幾個,用的次數多了,也就自然的熟練了,那麼新手該如何從零開始學習unity呢?
  • Unity3D 推薦的7個項目和案例練習
    過高要求自己可能會浪費學習的時間,而且Unity3D是遊戲開發工具,學習匹配的內容以應對面臨的參賽、畢設、工作才是關鍵。學習的階段:初級則是能快速完成、少量插件運用的案例。中級則涉及遊戲框架,綜合運用。高級則涉及網絡開發,伺服器端。
  • 《休閒遊戲開發者指南》發布,新時期的Ohayoo如何全面助力開發者?
    對此,《休閒遊戲開發者指南》結合大量行業報告數據分析後指出,近年來手遊用戶增長接近天花板,品類競爭也已逐漸紅海化,再加上廠商馬太效應的不斷加劇,在多重「利空」的夾擊之下,不僅新遊難出「爆款」,手遊整體的研發門檻也在不斷提高,這對大多數廠商的生存環境造成了極大的衝擊。
  • 最新用Unity做的2D遊戲,《戰魂銘人》手遊
    Unity開發2D遊戲較容易上手,軟體發展前景也是蠻不錯,今天又有一款採用Unity開發的人氣手遊首發上市--《戰魂銘人》(今天安卓平臺也可以玩了):我們從 Unity開發及學習角度,說一下《戰魂銘人》這款遊戲。超仔拋磚引玉,各位有什麼更好的意見及建議還請留言評論。
  • 我們跟Unity聊了聊,如何助力3A遊戲製作
    在手遊開發領域發光發熱,這也導致Unity被慣性的打上了「手遊引擎」標籤。2020年11月16日,中國Unity線上技術大會以在線直播的形式,為廣大 Unity 開發者帶來一系列前沿技術學習和優秀案例品鑑的 「視聽盛宴」。
  • unity的自學之旅
    從小熱愛遊戲的我,走上了獨立遊戲開發的道路,因為大學是計算機專業,所以學到了一些程式語言,數據結構等等。 又幸運的第一份工作就是手遊開發。所以有幸一隻腳踏進了遊戲開發的大門。一開始是手遊開發,使用的cocos2D-lua,開發一些休閒的小遊戲,比如類似黃金礦工的那種,只不過把裡面的礦石,做成了一些魚類,成了一款釣魚的小遊戲,還有射擊類和回合制的。買了一些關於lua語言的還有古納於cocos2D-lua的書籍。
  • 如何用Unity做一款H5小遊戲
    而在小遊戲流量紅利釋放後,靠內容產品驅動的新一輪市場增長成為整個行業的期待。一方面是完善的平臺生態需要更多優質開發者與團隊的進入激發新活力,另一方面玩家用戶對產品內容品質需求促使著行業研發製作技術的革新。
  • 第二屆騰訊遊戲開發者大會全回顧:以交流之名,探索遊戲未來
    8月11日,由騰訊遊戲學院舉辦的第二屆騰訊遊戲開發者大會(Tencent Game Developers Conference簡稱TGDC)在深圳蛇口舉行。
  • Unity官方示例:在ARCore和ARKit中實現多人遊戲
    不少遊戲開發者已經用ARKit開發出了很多好玩的遊戲。但是不少開發者都向雷鋒網表示由於ARKit目前還難以支持多人遊戲,大大降低了AR遊戲的社交性和可玩性,也限制了遊戲場景。在Unity Austin 2017中,Unity向大家介紹了如何在Unity中使用ARKit和ARCore,以及如何解決多人遊戲的問題。此文原發於「Unity官方平臺」公眾號,雷鋒網獲授權轉載。
  • 第二屆GMGDC全球移動遊戲開發者會閉幕
    由成都高新區管委會、成都是博覽局支持,GMGC全球移動遊戲聯盟主辦的「第二屆 GMGDC全球移動遊戲開發者大會」今日18:30於成都圓滿閉幕。大會會期兩天,但圍繞大會所舉辦的線上商務活動接近15場,從本月21日開始至24日截止。
  • Unity「出圈」:遊戲引擎的技術革新和跨界商機
    日前,《王者榮耀》在其五周年盛典上宣布已達到1億日活躍用戶,成為了名副其實的「國民遊戲」。鮮有人知的是,實力巨作《王者榮耀》的背後是來自全球領先的實時3D創作引擎Unity的技術支持。
  • Unity零基礎到就業 7.5折預售
    不久,需要系統的學習不知道如何從頭到尾,系統深入的學習掌握unity學過少量或不少散課,但不得其法,不知道如何選擇課程希望紮實的掌握C#與Unity開發技術,成為有能力可就業的開發者解決什麼問題:很少有專門統一圍繞核心的路線專門設計一門 成體系的unity課程。
  • 非科班如何通過業餘時間自學遊戲開發,最終收穫騰訊網易offer
    且看這位同學如何通過業餘時間自學,並拿到大廠遊戲開發的offer~01個人情況我是華科某坑院的本碩學生,非科班生,我想我的經歷對一些想要進入計算機領域的非科班生會有一些幫助。我在保研後大四就進入實驗室,由於一些原因,不是很喜歡現在的行業,因而很早就決定轉行。
  • UE4開發遊戲有優勢,手遊為何還用Unity,網友:耗電發熱解決了?
    事實上手遊的開發引擎的選擇依然受制於手機硬體性能的限制,同時比PC端更難的是,你還需要考慮到耗電以及發熱的問題,所以大多數廠商並沒有廣泛的採用虛幻引擎來開發遊戲,轉而Unity引擎則更受歡迎。市面上使用Unity引擎開發的手遊當中,像是《王者榮耀》《符文大地傳說》以及《劍網3:指尖江湖》等等都有不錯的表現。以指尖江湖為例,它在遊戲畫風的色彩表現上明豔而精緻,充滿了典型的二次元風格。
  • FlappyBird開發者:遊戲火是因為人們懶
    2014年初,一款名為《FlappyBird》的休閒虐心手遊迅速統治了全球免費榜,當時最高單日廣告收入5萬美元,直接為開發者們打開了通過廣告獲取收入的大門,如今廣告已經成為很多手遊主要甚至最重要的收入來源。
  • Unity和UE4兩大遊戲引擎,你該如何選擇?
    作為一個從事了遊戲開發近十年的程式設計師,我客觀的告訴你:Unity和UE4各有千秋,不分伯仲!     所以在回答這樣的問題時,我往往會告訴對方:Follow your heart!     但我相信這個問題依然困擾著許多想成為遊戲開發者的初學者們!那麼今天,我就給你好好道來,你應該如何選擇!
  • 對話新經濟人物|Unity張俊波:遊戲引擎讓虛擬技術創造現實價值
    張俊波告訴記者,遊戲引擎的工作是將遊戲開發中大量非創意、非遊戲內容的製作由交給機器執行,讓開發者可以專注做遊戲創意。目前市面上,除了Unity3D之外,寒霜引擎、起源引擎等通用引擎逐漸佔據了市場的重要份額。其背後是出於節約成本、縮短周期和降低風險這三方面的考慮,越來越多的開發者傾向於使用第三方的現成引擎製作自己的遊戲。這意味著一個龐大的引擎授權市場正在形成。
  • 2020騰訊遊戲開發者大會圓滿落幕
    12月10日,由騰訊遊戲學院舉辦的第四屆騰訊遊戲開發者大會(Tencent Game Developers Conference,簡稱 TGDC)圓滿落幕。
  • 專訪Unity 大中華區總裁:你所不知道的 Unity
    在與愛範兒的訪談中,Unity 大中華總裁符國新(Allen Foo)闡述了 Unity 獲得巨大成功的原因:2008 年蘋果的 App Store 正式引爆了手機遊戲,面對小型開發團隊的爆發式崛起,Unity 的理想就是,如何更簡單地讓引擎技術滲透到所有的屏幕上。