2016年9月14日 星期三

從開發者的角度談遊戲防弊(下)


承上篇:從開發者的角度談遊戲防弊(上)

五、修改記憶體、存檔(金手指)
遊戲中許多數值和狀態都是暫存在記憶體或存檔的,
例如角色的HP、技能冷卻、道具數量等等,
所以如果讓玩家任意修改,就可能產生嚴重問題。

應對方法:
單機遊戲:
程式碼混淆、重要數值隨機加密、
隱藏存檔位置、存檔不能給其他帳號共用......等等。

如此可以提升玩家修改資料時的難度。
像是《RPG製作大師》所做的遊戲,
暫存於記憶體中的數值,都是經過「乘以2再加1」的固定加密,
例如遊戲中的100金幣就會記錄為201,
這麼一來,不知道的人就難以修改了。
(但就像現在我們都知道了,所以才需要隨機加密)

如這款《Cookie Clicker 餅乾點擊者》以前還沒有防止修改,
幾乎什麼都可以靠改參數改出來,
但現在似乎已經沒那麼容易了。

線上遊戲:
原則就是「不信任從客戶端傳來的任何資訊」,
重要資料都存在伺服端,
重要數據和結果都在客戶端和伺服端進行雙重驗證及計算......等等,
但也不僅限於這些而已。

而像《Diablo 2 暗黑破壞神2》的做法是,
單機模式離線遊玩時,隨便玩家修改也無所謂,
但是到了線上天梯競賽時,重要資料都存在伺服端做驗證,
那就比較難修改了。

至於程式碼混淆可以達到什麼樣的效果呢?
這個國際 C 語言程式碼混淆大賽或許可以作為參考
(但是搞得這麼誇張,大概連程式設計師本人都快看不懂了)。

六、偽造、修改、複製封包
如《RO 仙境傳說》當中,
玩家用外掛可以不消耗道具「蒼蠅翅膀」就進行瞬間移動,
或以人手不可能達到的高速度喝補血藥水,
就有可能是透過傳送自訂的遊戲封包所辦到。

例如原本使用蒼翅瞬移的正常流程可能是──
1) 玩家按下使用蒼翅的快捷鍵
2) 客戶端判斷玩家身上是否有蒼翅
3) 如果有,客戶端就先扣除一個蒼翅
4) 向伺服端發送「玩家消耗一個蒼翅,並且進行瞬移」的封包
5) 伺服端扣除玩家身上一個蒼翅(找不到就不扣),並且回傳瞬移封包
6) 客戶端收到瞬移封包,執行瞬移

但是外掛略過了前面的步驟,
直接發送第4步驟的封包給伺服端,
而伺服端未檢查此瞬移的合理性就允許,
於是就能在未消耗道具的情況下瞬移了。

如《Candy Crush Saga》當中,
這個高到誇張的過關紀錄,
也很可能是透過傳送竄改過分數的過關封包來達成的。

應對方法:
伺服端固然必須驗證每個封包的合法性,
也必須防止同一個封包因Lag或複製而重複發出。

不過伺服端雖然可以任何事都加以驗證,
但也肯定會造成效能上的負擔,
所以也得依重要程度來取捨,
較輕微的就略過,或是偶爾才檢查一次。

七、線上遊戲利用Bug(洗錢、複製之類)
應對方法:
除了在開發時儘量設想周全、多加測試、建立好Bug回報機制,
還有個保險做法是監控每天伺服器中較重大的變化,
發生重大問題時,自動以簡訊等方式即時通知負責人,
並且將伺服器中的遊戲資料保存至少1~3個月,隨時可供回溯。

舉例來說,像《RO》當中就曾經發生過精鍊裝備的Bug,
當時遊戲中的四級裝備最高可精鍊到+10,但機率非常之低,
這時市面上卻出現了大量的+10四級裝備,
於是玩家之間掀起了恐慌,深怕受到回溯牽連。

若官方要等到這些非法道具、遊戲幣大量流入市面甚至交易網站才察覺,
那就太晚了,有可能連回溯都不足以解決;
但如果官方有後台程式自動監控,
當某個玩家精鍊出+10四級裝備時自動記錄、
某一天產生兩件以上+10四級裝備時自動傳簡訊警告,
那麼就可以在事態惡化之前及早處理了。

在《RO》精鍊裝備時若不想冒著搞壞裝備的風險,
也就只能弄出+4的裝備了。
畢竟負責精鍊的NPC可是出了名的奶油手,
動不動就手滑啊!

關於Bug預防還有許多想寫,
但發現瑞克梅添涼大大已經寫得更多更詳細,
不如直接轉貼網址讓大家自己去讀囉!

延伸閱讀:
瑞克梅添涼:線上遊戲-刷幣、洗錢、複製手法完全揭密

(梅添涼大大的部落格是個難得的大寶庫,
對遊戲業有興趣的人可別錯過)

八、DDoS(阻斷服務攻擊
所謂的DDoS,簡單來說就是利用木馬入侵的大量僵屍電腦連線,
來擠爆伺服器。

這也是很難防範的,
因為DDoS技術不難、又不容易追查源頭的真兇、
也很難分辨對方是進行DDoS的人、或只是正常連線的玩家。

應對方法:
限制連線資格
(例如需要先購買遊戲,或申請帳號需要實名制、綁定手機驗證等等)、
擴充硬體設備(但代價昂貴),
不然就是報警追查了。

延伸閱讀:
曾駭LOL遭逮!蛇王自覺沒臉見人 癱瘓媒體想撤報導

九、盜帳號
若玩家本身資安常識不足,
愛用外掛、VPN、或和人共用帳號、使用容易破解的密碼,
那麼官方保護得再好也沒用。

應對方法:
宣導資安觀念、要求玩家設置安全性較高的密碼、
綁定登入位置或硬體、通訊鎖、倉庫鎖、
重要物品禁止或延遲交易......等等。

Steam的通訊鎖,能幫助玩家更好地保護自己的帳號。

而遊戲這邊,亦需要給有價值的道具都賦予唯一編號
如此不管道具是被複製、或流落到他人手中,
都可以輕易查出流向。

十、詐騙
應對方法:
花樣百出、防不勝防的詐騙,
恐怕也只能在遊戲中多提醒玩家保持警覺了。


如《Tree of Savior 救世主之樹》就會在過場景時提示,
真正的GM外觀和一般玩家大不相同。

而將遊戲中的對話、交易、拾取道具等紀錄都存成Log備查,
也會在事件發生時對釐清真相大有幫助,
還有就是靠客服的經驗累積了。

延伸閱讀:
銀狐 SILVER FOX 的碎碎唸:線上客服實錄

(銀狐大大的部落格也同樣是遊戲業必讀的大寶庫)


以上就是這次的分享了,
若能起到拋磚引玉的作用就更好了,
歡迎大家留言補充指教喔!



下次分享日期:2016年10月
下次分享主題:繼爐石戰記之後的TCG新星《Shadowverse 影之詩》(上)





沒有留言:

張貼留言