1. 程式人生 > >建一座安全的“天空城” ——揭秘騰訊WeTest如何與祖龍共同挖掘手遊安全漏洞

建一座安全的“天空城” ——揭秘騰訊WeTest如何與祖龍共同挖掘手遊安全漏洞

rpg 差異 商業 log 自動 pla 腳本 逆向 對比

作者:騰訊WeTest手遊安全測試團隊
商業轉載請聯系騰訊WeTest獲得授權,非商業轉載請註明出處。


WeTest導讀

《九州天空城3D》上線至今,長期穩定在APP Store暢銷排行的前五,本文將介紹騰訊WeTest手遊安全團隊在遊戲上線前為《九州天空城3D》挖掘安全漏洞的全過程。


《九州天空城3D》(下文簡稱《九州》)是祖龍娛樂的一款正版授權次世代3D飛行手遊,在8月,正式向全平臺開放。作為一個前身是端遊研發工作室的研發商,祖龍娛樂在《九州》中將端遊中經典的“飛行功能”重新展現給了玩家,《九州》以東方幻想元素為基調,熟練運用了PBR材質渲染、全局動態光影、超清粒子特效、真實物理碰撞等技術,實現了“雙人飛行”,“360°全方位自由空戰”等創新玩法。在這款手遊推出時,我們發現,祖龍娛樂在手遊的研發技術上正變得越來越嫻熟。

技術分享

遊戲設計方面,《九州》設計了很大的地圖,不做任何的地形限制;另外玩家在飛行過程中也能發生戰鬥,全方位的空戰體驗在手遊中還是相對比較少見的。

玩法方面,《九州》設計了“雙人飛行”的特色功能,將玩家之間的互動與這款遊戲的核心賣點“飛行”巧妙地結合到一起。不過,《九州》的遊戲策劃很清楚,作為一款MMO遊戲,為了留住玩家,其最終的落腳點還是在社交上,為了讓玩法和社交能夠更好的結合,遊戲的平衡性和遊戲社區內的氛圍建設非常重要。為了保證遊戲的健康運轉,祖龍娛樂對反外掛的工作非常重視。

《九州天空城3D》安全測試的開端

安全問題相比遊戲的其他問題,由於其測試的門檻較高,經常會被手遊開發者忽略。一些手遊開發者會抱有“等出現了問題之後再去修復”的想法, 然而等到問題出現的時候,往往對遊戲的收入、口碑已經產生了很大的影響,常見的外掛危害包括以下幾點:

技術分享

騰訊遊戲從進入遊戲行業之後,就遭遇過不少外掛的侵襲,因為不斷的踩坑,騰訊在進入手遊領域之初,非常的重視安全測試。騰訊WeTest手遊安全測試團隊從2011年就開始對手遊安全領域進行探索和技術積累,旨在通過提前發現遊戲版本的安全漏洞,預警風險,幫助提高騰訊遊戲的品牌和口碑。目前騰訊WeTest團隊對騰訊內部所有遊戲都會進行詳盡的安全測試,《王者榮耀》、《亂世王者》、《穿越火線:槍戰王者》以及《火影忍者手遊》等精品遊戲每個對外版本都會進行嚴格的安全測試。

在端遊領域沈澱多年的祖龍娛樂,同樣非常清楚外掛對於遊戲平衡性的危害,由於在遊戲質量測試方面與WeTest有過多次成功的合作,因此在《九州》上線前,祖龍方面很果斷的就決定與騰訊WeTest手遊安全測試進行合作,騰訊WeTest也希望能將自己在手遊安全領域的經驗傳遞給《九州》團隊。

本文整理了《九州》安全測試過程中的一些思路和實踐內容,與手遊開發者分享,希望手遊開發者能夠了解安全測試,重視安全測試。(文中的漏洞均已修復,僅做學習交流參考)

技術難點

手遊的使用場景與傳統APP有著巨大的差異,不同的遊戲玩法, 技術實現都不一樣,因此手遊安全測試團隊需要對《九州》所有模塊進行比較全面的風險分析,針對遊戲核心玩法和遊戲中高價值產出點重點進行漏洞挖掘,提前暴露遊戲中潛在的安全風險,最大程度降低線上外掛打擊成本。

