2016年9月14日 星期三

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


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

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

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

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

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

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

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

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