網(wǎng)絡(luò)游戲安全小議(端游/頁(yè)游/手游)
一、網(wǎng)絡(luò)游戲安全
一直很想知道魔獸的游戲安全工程師是如何做游戲安全的,毫無(wú)疑問(wèn),魔獸是目前最流行的網(wǎng)絡(luò)游戲,有著眾多經(jīng)驗(yàn)豐富的黑客在利潤(rùn)驅(qū)動(dòng)的情況下以這款游戲的外掛作弊技術(shù)謀生,游戲黑客的作弊技能在《網(wǎng)絡(luò)游戲安全解密》這本書里有提到(這是目前為止唯一的質(zhì)量較高的游戲安全專門書籍),但游戲安全工程師是如何防御的就比較神秘了。咨詢過(guò)一些做游戲安全的,都傾向于將防御手段隱藏起來(lái),因此在游戲安全研究上基本靠游戲黑客提供資料。
網(wǎng)絡(luò)游戲安全很有意思,首先網(wǎng)絡(luò)游戲安全代表了最高的軟件技術(shù)(想想MMO可是數(shù)以十萬(wàn)計(jì)的用戶在實(shí)時(shí)交互,多大的挑戰(zhàn)),其次網(wǎng)絡(luò)游戲的虛擬經(jīng)濟(jì)和現(xiàn)實(shí)經(jīng)濟(jì)之間存在直接的聯(lián)系(想想淘寶上游戲點(diǎn)卡,游戲道具,游戲代練交易,多大的利益誘惑),再次網(wǎng)絡(luò)游戲安全的重要經(jīng)驗(yàn)可以直接適用于其他軟件(通用性對(duì)安全工作者很有幫助),最后游戲安全不僅是技術(shù)問(wèn)題也是法律問(wèn)題,例如對(duì)游戲破壞者的法律制裁,如何平衡玩家隱私權(quán)利以及如何保護(hù)游戲不被破解(例如使用rooktkit技術(shù)檢測(cè)玩家電腦是否有游戲破壞程序運(yùn)行的方法涉及個(gè)人電腦隱私問(wèn)題,當(dāng)然這點(diǎn)也是殺毒軟件面臨的問(wèn)題)。
網(wǎng)絡(luò)游戲安全將信息安全的大多數(shù)方面的串聯(lián)起來(lái)了。例如網(wǎng)絡(luò)帳號(hào)的安全(游戲拖庫(kù)),網(wǎng)絡(luò)充值的安全,網(wǎng)絡(luò)服務(wù)器的安全這些屬于網(wǎng)絡(luò)安全的領(lǐng)域;例如客戶端的安全,反調(diào)試,反逆向,反Hook屬于軟件安全的領(lǐng)域;還有其他的,例如游戲欺詐(冒充工作內(nèi)容騙取帳號(hào)密碼,釣魚網(wǎng)站,帳號(hào)糾紛),內(nèi)部員工(GM的事件爆的最多)非法交易,游戲分級(jí)(兒童游戲保護(hù),防沉迷系統(tǒng))。游戲外掛的逆向分析以及外掛檢測(cè)與防御就與殺毒行業(yè)非常像(想想惡意軟件樣本分析,游戲外掛對(duì)游戲而言就是病毒)。簡(jiǎn)單的說(shuō)優(yōu)秀的游戲安全工作者要既是hacker也是cracker,既要懂技術(shù)也要懂偵查。
二、游戲攻擊手段
博客中有介紹過(guò)手游與頁(yè)游的攻擊方法及相應(yīng)的工具,但沒(méi)有端游的(我沒(méi)有端游的安全工作經(jīng)歷,這也是沒(méi)法說(shuō)自己是個(gè)游戲安全工作者的原因,我覺(jué)得沒(méi)做過(guò)端游安全的不是真正的游戲安全工程師),從游戲的共性來(lái)說(shuō),網(wǎng)絡(luò)游戲的本質(zhì)就是客戶端與服務(wù)端的數(shù)據(jù)通信,攻擊的對(duì)象就是一系列的數(shù)據(jù),游戲安裝生成的客戶端數(shù)據(jù)(可執(zhí)行文件,動(dòng)態(tài)鏈接庫(kù),存檔文件,資源文件),游戲運(yùn)行時(shí)在進(jìn)程中的數(shù)據(jù)、界面數(shù)據(jù)、時(shí)鐘數(shù)據(jù),游戲通信時(shí)從網(wǎng)絡(luò)接口流出的數(shù)據(jù),
我們知道游戲的攻擊手段(外掛)總的來(lái)說(shuō)為以下幾種:
1. 自動(dòng)化游戲 端游和頁(yè)游中廣泛存在,例如精靈對(duì)戰(zhàn)類游戲的自動(dòng)打怪外掛,手游暫未出現(xiàn)該類型外掛
2. 內(nèi)存修改 端游、頁(yè)游,手游都存在,對(duì)端游和頁(yè)游在單機(jī)和弱聯(lián)網(wǎng)時(shí)代比較流行,但隨著網(wǎng)游的大方向,這種作弊手段的有效性逐漸弱化,對(duì)手游目前為主流作弊手段
3.存檔修改 同內(nèi)存修改,端游、頁(yè)游,手游都存在,對(duì)端游和頁(yè)游在單機(jī)和弱聯(lián)網(wǎng)時(shí)代比較流行,但隨著網(wǎng)游的大方向,這種作弊手段的有效性逐漸弱化,對(duì)手游目前為主流作弊手段
4.封包修改 網(wǎng)絡(luò)游戲的核心作弊手段,分為脫機(jī)掛(不依賴于官方發(fā)布的客戶端程序,由外掛完全模擬客戶端去與服務(wù)器進(jìn)行通信)、內(nèi)掛(以游戲客戶端程序?yàn)檩d體,依靠客戶端程序來(lái)完成與游戲服務(wù)器的通訊),私服(與脫機(jī)掛相反,是完全模擬了官方服務(wù)器)。這種類型外掛一般都先通過(guò)逆向客戶端得到協(xié)議(封包)生成算法,然后hook ws2_32.dll(windows sockets的應(yīng)用程序接口)的send(),receive()函數(shù)來(lái)重寫封包.
5.加速器 常見(jiàn)與對(duì)戰(zhàn)類游戲,例如頁(yè)游通過(guò)加速動(dòng)畫播放速度來(lái)快速對(duì)戰(zhàn)
6.安裝包Patch 常見(jiàn)于端游與手游這種富客戶端的,例如修改App store下載的IPA包,去除掉版權(quán)保護(hù)還原加密部分,例如重打包Android的APK包,使試用版變成完整版(verycd上一堆的破解端游)
7.runtime 攻擊(API Hook) 常見(jiàn)于端游與手游這種富客戶端的,API hook 運(yùn)行中游戲進(jìn)程,替換原始的動(dòng)態(tài)鏈接庫(kù)(windows上的dll,iOS上的dylib,Android上的so),例如iOS上的免費(fèi)內(nèi)購(gòu)?fù)鈷臁?/p>
8.服務(wù)端配置漏洞 例如未上線商品配置為可購(gòu)買,例如過(guò)期運(yùn)營(yíng)活動(dòng)未及時(shí)下線
9.游戲邏輯漏洞 例如游戲經(jīng)濟(jì)系統(tǒng)設(shè)計(jì)的漏洞(經(jīng)濟(jì)系統(tǒng)失衡),比如說(shuō)可以通過(guò)創(chuàng)建多個(gè)小號(hào)將系統(tǒng)贈(zèng)送的初始物品轉(zhuǎn)移到大號(hào)上;例如游戲中個(gè)人私密數(shù)值可以被其他玩家查看甚至修改;例如超級(jí)火爆的寵物精靈對(duì)戰(zhàn)游戲(魔獸都出了寵物對(duì)戰(zhàn),可見(jiàn)有多火了)就會(huì)出現(xiàn)新捕捉的初始精靈未初始化而在某些操作中大量獲得物品
10.游戲運(yùn)行平臺(tái)的安全問(wèn)題 例如越獄iOS設(shè)備與root后的Android設(shè)備就破壞了原本的安全機(jī)制,使得設(shè)備上運(yùn)行的游戲需要考慮額外的威脅
11.帳號(hào)安全 屬于web常見(jiàn)漏洞
12.充值安全 屬于web常見(jiàn)漏洞
13.游戲欺詐 帳號(hào)歸屬糾紛,冒充游戲充值網(wǎng)站的釣魚網(wǎng)站,冒充游戲外掛(特別是號(hào)稱可以刷游戲幣的)的惡意軟件,冒充官方工作人員騙取帳號(hào),在游戲中發(fā)送惡意中獎(jiǎng)信息
14.游戲服務(wù)器的拒絕服務(wù)攻擊 大并發(fā)的請(qǐng)求拖垮服務(wù)器
其中 4.封包修改最廣泛,6.安裝包Patch 和7.runtime 攻擊最據(jù)技術(shù)含量(其實(shí)游戲外掛的最終形態(tài)還是從內(nèi)核操縱客戶端)
三、游戲攻擊產(chǎn)業(yè)
依靠游戲攻擊盈利是一條很成熟的產(chǎn)業(yè)鏈,有專門做游戲外掛制作培訓(xùn)的,有專業(yè)做外掛制作人員招聘的,有專業(yè)做游戲代練或游戲虛擬物品交易的(現(xiàn)階段的游戲黑客們都比較聰明的選擇販賣外掛服務(wù)而不是外掛本身,理由一,賣外掛的方式會(huì)讓游戲公司的安全人員通過(guò)外掛分析快速定位游戲漏洞并給予修復(fù)及相應(yīng)的加固防御。理由二,賣外掛的方式會(huì)給法律投訴留下明確的證據(jù)。理由三,賣服務(wù)的盈利次數(shù)明顯高于賣外掛),有專業(yè)做游戲私服的(游戲私服很大程度上需要拿到源碼,可以通過(guò)買通內(nèi)部人員或社工入侵公司內(nèi)外獲得源碼),有專業(yè)做游戲盜號(hào)與釣魚的,有以游戲外掛為噱頭做廣告流量的。
四、游戲外掛制作
正面的來(lái)說(shuō)通過(guò)學(xué)習(xí)外掛制作也能提高it技能,例如要寫一款基本的外掛(以端游外掛為例),我們需要掌握以下技能
第一步:.學(xué)會(huì)一種語(yǔ)言,vc++最好,c#也不錯(cuò)(c#適用于跨平臺(tái)),雖然現(xiàn)在很多外掛都是E語(yǔ)言寫的,不過(guò)最好還是學(xué)開(kāi)發(fā)在用的語(yǔ)言;
第二步:會(huì)簡(jiǎn)單的分析游戲,可以使用工具分析游戲窗口,控件,進(jìn)程,線程,DLL模塊,內(nèi)存;
第三步:熟悉windows API,可以編寫進(jìn)程線程操作,內(nèi)存讀寫,鼠標(biāo)鍵盤模擬;
第四步:學(xué)會(huì)用cheat engine查找動(dòng)態(tài)內(nèi)存基址;
第五步:學(xué)會(huì)使用ollydbg來(lái)調(diào)試游戲找關(guān)鍵CALL 找到一些關(guān)鍵的功能函數(shù)入口地址,并分析出該函數(shù)的參數(shù),就可以編寫CALL代碼,來(lái)直接調(diào)用游戲中的函數(shù),讓其實(shí)現(xiàn)自動(dòng)化.
第六步:學(xué)會(huì)編寫call代碼;
第七步:會(huì)加密解密封包。