黑夜的狼

沮丧吗,那就是一种无病呻吟!留恋它就是一种高度近视!目光应该放得更远一点! 别不想飞,只是要一步跨过太平洋!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

TCP FLAG 标记

基于标记的TCP包匹配经常被用于过滤试图打开新连接的TCP数据包。TCP标记和他们的意义如下所列:

* F : FIN - 结束; 结束会话
* S : SYN - 同步; 表示开始会话请求
* R : RST - 复位;中断一个连接
* P : PUSH - 推送; 数据包立即发送
* A : ACK - 应答
* U : URG - 紧急
* E : ECE - 显式拥塞提醒回应
* W : CWR - 拥塞窗口减少
msnm

图中红线标识的三个包代表了一个连接的过程。注意它的TCP Flags的变化。
  MyComputer  è  GameServer  .S...... 客户端请求建立连接
  MyComputer  ç  GameServer  .S..A... 服务器同意建立连接
  MyComputer  è  GameServer  ....A... 连接建立
以上三个包称为建立TCP连接的三段式握手。当你调用Socket类的Connect方法时就会产生上面的三个TCP包。

图中蓝线标识的是连接断开的过程。
  MyComputer  è  GameServer  F...A... 客户端请求断开连接
  MyComputer  ç  GameServer  ....A... 服务器同意断开请求
  MyComputer  ç  GameServer  F...A... 服务器请求断开连接
  MyComputer  è  GameServer  ....A... 客户端同意断开请求
调用Socket类的Disconnect方法时就会产生上面的四个TCP包。
从上图中我们不难看出在验证用户名和密码的过程中,客户端和服务器之间总共连接了二次,所以在之后的外挂程序编写过程中,我们同样也要连接二次。

TCP Flag为...PA...表示该TCP包内带有数据,而....A...则是回应包,用于回应上一个包的发送方:我已经收到你上一个包了,它本身不带数据。所以一般一个...PA...包都有一个对应的....A...包(例如编号为266和269),但如果回应的时候,发现正好有数据要发送,则可以将回应包掺杂在发送包中发送过去(例如编号为273的回应包就掺杂在275这个包内)。
下面观察客户端和服务器之间的实际数据往来。
1. 客户端连接到服务器
2. MyComputer  ç  GameServer  服务器给客户端发送7字节的数据
3. MyComputer  è  GameServer  客户端给服务器发送90字节的数据
4. MyComputer  ç  GameServer  服务器给客户端发送65字节的数据
5. MyComputer  ç  GameServer  服务器给客户端发送48字节的数据
6. MyComputer  è  GameServer  客户端给服务器发送48字节的数据
7. MyComputer  ç  GameServer  服务器给客户端发送208字节的数据
8. 服务器断开连接
9. ……
以上就是第一次连接的大致过程。观察每个包内的具体传输数据是没有意义的,因为网游之间的通讯肯定是加密的,你每次拦截下来的数据都会不一样。通常游戏服务器给客户端发送的第一个包都是KEY包(例如上面的7字节的包),客户端在接收到KEY包之后执行相应的数据加密初始化。所以接下来的任务就是根据已掌握的数据通讯规律,对游戏客户端的加密算法进行破解了

posted on 2010-04-10 09:37  anncesky  阅读(2777)  评论(0编辑  收藏  举报