網絡游戲的外掛、攻擊主要有這么幾種形式:
1. 加速掛,主要攻擊客戶端脫機戰斗的游戲類型。
2. 修改內存,也是針對客戶端的,修改血量、攻擊等數值。
3. 破解通信協議,如果通信協議未加密或者使用了簡單的加密方式,都可以用工具破解,然后分析協議內容得到協議結構。
4. hook通信協議,用其他方式分析消息結構,不需要知道如何加密,只要可以調用客戶端的代碼就能使用同樣的加密方式和服務器通信。
5. 封包重發,截獲客戶端發出的某些關鍵包多次發給服務器,比如充值、攻擊等。
6. ddos攻擊,使用機器人或者大量肉雞連接甚至登錄服務器,對攻擊者沒什么好處,只是單純的消耗網絡資源和服務器資源使其不能正常運行。
7. 黑到服務器主機內。這就沒得說了。。
外掛制作者可謂是煞費苦心,通常認為客戶端非常脆弱,外掛的防線只能靠服務器守護。
針對以上的攻擊行為,我們也有響應的對策,首先我們要把服務器放在安全的地方!專業的事情交給專業的團隊做,使用市面上成熟的雲服務器,讓運維的人替我們解決網絡安全方面的問題。也就是6、7之類的問題。
對於1、2的做法,顯然服務器要對客戶端的關鍵操作進行驗證,比如使用時間戳檢測移動時間防止瞬移,檢測攻擊數值、攻擊頻率,檢測單局游戲時長等,這屬於邏輯設計范疇必要的考慮。
那么對於3、4、5這類通信協議攻擊,服務器要做的首先是對協議內容加密。由於網絡安全領域的長足發展,理論上使用對稱加密算法都是不可靠的。然而破解當前主流的加密算法是需要一段時間的,至少24小時以上。這就給我們很大的容錯機會,比如我們可以在發送第一條消息的時候帶上第二條消息的密鑰,這樣同樣兩條消息的加密密文都不同,造成破解困難。這就是迭代加密,迭代加密還有個好處,就是可以對付簡單的封包重發。如果客戶端到服務器和服務器到客戶端的消息都使用迭代加密,就是雙向迭代加密。增強了安全性,而且對加解密來說只是密鑰的變化,並不影響效率。在玩家登陸的時候,服務器應當防止非授信客戶端登錄,這樣機器人之類的模擬客戶端單純借助通信協議是無法正確登錄游戲的。這就是密鑰認證,我們先生產一對 公鑰/密鑰,服務器持有公鑰,客戶端持有私鑰。客戶端登錄時發送登陸請求,然后服務器用公鑰加密一段隨機數,客戶端用私鑰解密返回隨機數,如果服務器校驗失敗就斷開連接。
最后就是對付4一類的情況,逆向破解者可以做到hook客戶端代碼,繞過加密步驟,這樣任何加密方式都沒有意義了。這種情況只能靠提高網絡模塊耦合性、代碼混淆一類的手段,防止逆向者輕易分析出消息收發的流程,找出規律。