Chinaunix首页 | 论坛 | 博客
  • 博客访问: 821774
  • 博文数量: 94
  • 博客积分: 1767
  • 博客等级: 上尉
  • 技术积分: 1168
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-13 23:16
个人简介

ha

文章分类

全部博文(94)

文章存档

2014年(2)

2013年(17)

2012年(6)

2011年(15)

2010年(23)

2009年(23)

2008年(8)

我的朋友

分类: 网络与安全

2014-01-07 17:35:24

转载自:http://www.cnblogs.com/anncesky/articles/1708792.html

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

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

图中红线标识的三个包代表了一个连接的过程。注意它的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包之后执行相应的数据加密初始化。所以接下来的任务就是根据已掌握的数据通讯规律,对游戏客户端的加密算法进行破解了

阅读(3963) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~