從HTML 5游戲BrowserQuest看代碼漏洞
聲明:作弊并不是什么好事,我不提倡作弊。我也不想諷刺Mozilla的代碼質量(實際上其代碼糟透了)。我不是超級黑客,也不想在此唱高調。只是想演示一下我在Mozilla新游戲上是如何作弊的,以后大家在編寫HTML5游戲時要注意避免這些問題。我的***個編程實例非常簡單。為了將Bard’s Tale游戲通過磁盤編輯器進行編輯并存入我的Apple 2e,我不得不學習16進制。
首先,介紹一下背景,前段時間Mozilla發布了一款新游戲Browser Quest。這是一款多人在線游戲。游戲規則并不復雜。任何人都可以一試。但是作為HTML5實現的一個例子,這的確很酷。
進入網站,輸入用戶名,選擇角色(此功能的實現有點難度),然后就可以開始游戲了。
真正酷的是,Mozilla把整個游戲開放了源代碼,包括前臺客戶端和后臺技術。如果有興趣,可以在這里下載源碼:https://github.com/mozilla/BrowserQuest。
為了進行研究,我玩了一下這款游戲,馬上就意識到它用的是本地存儲。我用Chrome extension(LocalStorage Monitor)來檢測該游戲是否真的使用本地存儲,結果發現:
首先我注意到,裝備清單是在本地存儲的,這就意味著我可以隨便修改我的裝備。查看代碼后我發現,裝備清單中的裝備是被限定在一定范圍內的,范圍的大小由一個簡單的數字指標來確定。如果把自己的裝備都改成了***裝備,那么系統會重置裝備清單。
所以,***步就是到控制臺復制數據:
copy(localStorage["data"])
這樣就把數據(JSON 字符串)復制到了剪切板,然后粘貼到記事本并編輯這兩個值:
- {"hasAlreadyPlayed":true,"player":
- {"name":"Romana","weapon":"goldensword","armor":"goldenarmor","image":"data:image/png;base64,deleted"},"achievements":
- {"unlocked":
- [2,5,11,6],"ratCount":3,"skeletonCount":1,"totalKills":5,"totalDmg"
獲取字符串并返回控制臺……
- localStorage["data"] = (pasted my string here)
重新加載頁面,瞧—我變成了一個強大威武裝備精良的復仇者:
再次重申,我并不是在些貶低Mozilla的成果。該游戲的確是個很不錯的示例。只是別忘了本地存儲,這種實現方式太不安全了。
原文鏈接:http://css.dzone.com/articles/how-i-cheated-mozillas-new
【編輯推薦】