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