“易+”開源 | 簡單可信賴,GameSentry 正式開源

網易易盾發表於2022-09-27

導讀:2022 年 9 月 15日,網易智企“易+”開源計劃正式釋出網易易盾遊戲安全測試工具——GameSentry,本文將從技術角度分析 GameSentry 的設計邏輯與設計經驗。



文 | 網易易盾



背景


GameSentry  誕生自網易易盾移動安全團隊,源自團隊多年在一線的經驗和方法論沉澱。是一款簡單、高效的工具,主要透過分析遊戲協議內容、遊戲函式邏輯和對應的地址、部分程式碼熱更、自動化 Hook 等功能達到降低深層次安全測試門檻的目的。


GameSentry 目前已正式開源網易易盾 GameSentry 正式開源,做遊戲安全保障的尖兵利刃),我們希望透過降低安全測試的複雜度,讓遊戲公司能夠提前發現和感知漏洞和風險點,構建更成熟的安全保障體系,降低遊戲風險,回饋玩家對遊戲的熱愛。





什麼是安全測試 


通常遊戲的生命週期可分為【開發】【測試】【釋出】【運營】四個階段。


在遊戲釋出之前,做好安全測試工作是非常關鍵的一環,好的【測試】不僅能更好加強外部防禦,抵禦釋出後的外掛破解等侵害,同時還能查漏補缺,發現此前內部設計和程式碼架構上的疏忽,提前最佳化以期減少正式上線後的 bug,讓玩家們獲得更好的遊戲體驗,使得遊戲的生命週期更為長久。


目前,常見的遊戲安全測試有以下三種方向:

  • 遊戲協議漏洞測試:透過修改協議內容來檢查遊戲在設計、資料校驗、邏輯或數值設計上有無可被利用的風險點。這裡與 QA 測試存在一定的重合,但側重點不同。協議測試的輸入不受客戶端的限制。比如聊天功能,客戶端的輸入框是一定會有長度、型別限制的,而協議則沒有這些限制。

  • 伺服器健壯性測試:透過傳送畸形、大量、無序的資料,校驗伺服器是否能正常執行。防止外掛或工作室惡意攻擊,使伺服器異常或當機。

  • 外掛模擬測試:模擬外掛對遊戲進行記憶體修改、變速、資原始檔修改等操作,檢測是否能在遊戲中獲得收益或降低遊戲難度。


測試者們一般會根據需求選用合適的技術和工具,從攻擊者的角度對遊戲進行逆向分析和破解,進而主動發現和挖掘系統中存在的弱點、技術缺陷和安全漏洞,並進行缺陷放大和風險性評估,以期提前暴露遊戲應用程式中潛在的安全風險,提供安全漏洞修復方案,最大程度降低事後危害與外掛打擊成本。




通常有哪些測試方法


資源提取:AssetStudio、UABE

C# 程式碼:il2cppdumper、dnspy

Lua 程式碼:dump、load、reload

修改記憶體:GG、frida、hook技術、root 相關


下文將介紹主要的風險以及測試方法。




 資源破解 




危害:遊戲資源洩露

測試步驟:使用工具破解資源,觀察是否存在未加密或可破解的資源,包括圖片、音訊、模型等;

注意:以遊戲中不應該暴露的內容為判斷,比如道具圖示,背景音樂等;不因開場動畫,主題曲,CG 這類的資源置為不透過。

unity3d 引擎使用:AssetStudio/GD Ripper;

UE4 引擎使用:umodel;

neox 引擎:GD Ripper/quickBMS;

npk 檔案:NXPK 格式,EXPK 格式使用 NPKExtractor1.1.5.5;

使用 Extractor 工具提取




  重簽名校驗 




危害:

  • 刪除關鍵美術模型(怪物、角色、寵物等)檔案,重打包,觀察是否影響遊戲邏輯-引發漏洞,且玩家因此獲益。

  • 刪除音訊資源(戰鬥音效、背景音樂等)檔案,重打包,觀察是否影響遊戲邏輯-引發漏洞,且玩家因此獲益。

  • 刪除特效資源(技能特效等)檔案,重打包,觀察是否影響遊戲邏輯-引發漏洞,且玩家因此獲益。

  • 如不能精確定位檔案內容與型別,隨機抽樣測試。

  • 如果美術資源是多個檔案分開放置,並可以從檔名中看出,嘗試修改檔名,觀察能否讓免費皮膚或道具替換為收費資源。

測試步驟:

APK 解析後刪除部分資原始檔後依舊可以重打包,觀察是否可以正常安裝遊戲、執行遊戲。




 dll 修改風險 




危害:修改遊戲邏輯。

測試步驟:

  • 使用 ilspy 的 reflexil 外掛修改 Assembly-Csharp.dll。

  • 重新編譯為 dll,重新命名替換原有 dll 檔案。

  • 打包 APK,安裝執行,觀察是否生效。




 SO 破解風險 




危害:修改遊戲正常邏輯

