一、手遊安全應該關注什麼?
之前接到客戶某款遊戲第三方安全測試機構的報告,報告顯示遊戲存在高危,客戶有點納悶:用了第三方專業(易盾)的保護,怎麼還存在高危?接下來,讓我們一起分析一下這些“高危”,是不是真正對手遊構成了嚴重的威脅?
第三方的安全測試機構會對手遊APP進行安全測試,包括客戶端的靜態安全、客戶端資料安全和客戶端執行時安全等,接下來我們一一分析下:
1.客戶端靜態安全
1.1反編譯安全
某第三方測試機構透過apktool 和dex2jar 工具對APK進行反編譯,如下圖1-1所示,得到該APK不安全的結論:APP可以被反編譯看到java的原始碼。
圖1-1
由於目前在眾多的手遊架構中,絕大多數的核心邏輯是:
核心是上面的這些,而不是遊戲包中的dex檔案,因此這種粗粒度的檢測不具有參考價值,更構不成高危資訊。
1.2完整性校驗:
該第三方機構透過對該APK替換一個檔案,重新打包能執行——粗粒度得到該APK存在高危的安全問題。
圖1-2
由於手遊釋出到各個渠道的時,渠道會對APK檔案中嵌入些渠道資訊,因此母包一般情況下不會加入完整性校驗,並且對於遊戲包中的資原始檔等核心檔案的保護和校驗處理,易盾有對應的資原始檔加密和強檔案校驗,進一步針對性的保護遊戲中的核心檔案,因此上面那種粗粒度的檢測到高危是不具有參考價值。
2.客戶端資料安全
第三方測試機構首先執行目標APP,使用MemSpcetor檢視目標APP程式中的記憶體段,然後尋找對應的登入的敏感資訊。
圖1-3
這裡先不談論這個工具執行所需要的環境,以及這樣的記憶體資料是不是手遊的核心記憶體資料,而是先來認知一個關鍵點——對於手游來說,最重要的是什麼?實際上,最重要的是遊戲執行過程中游戲業務邏輯所展現出來的記憶體資料安全。比如以GG修改器以及變種代表的一類的攻擊工具;比如透過加速/減速這一類的變速工具以及模擬點選類工具,透過這一類的工具來實現自動打怪升級、做任務、血量無限、金幣自設定、遊戲速度加減等(記憶體資料的保護,易盾有對應的修改器檢測和記憶體資料檢測等)。
3.客戶端執行安全
對於手遊執行安全,第三方測試機構只是僅僅測試了對於root的環境;
圖1-4
實際上,手遊很多是需要支援模擬器執行的,我們知道模擬器大部分是root的形式存在的,因此直接粗粒度的提示使用者風險是不符合業務邏輯的。
並且隨著Android系統的不斷升級,透過尋找系統本身的漏洞會越來越難,因而陸續出現了magsik和多開助手之類的軟體達到相同的root的功能,因此重點應該關注這些執行環境。易盾除了對於執行時上述安全檢查以外,還有其他所有能夠被攻擊者所利用的各種隱患安全環境檢查。
第三方測試機構在執行安全檢查時,除了檢查上面的root安全,還應檢查客戶端輸入記錄保護和劫持保護等。尤其是成功的Activity劫持將會替換客戶端的啟動介面,對使用者產生很大的誘騙作用。
這些是另一個層面的安全,對於真正的手遊安全我們更應該關注另外兩個層面:反破解和反外掛。
二、手遊外掛的侵略
寓攻於守,方能破敵,因此作為防守人,首先要知道攻擊者是怎麼進行入侵的?知彼知己,方能百戰不殆。
1.破解
攻擊者破解手段有很多,主要是包括如下兩種邏輯:
1.1直面破解
攻擊者透過去反編譯分析遊戲中的核心檔案,比如程式碼邏輯或者是資原始檔。典型的就是透過U3D mono中的dll檔案,找到對應的遊戲邏輯進行篡改,達到自己的破解目的,或者去分析il2cpp中的libil2cpp.so檔案,分析其中的關鍵遊戲邏輯進行篡改,進而進行二次打包(如下圖2-1所示)。面對這些破解手段,重要檔案的各種加固加殼的保護應運而生,進而阻擋攻擊者的分析。
圖2-1
1.2迂迴破解
部分攻擊者不是直接透過正面的角度去破解,而是透過研究載入重要邏輯檔案的流程,透過hook或者注入的操作來達到自己的目的,如圖2-2所示,為某攻擊者透過注入一個so檔案達到自己的目的。
也有些攻擊者,重點放在對於libunity.so檔案上,如下圖2-3所示,透過修改libunity.so檔案的關鍵輸出邏輯達到作弊的效果。
圖2-3
這些攻擊者在面對保護方案的時候,透過HOOK來對一些建立執行緒或者退出邏輯來成功且巧妙的繞過一些保護,進而達到自己的目的,以下就是某攻擊手段透過對退出邏輯進行HOOK的操作。
2.外掛
手遊外掛指透過破壞遊戲執行的正常資料和邏輯的各種工具,或者偽造客戶端玩家“正常”操作的一切手段。
目前手遊外掛的表現形式多種多樣,一類包括以模擬點選類、加速器、修改器以及對應所產生的各種變種,或者是透過修改記憶體資料的原理結合andlua或者c4droid等框架來達到對應的各種輔助效果,再配合一些外掛所需要的執行環境,比如雲真機,各類各端模擬器,以及多開等環境,進而達到自己的目的。
當然隨著移動遊戲的市場的快速發展,也出現了一些不修改客戶端的邏輯,偽造玩家來達到自己的手段,比如指令碼精靈和一些離線掛等等,還有一些諸如打金工作室,想更高效地刷取獲取遊戲幣,從而實現自己的利益化。
2.1 直接掛
直接掛主要指的是透過修改客戶端的執行邏輯,進行修改作弊,大多數情況下是通用的,有一對多的屬性。比如GG修改器,燒餅和葫蘆俠等以及衍生的這類的變種,原理是利用修改器搜尋相應數值,再根據數值變化規律定位到在記憶體中的位置,然後直接進行修改達到對應的效果。
也有各類的加速/減速器,比如光環助手,叉叉變速器等代表。原理上透過HOOK一些關於時間相關的函式,影響遊戲幀更新頻率,實現加速過關、減速躲閃技能等功能。
由於直接掛比較多且成熟,這裡就不舉例說明了。
2.2 間接掛
間接掛在不修改客戶端邏輯的情況下進行自動模擬升級,比較有代表性的是模擬點選類的掛,一般情況下是一對一。
以下是一個透過藉助於PC端的Android模擬器的模擬掛的例項,透過在/data/local/tmp釋放一些重要檔案,然後強求adb連線以後,透過傳遞一些功能標誌來對遊戲的libil2cpp檔案進行操作,來達到自動模擬點選的效果。
三、手遊安全的防護
手遊安全問題主要包括反外掛和反破解兩個方面,在不斷與各類破解、外掛的攻防對戰中,網易易盾透過總結不同新型外掛的屬性,持續對手遊加固和反外掛模組進行迭代,完善功能、加強防禦,做到了疾如風、徐如林,不動如山。
最後,再提一句,如果需要對遊戲進行專業性的安全檢測,也可以找我們網易易盾(如果想討論移動應用安全、手遊安全,歡迎加入我們的QQ技術交流群:931107146)!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們還在繼續招人,求簡歷,求牛人加入
一、Android安全工程師
職位描述
1、負責移動安全保護系統(Android方向)的研究和開發
2、瞭解移動安全保護行業的相關動態,和團隊一起不斷更新保護方案
職位要求
1、本科及以上學歷;
2、瞭解基本的Android APP開發;
3、熟練掌握C / C ++或Java程式語言;
4、熟悉IDA Pro,GDB,JEB等常用逆向分析工具,具有大量的逆向分析能力;
5、熟悉ARM,x86 / 64等組合語言,熟練掌握軟體逆向靜態分析,動態除錯,程式碼跟蹤等;
6、具有良好的自學能力和團隊合作精神;
7、做過手遊保護或APP加固保護的優先。
二、IOS安全工程師
職位描述
1、負責網易移動端(iOS)安全技術的研究;
2、負責網易移動端(iOS)安全保護方案的研發。
職位要求
1、本科及以上學歷,豐富的iOS平臺開發經驗;
2、紮實的Objective-C程式設計基礎,熟悉C/C++開發;
3、熟悉彙編,掌握iOS端常見的攻防技術;
4、熟悉IDA Pro、LLDB、 CYCRIPT等除錯分析工具,具備較強的逆向分析能力;
5、有豐富的iOS越獄開發經驗;
6、有APP/遊戲加密保護經驗優先;
7、有較好的學習能力和溝通能力,較強的分析、解決問題能力。
三、高階遊戲安全運營
職位描述
1、負責遊戲安全運營和安全資料分析工作
2、協助團隊解決線上客戶的遊戲安全相關問題
職位要求
1、RPG、FPS、ACT等型別上有一定的遊戲經驗;
2、瞭解常見遊戲的安全問題,比如外掛、工作室、代刷等風險
3、具備較強的主動挖掘安全問題的能力
4、具備一定的遊戲安全策劃能力,能夠提出相關安全需求
5、較好的溝通表達能力,和客戶關懷能力,能站在客戶立場考慮問題
6、具有良好的學習能力和團隊合作精神
7、有一定的移動安全技術經驗或遊戲運營經驗的優先
以上崗位,也可以把簡歷+申請的崗位傳送至bin.xb@corp.netease.com進行申請。
點選免費試用網易易盾手遊智慧反外掛安全服務。