隨著智能手機(jī)的普及,市場(chǎng)的泛娛樂(lè)化,手游行業(yè)發(fā)展迅猛。手機(jī)游戲在整個(gè)游戲市場(chǎng)已經(jīng)占了一定的江山。手游用戶的增多,手游的安全性隨之受到行業(yè)的重視。目前越來(lái)越多游戲面臨各種各樣的安全風(fēng)險(xiǎn),如靜態(tài)修改文件,動(dòng)態(tài)修改游戲邏輯,篡改協(xié)議,游戲盜號(hào),惡意發(fā)言,工作室等等,這些風(fēng)險(xiǎn)極大影響了游戲的平衡性和游戲的體驗(yàn),對(duì)游戲及用戶本身造成消極的影響。
下面將分類介紹這些各種的風(fēng)險(xiǎn)形式以及一些常用的實(shí)現(xiàn)方式。
1.1 靜態(tài)修改文件
游戲文件被靜態(tài)修改再重新打包簽名是很典型的一種安全風(fēng)險(xiǎn),通過(guò)這種方式,原本可能需要購(gòu)買的游戲很可能就能直接玩,甚至在里面打廣告,散播色情和惡意言論等等,損害了游戲開(kāi)發(fā)方的利益;而另一方面游戲本身的一些邏輯被破壞,甚至被插入惡意代碼,導(dǎo)致游戲出現(xiàn)安全風(fēng)險(xiǎn),也損害了用戶的利益。同時(shí),也存在直接修改安裝后的資源文件,代碼文件,配置文件等等,直接影響游戲運(yùn)行邏輯。下面將著重介紹這些手法及其實(shí)現(xiàn)方式。
1.1.1 修改資源
修改游戲資源的方式有很多種,但最終結(jié)果都是影響游戲邏輯。游戲如果被修改了游戲資源,那么原本游戲需要引用到的資源就會(huì)缺失,這樣可能會(huì)導(dǎo)致整個(gè)調(diào)用該資源處理邏輯的鏈?zhǔn)В瑥亩鴮?dǎo)致游戲出現(xiàn)非正常的行為。
一般來(lái)說(shuō),可以嘗試在游戲的資源目錄替換或者刪除一下資源文件,如圖片或聲音資源等,通過(guò)資源的修改,影響游戲的邏輯或者在游戲中做非法宣傳等行為。
例如,某飛機(jī)類游戲的游戲目錄里面存在img_bullet_enemy.png這么一個(gè)文件,如果嘗試把這個(gè)文件刪除掉,然后開(kāi)啟游戲,會(huì)發(fā)現(xiàn)其出現(xiàn)敵機(jī)無(wú)子彈的情況,而玩家的子彈依然可以用,那么這樣就造成了一種無(wú)敵的情況,輕易通關(guān)。再者,通過(guò)非法破解并篡改游戲中的圖片、聲音或者視頻資源,在里面加入自己需要宣傳的廣告,不單影響用戶的體驗(yàn),如果是欺詐類信息還會(huì)間接導(dǎo)致用戶造成財(cái)產(chǎn)安全的損失,也影響了游戲的健康度。
1.1.2 修改代碼
修改代碼最直接的影響的是游戲邏輯,影響邏輯意味著影響游戲的平衡性,這種情況對(duì)其他的游戲玩家是不公平的,容易造成玩家的流失。
就手游來(lái)說(shuō),對(duì)于Native層存放游戲邏輯的游戲,惡意用戶修改得比較多的還是只讀數(shù)據(jù)段和代碼段,只讀數(shù)據(jù)段可能存放著一些對(duì)游戲有重要作用的數(shù)據(jù),代碼段包含了整個(gè)游戲的執(zhí)行邏輯,合理地修改這些會(huì)造成一定的外掛功能,如無(wú)敵,秒怪,技能無(wú)CD等等,在此不一一列舉。而對(duì)于一些核心代碼是在游戲運(yùn)行時(shí)加載編譯的游戲來(lái)說(shuō),惡意用戶甚至只需要通過(guò)對(duì)影響邏輯的核心文件簡(jiǎn)單地反編譯得到源碼般的邏輯后,修改并打包回去就能直接對(duì)游戲造成不良的影響。嚴(yán)重者造成非常惡劣的外掛影響游戲。
當(dāng)然,做這些事情的前提是對(duì)游戲開(kāi)發(fā)環(huán)境以及代碼有一定的了解,但是隨著游戲社區(qū)的普及,論壇介紹相關(guān)的游戲環(huán)境和知識(shí)的文章越來(lái)越多,惡意用戶就有更多的渠道去獲取相關(guān)的知識(shí)和基礎(chǔ)。
1.1.3 修改配置
修改配置文件和修改資源文件有點(diǎn)類似,也可以理解為配置文件其實(shí)是資源文件的一種。一般游戲的配置文件在打包發(fā)布是加密的,一些不注重安全性的游戲很容易直接把未加密的配置文件發(fā)布到外網(wǎng)中,這樣的話惡意用戶能夠輕易修改配置文件。如一些xml文件的修改,bin文件的替換等等。例如某些游戲的xml會(huì)保存著一些屏幕或者地圖索引等信息,直接修改里面的數(shù)據(jù)后可能會(huì)出現(xiàn)一些未預(yù)料到表現(xiàn)。
舉個(gè)例子,某跑酷類游戲修改其中的xml文件的屏幕大小配置選項(xiàng)會(huì)影響游戲主角速度;把原本簡(jiǎn)單關(guān)卡配置的bin文件復(fù)制N份重命名覆蓋原來(lái)困難關(guān)卡的bin文件就形成了游戲場(chǎng)景簡(jiǎn)單化的效果,獲取非法收益。諸如這樣修改游戲配置的情況有很多,這些很大程度影響了游戲的平衡性,對(duì)游戲造成了不良的影響。
1.2 動(dòng)態(tài)篡改邏輯
游戲除了被靜態(tài)修改而面臨風(fēng)險(xiǎn)外,還可能在運(yùn)行時(shí)被動(dòng)態(tài)修改,這種情況很常見(jiàn)。一般來(lái)說(shuō),常規(guī)的動(dòng)態(tài)篡改邏輯都會(huì)伴隨著注入和掛鉤的操作。注入的方式大體分為兩種,一種是通過(guò)注入zygote進(jìn)程滲透到目標(biāo)游戲進(jìn)程中,另一種是直接注入到目標(biāo)游戲進(jìn)程中;而掛鉤操作也有不同的種類,如GOT表Hook,inline Hook等,其目的是攔截游戲邏輯。另外,在一些系統(tǒng)中如安卓系統(tǒng)存在不注入程序而達(dá)到修改程序數(shù)據(jù)的效果,雖然這種方式比較簡(jiǎn)單,但卻是目前影響游戲安全最大的一個(gè)因素之一。
下面分修改代碼和修改數(shù)據(jù)兩類簡(jiǎn)單介紹。
1.2.1 修改代碼
手游中游戲與惡意外掛權(quán)限的不對(duì)等就很容易出現(xiàn)惡意外掛在已root的手機(jī)里面對(duì)游戲?yàn)樗麨?,注入程序,掛鉤代碼,直接影響游戲的運(yùn)行邏輯。
比如一個(gè)游戲在主角在玩副本打怪的過(guò)程中如果打怪的傷害計(jì)算函數(shù)在本地的客戶端內(nèi),那么每一次主角打怪物就必定會(huì)調(diào)用傷害計(jì)算函數(shù)去處理怪物最終的減血量,如果這個(gè)時(shí)候一些惡意外掛程序注入到了游戲中,然后掛鉤這個(gè)傷害的處理函數(shù),在主角對(duì)怪物造成傷害的時(shí)候攔截住了傷害處理邏輯,感知當(dāng)前傷害,并對(duì)這個(gè)傷害值放大數(shù)倍就會(huì)達(dá)到秒怪的效果。
除了上面描述的外,還存在另一種修改代碼的方式,原理大同小異,就是注入后直接修改代碼,這種方式和靜態(tài)修改代碼差不多,只不過(guò)這種方式是以動(dòng)態(tài)的形式修改的,對(duì)于靜態(tài)修改代碼來(lái)說(shuō)只不過(guò)是在內(nèi)存動(dòng)刀而已。
再拿傷害處理邏輯來(lái)說(shuō),如果游戲的實(shí)時(shí)pvp對(duì)戰(zhàn)的傷害處理邏輯是在對(duì)方的客戶端運(yùn)算的,通俗來(lái)說(shuō)就是你能不能打傷我,我說(shuō)了算這種情況。惡意用戶會(huì)想到直接不處理對(duì)方對(duì)自己造成傷害時(shí)的邏輯,這個(gè)時(shí)候如果邏輯模塊用的是thumb指令且函數(shù)自身無(wú)返回值且調(diào)用該函數(shù)時(shí)保存了調(diào)用現(xiàn)場(chǎng)的話則只需在處理函數(shù)的頭兩個(gè)字節(jié)寫(xiě)上0x46F7即可(Arm指令的話則是0xE1A0F00E),因?yàn)檫@是一條返回指令。
1.2.2 修改數(shù)據(jù)
破壞游戲正常運(yùn)行常見(jiàn)于通用修改器,如市場(chǎng)上出現(xiàn)的燒餅修改器,葫蘆俠修改器等等,其修改數(shù)據(jù)主要是修改堆棧和全局變量等。因?yàn)橛螒蛑锌赡艽嬖谖醇用艿念惓蓡T變量或者全局變量等等,所以如果通過(guò)內(nèi)存的變化去定位出某個(gè)數(shù)據(jù)的具體位置還是很容易的。
這種修改可以是注入式的修改,也可以是非注入式的修改。在IOS系統(tǒng)里面目前都會(huì)先注入到程序然后修改里面數(shù)據(jù),而在android系統(tǒng)中則可以根據(jù)/proc//maps文件遍歷具有r標(biāo)識(shí)的感興趣的模塊通過(guò)/proc//mem達(dá)到和注入式修改一樣的效果。
1.3 游戲協(xié)議
游戲協(xié)議是游戲客戶端和服務(wù)器交互的管道,是具體游戲協(xié)定的通信格式。通過(guò)協(xié)議,服務(wù)器可以知道客戶端的游戲此刻處于什么狀態(tài),發(fā)送和請(qǐng)求什么數(shù)據(jù)等等。如果協(xié)議遭到分析破解,篡改和惡意重發(fā),會(huì)給游戲甚至整個(gè)游戲服務(wù)器帶來(lái)嚴(yán)重影響。游戲協(xié)議的修改可以從兩方面來(lái)闡述,分別是篡改游戲協(xié)議和重發(fā)游戲協(xié)議,只要在網(wǎng)絡(luò)層或者傳輸層攔截協(xié)議即可。所以游戲廠商至少會(huì)從兩方面保護(hù)游戲協(xié)議,一個(gè)是做好協(xié)議字段的加密和哈希校驗(yàn);另一個(gè)是對(duì)每條協(xié)議都要增加序號(hào)字段防止協(xié)議重發(fā)。
1.3.1 篡改游戲協(xié)議
篡改游戲協(xié)議的影響和游戲本身的設(shè)計(jì)方式相關(guān)性很大。因?yàn)橐恍┯螒虮M管篡改了協(xié)議對(duì)游戲的影響并不惡劣,主要是因?yàn)橛螒虺跗谠O(shè)計(jì)的時(shí)候就設(shè)計(jì)成不信任客戶端的數(shù)據(jù)。而一些重客戶端邏輯的游戲因?yàn)榉?wù)器極度依賴客戶端數(shù)據(jù),服務(wù)器接收處理不得當(dāng)或不經(jīng)任何處理就直接轉(zhuǎn)發(fā)協(xié)議到另一個(gè)客戶端都會(huì)對(duì)游戲造成很大的影響。
這里有個(gè)真實(shí)案例,某游戲在副本結(jié)算協(xié)議里面存在一個(gè)字段,這個(gè)字段通過(guò)分析只有0和1兩種狀態(tài),正常玩游戲結(jié)束如果失敗了,這個(gè)字段會(huì)是0;如果游戲結(jié)束時(shí)是闖關(guān)成功的,那么這個(gè)字段則是1,。那這里我們可以簡(jiǎn)單的理解這個(gè)字段的意義為是否勝利。后面做的操作是在通關(guān)失敗時(shí)攔截協(xié)議,篡改這個(gè)字段為1,會(huì)發(fā)現(xiàn)是有勝利收益的。這種情況篡改游戲協(xié)議是可行的,但更多是游戲本身的設(shè)計(jì)問(wèn)題。
而如果服務(wù)器對(duì)介紹的數(shù)據(jù)沒(méi)有處理好直接轉(zhuǎn)發(fā)給另一個(gè)客戶端,這樣很容易讓惡意用戶在協(xié)議中構(gòu)造特殊數(shù)據(jù)令其他客戶端崩潰。比如某些游戲的pvp對(duì)戰(zhàn),如果可以令對(duì)方的客戶端崩潰,那么惡意用戶就可以直接獲得勝利,賺取收益。
所以在游戲協(xié)議設(shè)計(jì)得當(dāng)?shù)幕A(chǔ)上,服務(wù)器不要輕信客戶端傳過(guò)來(lái)的數(shù)據(jù)才能保證游戲的安全性。
1.3.2 重發(fā)游戲協(xié)議
重發(fā)游戲協(xié)議數(shù)據(jù)往往不是因?yàn)橛螒騻?cè)協(xié)議內(nèi)邏輯校驗(yàn)不夠完善,而是由于協(xié)議內(nèi)容字段不夠豐富以及協(xié)議間耦合度不高而形成的。舉一個(gè)比較易于理解的例子,某槍?xiě)?zhàn)類游戲在實(shí)時(shí)pvp對(duì)戰(zhàn)中造成傷害時(shí)會(huì)發(fā)送傷害協(xié)議,惡意用戶通過(guò)篡改游戲的傷害值這個(gè)方式試圖改變對(duì)敵方的傷害,發(fā)現(xiàn)這個(gè)方法并沒(méi)有效果。
因?yàn)橛螒蜷_(kāi)發(fā)側(cè)在服務(wù)器里面就設(shè)定了不信任客戶端的傷害值,所以這種修改方式?jīng)]什么作用。但是如果惡意用戶在攔截到這種傷害協(xié)議時(shí),復(fù)制該協(xié)議幾份一并發(fā)送過(guò)去,那這個(gè)時(shí)候服務(wù)器就認(rèn)為確實(shí)是造成了這么多次傷害,這樣惡意用戶就可以秒殺敵方玩家了。如果游戲側(cè)增加一些時(shí)間,子彈數(shù),命中源和目標(biāo)位置等等字段,并且每次這種傷害協(xié)議的發(fā)送前會(huì)在前后有一些附帶該協(xié)議信息的標(biāo)識(shí)就不能簡(jiǎn)單地重發(fā)協(xié)議了。
1.4 游戲盜號(hào)
盜號(hào)的情況在游戲生存周期中是無(wú)法避免的問(wèn)題,因?yàn)橛螒蛸~號(hào)是由人來(lái)托管的,游戲側(cè)只能盡量減少盜號(hào)的發(fā)生。但是可能因?yàn)槭钟纹鸩捷^晚以及手機(jī)大部分游戲的登陸都是直接授權(quán)登陸,手游盜號(hào)的情況與端游相比較少。出現(xiàn)盜號(hào)的情況可能是由于玩家通用的賬號(hào)在其他地方泄露了,惡意使用者通過(guò)這個(gè)賬號(hào)登陸進(jìn)手游轉(zhuǎn)移財(cái)產(chǎn),這個(gè)是目前手游中盜號(hào)可能性最大的一種情景。另一方面,也因?yàn)槭钟沃心軌蜻M(jìn)行財(cái)產(chǎn)轉(zhuǎn)移的游戲也是很少的,這也是游戲盜號(hào)在手游中不常見(jiàn)的原因之一。
而一旦手游發(fā)生盜號(hào),游戲平臺(tái)的安全性也容易受到質(zhì)疑,很可能會(huì)導(dǎo)致用戶流失,這也是游戲開(kāi)發(fā)方需要重視的問(wèn)題。
1.5 惡意發(fā)言
現(xiàn)在越來(lái)越多的游戲系統(tǒng)中存在大廳或者游戲內(nèi)聊天的功能。這個(gè)時(shí)候就會(huì)出現(xiàn)一些惡意用戶進(jìn)行惡意發(fā)言,比如散播廣告,謠言,詐騙,黃賭毒等信息,利用用戶的心理誘導(dǎo)正常用戶,極大影響了游戲的健康度,對(duì)用戶和游戲造成不良影響。
據(jù)不完全統(tǒng)計(jì),惡意發(fā)言影響的群體大多數(shù)是剛剛?cè)腴T(mén)玩游戲的用戶,這些用戶更容易受到游戲中惡意發(fā)言的吸引,比如一些低價(jià)購(gòu)買鉆石的信息,如“1元購(gòu)買100w鉆,聯(lián)系方式XXXX”等詐騙信息。隨著游戲的活躍量上漲,一些看起來(lái)微不足道不足以讓人相信的信息也會(huì)影響一大部分用戶的,保障這部分用戶的利益,也是游戲開(kāi)發(fā)方所需要考慮的問(wèn)題。
1.6 工作室
與端游一樣,手游中工作室建立的目的也是為了從游戲中賺取非法收益。一般工作室會(huì)購(gòu)置大量的機(jī)器,并且通過(guò)輔助插件,外掛等工具以及多開(kāi)的方式刷取高品質(zhì)賬號(hào)出售;如果手游中有轉(zhuǎn)移財(cái)產(chǎn)的手段,也有的工作室會(huì)把眾多小號(hào)的財(cái)產(chǎn)批量集中轉(zhuǎn)移到某個(gè)賬號(hào)上面出售。工作室這些行為不僅非法賺取利益,而且很容易擾亂游戲的經(jīng)濟(jì)系統(tǒng),對(duì)游戲經(jīng)濟(jì)平衡性造成了較大危害。一旦經(jīng)濟(jì)系統(tǒng)失衡,用戶在游戲投入金錢獲得的物品就容易貶值,所以對(duì)工作室的打擊無(wú)論用戶自身還是游戲開(kāi)發(fā)方也是有好處的。
1.7 小結(jié)
本文介紹了手游面臨的安全風(fēng)險(xiǎn),每種風(fēng)險(xiǎn)的利用方式以及這些風(fēng)險(xiǎn)產(chǎn)生的危害,旨在讓讀者了解手游當(dāng)前手游面臨的安全問(wèn)題及其嚴(yán)重性,并倡導(dǎo)大家共同維系健康的游戲環(huán)境。
原文鏈接:https://gslab.qq.com/portal.php?mod=view&aid=95
編輯:jq
-
智能手機(jī)
+關(guān)注
關(guān)注
66文章
18495瀏覽量
180278 -
iOS
+關(guān)注
關(guān)注
8文章
3395瀏覽量
150668 -
手游
+關(guān)注
關(guān)注
0文章
12瀏覽量
2855
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論