《九州》遊戲客戶端使用Unity3D引擎開發,但是手遊安全測試團隊在接入協議工具中發現客戶端並不是100%用C#實現,僅從C#層接入工具無法獲取遊戲所有通信協議數據。逆向分析遊戲客戶端後發現實際還有大量遊戲邏輯使用Lua開發,對應功能的協議數據也在Lua層進行組包。接入協議工具必須從C#和Lua層進行Hook,獲取協議明文數據。

另外,在對協議數據的解析中也遇到一些挑戰,遊戲同時使用了自定義和PB兩種協議結構,需優先對自定義協議結構進行格式轉換,實現針對自定義協議Decoder進行解析,PB部分則直接用PB Decoder進行解析。

測試方案

一、測試分析及規劃

1、確定遊戲核心玩法
《九州》的核心玩法主要是組隊副本及各種活動,另外還有戰鬥外角色技能學習、裝備、寵物等。

2、確定安全測試策略
《九州 》是一款使用Unity引擎開發的RPG遊戲,遊戲采用自定義的二進制協議 (XML +PB),邏輯使用 c#+lua開發。

本次安全測試目標覆蓋整個遊戲模塊,主要分為周邊系統和局內戰鬥邏輯,針對該遊戲類型,本次測試以協議為主,針對部分遊戲內的戰鬥邏輯,采用邏輯修改的方式進行測試。

WeTest手遊安全測試針對三方面進行檢查:
1)遊戲客戶端資源安全測試
2)遊戲邏輯安全測試
3)服務器穩定性

二、測試的實施

騰訊WeTest手遊安全測試團隊將審核的內容分為靜態安全漏洞和動態安全漏洞。

靜態漏洞掃描
主要通過靜態掃描的方式,對遊戲apk中配置檔、資源文件、腳本文件、manifest.xml、so文件,通過自動掃描的方式來進行檢查項的確認。(目前此塊內容已集成到SR手遊安全測試方案中,覆蓋了120+條安全檢查項和信息安全測試項)

動態風險分析
主要根據遊戲特定的內容和玩法,針對性地分析安全風險點,通過協議、函數、內存、腳本等技術,多維度檢查遊戲服務器對相應的風險點是否有完善的校驗或反外掛策略。

根據對漏洞類型的提煉,WeTest手遊安全測試團隊根據《九州》具體玩法,推導出相應的獲益方式。通常根據風險點分析的方式,可以完整覆蓋到遊戲中涉及到安全的部分,結合檢查點,就生成了可以在實際操作中執行的用例,形成閉環。
技術分享

SR手遊安全測試深度覆蓋

其中比較典型的檢測方式有:

1、雙端協議修改
手遊安全測試工具通過直接註入遊戲的組包函數,自動解析協議結構,免去了需要依賴測試人員分析二進制數據進行協議破解。在沒有協議結構文件時也能自動解析協議結構。手機和web端都可以進行協議數據展示,在手機上可以實施地顯示協議發包的效果,在web上可以動態一鍵修改相應字段,互補不足。
技術分享

雙端協議修改工具web效果展示

2、函數動態修改
技術分享

函數動態修改原理

對於單局類玩法的手遊,函數動態修改具備最強的漏洞能力。但是早期的測試方法效率非常低下,需要每個函數單獨編寫hook函數、定義函數指針變量、申請獨立hook資源、重新編譯代碼。同時,使用門檻很高,只有專業的安全專項測試人員才能操作。手遊安全測試團隊的函數動態修改工具通過動態通用hook技術,不需要測試人員再進行hook函數編碼。

技術分享

函數動態web效果展示

3、內存對象修改
WeTest手遊安全測試團隊為測試人員直接展示出遊戲中對象列表、對象屬性名稱、屬性值等信息,並且可以以對象為單位進行搜索,告別傳統手遊內存測試工具搜索“內存數值”方式定位目標內存地址的低效方案,實現該項測試成本降低70%。

WeTest手遊安全測試團隊為《九州》挖掘出的部分漏洞和修復方案

