金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
网游防刷指令攻击的设计

网游外挂可以重复发送某些指令,造成服务器CPU占用或带宽占用,这类攻击称为刷指令.

最简单的如聊天广播. 不需要特殊的外挂, 只需在客户端全域或区域喊话,
该聊天信息就会广播到所有客户端, 占用许多带宽.
一般需要通过限制聊天的间隔时间, 或者收费来防止刷屏聊天.

其他指令也需要这种防刷措施.

防刷指令应该做成一个通用机制, 控制所有指令, 而不是仅仅对个别指令处理.
默认情况下, 所有客户端发往服务器的指令都要受到限制.

指令限制功能应该放在网关, 不会影响游戏服务器.
但也要求算法尽量简单, 能够快速处理.

最简单的限制方法是限制间隔时间.
同一类指令之间必须间隔一定时长.
同一类指令就是指令号相同.
例如所有聊天指令必须间隔500ms以上.

对于移动攻击类的指令, 很频繁, 用时间间隔限制不合适.
因为受网络抖动的影响, 可能会有多个指令集中地接收.
应该用平均指令数来限制.
如5s内指令个数不超过1000个.

对于受到限制的指令, 可以直接忽略. 也可以向客户端返回一个指令受限的指示.
对于确认为刷指令攻击的客户端, 就断开连接.

有的指令可以缓存,直到允许的时刻才转发给游戏服务器. 同类指令可以只保留最后一个指令.



(转载请注明来源于金庆的专栏)


posted on 2009-09-22 17:43 金庆 阅读(1930) 评论(5)  编辑 收藏 引用 所属分类: 2. 网游开发

评论

# re: 网游防刷指令攻击的设计 2009-09-24 17:44 凡客诚品
确认为刷指令攻击的客户端, 就断开连接.
  回复  更多评论
  

# re: 网游防刷指令攻击的设计 2009-09-27 16:05 浩毛
防止网游外挂刷指令的一个比较好的办法是在包加密上的处理,
可以这样,
当服务器端接受客户连接后,给客户端发送一个随机种子,来初始化客户端和服务器端随机数生成步进状态机。
在来往的包头记录发送序号,步进随机数生成状态机,每次生成的随机数就可作为一个密匙KEY,使用KEY对包体进行加密。服务器或客户端收到包后,根据包头的序号,同步自己的随机数生成状态机,也得到一个相同的KEY,用这个KEY对包体解密。
对破解者来说,由于每次的包的KEY都是不同的,只是通过截获收发的网络包是很难根据包头的序号和加密的包体来进行破解。
另外,由于同一个指令同一内容的加密网络包在不同时间段都是不同的。外挂开发者将截获的加密网络包,重复发送给服务器会被服务器判定为非法包。
  回复  更多评论
  

# re: 网游防刷指令攻击的设计 2009-09-27 16:07 浩毛
好像魔兽就是采用的这种机制。  回复  更多评论
  

# re: 网游防刷指令攻击的设计 2009-09-27 16:08 浩毛
另外,你还要对客户端的程序做一些 模糊化处理,禁止调试等手段来防止破解者反编译汇编跟踪调试你的程序。  回复  更多评论
  

# re: 网游防刷指令攻击的设计 2009-09-28 09:27 金庆
@浩毛
我的假定是客户端程序可以被破解.
所有客户端密码,加密方法,与服务器的通信协议都是可见的.  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理