測試步驟:

  • 觀察函式列表,邏輯函式名是否被刪除。例如:

    mono_image_open_from_data_with_name 、

    luaL_loadbufferx 、

    il2cpp_image_get_class 等。

  • 符號查詢

    查詢 data-%p,觀察是否存在(il2cpp.so),一些特殊符號一定程度上能增加遊戲被破解的機率。




 反除錯檢測 




測試步驟:

  • 使用工具開啟遊戲。

  • 在 libc.so 和 open 處下斷點。

  • 執行遊戲,觀察是否暫停。




 存檔移植 




測試步驟:

  • 將遊戲目錄下的檔案複製到 PC 中。

  • 將檔案複製到另外一臺裝置/模擬器中。

  • 觀察是否繼承(部分繼承)原先遊戲的進度。




 存檔檔案明文儲存 




測試步驟:

  • 觀察是否存在存檔檔案,.sqlite, .db 字尾的檔案,測試能否用 sqlitemanager 開啟。

  • 觀察是否存在其他存檔檔案,直接用 notepad 開啟,檢視是否存在明文。

  • 觀察在配置檔案中是否存在明文隱私資訊,例如使用者的賬戶密碼,資源的存放路徑等。




 記憶體測試 




測試方法:分析遊戲邏輯,修改對應位置的記憶體。(此過程需要使用工具對 APK 反編譯、並 dump 記憶體內容,並使用 Hook 進行修改)

此內容需要根據不同遊戲、不同邏輯進行測試。主要檢測越權、數值、邏輯等異常。




 協議測試 




測試方法:獲取遊戲中全部協議,並對其進行修改重發。(此過程需要工具對 apk 反編譯,獲取到協議傳送相關程式碼,必要時需要對其進行解密。也需要使用到 Hook 對相關函式進行修改)

主要檢測越權、畸形資料、重發等。不同遊戲需要構造不同的測試用例。






GameSentry 有什麼優勢




普通安全測試需要測試人員有較高的逆向水平,對人員的技術要求較高。對於結果導向的測試,雖然逆向必不可少,但逆向費時費力,測試質量與逆向水平關係並不大。所以需要一款工具讓工作內容不再放在逆向、Hook、Lua 修改這些技術上,而是直接關注遊戲的邏輯


就以結果為導向的測試而言,雖然對逆向水平要求沒那麼高,但逆向卻費時費力,也並非每個團隊所能接受的。


GameSentry 主要透過分析遊戲協議內容、遊戲函式邏輯和對應的地址、部分程式碼熱更、自動化 Hook 等功能達到降低深層次安全測試門檻的目的。可以簡化記憶體測試、協議測試過程中對於 APK 逆向、Hook 編寫、指令碼修改、指令碼 dump 的繁雜操作,大大降低測試人員的上手門檻和逆向工作。


而從實踐效果上看,GameSentry 的設計思路是從攻擊者的角度對遊戲進行逆向分析和破解,主動發現和挖掘系統中的弱點、技術缺陷和安全漏洞,並進行缺陷放大和風險性評估,提前暴露遊戲潛在安全風險,讓安全團隊可以在危害發生前就著手準備漏洞修復方案,可以最大程度降低事後外掛危害與外掛打擊成本




圖片





為什麼要開源




網易易盾在二十多年的一線實戰經驗中面對不同遊戲型別場景痛點,沉澱了大量的經驗、方法論,並基於此構建了一套成熟的工具集。這些年我們從社群吸取了很多營養,所以也想把這樣一個融合團隊多年經驗的新一代產品回饋到社群。


作為一個開放的專案,我們認為將專案開源也有利於推動產品迭代,比如 Unity 的版本眾多,且 il2cpp 改動比較頻繁,在相容性上面臨著巨大的挑戰。而開源,不僅能讓大家能享受到集體的智慧成果,便捷了遊戲開發者的測試工作,也可以透過社群的貢獻,覆蓋相容更多的引擎版本,提升行業整體效率,不重複造輪子。


更重要的是,作為遊戲熱愛者,我們希望透過降低安全測試的複雜度,讓遊戲公司提前發現並感知到漏洞和風險,構建更成熟的安全保障體系,降低遊戲風險,延長遊戲生命週期,提升使用者體驗,回饋玩家對遊戲的熱愛!期待未來與更多遊戲愛好者、遊戲開發商們攜手共進,生態共享。





目前版本的簡要說明



功能
支援情況
函式展示
函式 Hook
記憶體例項展示
函式呼叫
函式修改
一鍵 Log 展示
dump(Lua、dll)
Lua 無重啟修改
協議展示
協議修改
自定義







歡迎加入貢獻


你是否正在規劃新專案上線前的安全測試?

你是否正在頭疼專案 APK 逆向的問題?


非常歡迎你參與遊戲安全測試工具使用及意見反饋,我們期待你的加入。

點選“閱讀原文”或掃描二維碼檢視開源原始碼。

掃描社群二維碼加入社群互動。



圖片


掃碼檢視原始碼





相關文章