一、客戶端安全漏洞

1、遊戲邏輯 DLL未加密,可直接被反編譯,降低了外網破解遊戲的難度,也存在被外掛利用的風險。

2、遊戲LUA腳本未加密,可直接從內存中dump出源碼,增加了遊戲被外掛利用的風險。

二、遊戲邏輯問題

1、部分協議字段冗余,且校驗不嚴格,存在嚴重邏輯問題。如生活制作功能中,物品 隨機應該由服務器下發,而非客戶端上報,否則存在制作指定物品的風險;對物品等級缺失 校驗,導致低等級可制作高等級物品 。

2、部分驗證邏輯只存在於客戶端。客戶端是不可信任的,客戶端驗證只能用於UI顯示 控制,後臺應該同樣增加校驗,防止客戶端偽造或構造數據來繞過驗證。如“寵物更名”中,服務器應該檢查長度限制,否則由於該數據會寫入DB,可能被利用造成客戶端對服務器數據庫攻擊。

問題示例

問題一:生活技能制作漏洞 ,低等級技能可生產高等級物品

【漏洞類型】:越權操作
【問題描述】
生活技能存在漏洞,使用道具制作請求篡改 recipeXXX參數,可生產高於現有等級的道具

技術分享

技術分享

【影響面】
屬於越權操作風險,利用漏洞可在遊戲中獲益。

問題二:一個同伴可以重復助戰,存在刷評分排行榜的風險
【漏洞類型】:刷戰力
【問題描述】
使用一個同伴ID通過forXXXXX_pos多次發送,可用一個同伴重復助戰

技術分享

技術分享

【影響面】
可用於刷評分,影響遊戲平衡

問題三:對達到購買上限的道具,可修改購買方式無限購買
【漏洞類型】:無限購買
【問題描述】
用其他貨幣可以無限購買道具

操作方法:
1.錄制交易系統—商鋪購買協議“MalXXXXping”
2.修改協議字段“pa_type”參數為“1”
3.發送協議

技術分享

銀幣購買達到上限:

技術分享

修改用金幣購買成功:

技術分享

【影響面】
突破遊戲限制,使用元寶可加快成長。

強調文字解決辦法

1、遊戲客戶端安全方面,需對客戶端進行加殼,dll代碼文件加密,Lua腳本則建議改為Luac或Jit模式,有效提升客戶端被分析和破解的難度。

2、其他協議漏洞大部分屬於後臺檢驗疏忽型,需針對性完善後臺邏輯校驗。

最終效果

在項目測試階段,手遊安全測試團隊為《九州天空城3D》發現了數個漏洞,並針對這些漏洞產生的原因和修正都提供了專業意見,並很快順利修正了問題,與開發商一起將隱患消除。《九州》的技術負責人表示:“外掛問題一直是祖龍在做遊戲過程中要跨越的雷區,MMO類型遊戲內容很多,需要專業的安全團隊來對遊戲進行一個全方位的檢測,WeTest手遊安全測試為《九州天空城3D》正式開啟不刪檔,創造安全、公平、健康的遊戲環境提供了堅實支撐和保障。”


關於騰訊WeTest手遊安全測試團隊

騰訊WeTest手遊安全測試團隊從2011年初開始對手遊安全領域進行探索和技術積累,旨在通過提前發現遊戲版本的安全漏洞,預警風險,打造出業界領先的手遊安全測試技術方案,在工具上已經支持所有騰訊在研和運營的手遊項目。團隊通過使用與正式服同樣的遊戲客戶端和服務器,模擬外掛工作室制作外掛的過程,依靠自身的技術積累來提高專業程度,持續保持漏洞的發現率。

目前提供了專家測試服務,希望通過提前發現遊戲版本的安全漏洞,預警風險,幫助提高騰訊遊戲的品牌和口碑。

服務目前已經對外開放,歡迎前來使用http://wetest.qq.com/product/sr
如果對使用當中有任何疑問,歡迎聯系騰訊WeTest企業qq:800024531

建一座安全的“天空城” ——揭秘騰訊WeTest如何與祖龍共同挖掘手遊安全漏洞