資源描述:
《網(wǎng)頁游戲的攻擊與防御》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、網(wǎng)頁游戲的安全問題,在剛?cè)肼毥佑|的時候,寫過兩篇比較淺顯的文章《網(wǎng)頁外掛防御有感》和《網(wǎng)頁游戲常見外掛原理及防御》。算算時間,距離現(xiàn)在也有一年多了,雖然頁游安全總體上并沒有顯著變化,沒有新的攻擊方法,也沒有新的防御方法,我個人的工作重心也由頁游安全轉(zhuǎn)向了手游安全,但出于完美主義的偏執(zhí),還是希望寫一篇覆蓋完整的頁游安全文章,希望能給頁游產(chǎn)業(yè)一點幫助。大綱—————————————————————————————————————————————————-一、協(xié)議安全(swf安全):自動封包(重點)二、自動游戲+加速三、內(nèi)存安全:內(nèi)存修改四
2、、存檔安全:存檔修改五、帳號安全/充值安全:盜號/低價充值正文—————————————————————————————————————————————————-一、協(xié)議安全(swf安全):自動封包(重點)頁游,最最核心的就是客戶端(swf)與服務(wù)端的游戲通信了。游戲通信產(chǎn)生的封包,內(nèi)容是否可識別,可篡改,可重放,處理邏輯是否有漏洞,都決定了這款游戲是否有重大的漏洞。我們知道頁游前端和后臺的通信一般有兩者方式,一種是http連接,一種是socket連接,前者適用于小型頁游,例如內(nèi)嵌在QQ平臺的QQ農(nóng)場,后者適用于大型頁游。不同的通信方
3、式,產(chǎn)生的數(shù)據(jù)包格式也不一樣,像HTTPAMF的可以使用charles來抓包查看,像sockets的可以使用WPE抓包查看。以socket通信為例,協(xié)議采用自定義格式,一般由兩部分組成,包頭與包體,包頭一般是固定長度,包體為可變長度。包頭一般是一些基本信息,例如包長度,版本號,命令號,用戶ID,序列號等;包體就是操作命令對應(yīng)的接收參數(shù),參數(shù)個數(shù)不同,參數(shù)類型不同會導(dǎo)致包體長度不同。只要摸清楚協(xié)議算法,即包是如何生成的,就可以構(gòu)造數(shù)據(jù)包與服務(wù)器自由通話,這一后果是非常嚴(yán)重的。自由通話意味著你不需要老老實實的在客戶端操作,一條數(shù)據(jù)包就能代
4、替你一連串的操作,例如發(fā)送一條數(shù)據(jù)包完成一個任務(wù),常用于快速升級,淘寶上的頁游代練絕大多數(shù)都是采用的這種方式;自由通話更意味著你可以繞過客戶端的邏輯判斷,傳任意參數(shù)給服務(wù)端。說到這里,你可能覺得只要服務(wù)端能正常處理來自客戶端的參數(shù),不出邏輯錯誤,不出配置錯誤,就萬事大吉。這種想法很常見,例如上海寶開公司的某個開發(fā)就說過,我們的游戲邏輯判斷都在服務(wù)端,我們沒有外掛。我推測這個人應(yīng)該不怎么上外網(wǎng)。理想是豐滿的,現(xiàn)實是骨感的,怎么能保證后臺不將邏輯寫錯,策劃運營不將配置弄錯呢,特別是在高強度的通宵加班后。你可能說靠測試呀,中國頁游行業(yè),配給
5、給游戲的測試人員是非常少的,相應(yīng)的測試時間也是遠遠不足的,并且測試技術(shù)也非常需要提高,總的來說,在頁游行業(yè),能做完整協(xié)議測試的公司不多。但玩家,特別是從事外掛制作代練服務(wù)的打金工作室會“幫你”好好地徹底地做協(xié)議測試。他們會先反編譯客戶端上的SWF文件(緩存中的,內(nèi)存中的)得到協(xié)議生成算法,制作成封包工具,遍歷每個協(xié)議號,每個參數(shù)輸入,讓你的錯誤無從遁形。我見過一個非常聰明的外掛制作者,在外掛中添加了腳本分享平臺,號召大家共同摸索,將有問題的封包以腳本的方式上傳以供大家下載,這種集思廣益真的很妙,腳本的分享會給“找bug”精神獎勵,將其
6、帳號公布出來以供大家瞻仰,因此樂意分享的人很多。而且作者還很負(fù)責(zé)的有腳本審核機制,并支持快捷的查詢。這是什么樣的用戶體驗呀,這就是頁游外掛界的appstore看到這里,你或許想,我保護好SWF文件,不讓其逆向不就行了嗎?有需求,就有滿足需求的地方,市面上有不少給SWF提供加密服務(wù)的收費產(chǎn)品,例如AmayetaSWFEncrypt和DComSoftSWFProtector?,因為收費,沒用過這些產(chǎn)品,不知道具體原理,但據(jù)了解,最常用SWF加密方式,就是破壞SWF標(biāo)準(zhǔn)文件頭,通過向SWF的二進制文件的文件頭寫入無意義的數(shù)據(jù),從而導(dǎo)致反編譯
7、軟件無法正常解析SWF文件。下圖是使用反編譯器打開加密的SWF文件,會提示無法解析我們可以對比一下采用這種加密方式的swf文件頭內(nèi)容:(1)未加密swf文件正常的SWF文件,文件頭部是由一個三字節(jié)的標(biāo)識符開始,為0×46、0×57、0×53(“FWS”)或者0×43、0×57、0×53(“CWS”)其中之一?!癋WS”標(biāo)識符說明該文件是未壓縮的SWF文件,“CWS”標(biāo)識符則說明該文件前8個字節(jié)之后(即文件長度字段之后)的全部數(shù)據(jù)為開源的標(biāo)準(zhǔn)ZLIB方式壓縮(2)加密后的SWF文件很明顯,文件頭部變成了無意義的符號。實現(xiàn)函數(shù)示例(參考h
8、ttp://blog.sina.com.cn/s/blog_731fdd2b01010u9k.html)有加密就有解密,加密的SWF文件需要還原,雖然反編譯不了加密后的SWF文件,但可以反編譯解密文件找到解密代碼來還原加