2011-06-13 魔兽世界3.3.5 13930登录数据包分析

官方的Trinity认证服务器在对3.3.5 13930客户端登陆的时候有问题,下面这个是抓的一个能够正常登陆的私服认证服务器的数据包。 使用工具WPE抓的包,这个也是经常用来做游戏外挂的一个抓包工具。相关的项目是TrinityCore的authserver,之前的一篇Blog有关于如何下载代码的说明。

服务器端口配置情况说明如下 3306 MySQL 3724 认证服务器 10775 客户端与认证服务器通信的端口 10740 认证服务器与MySQL通信的端口

客户端登陆使用用户名passos,认证服务器、MySQL、客户端都在本地运行。数据包记录中加粗的是客户端与认证服务器的相关通信数据包。

1 127.0.0.1:10775 127.0.0.1:3724 40 Recv

0000  00 08 24 00 57 6F 57 00 03 03 05 6A 36 36 38 78    ..$.WoW....j668x
0010  00 6E 69 57 00 4E 43 68 7A E0 01 00 00 7F 00 00    .niW.NChz.......
0020  01 06 50 41 53 53 4F 53                            ..PASSOS

认证服务器接收到客户端发来的来源ip地址和用户名,以及客户端的一些信息 报文结构在AuthSocket.h的sAuthLogonChallenge_C,处理过程位于AuthSocket.cpp的AuthSocket::_HandleLogonChallenge()

2 127.0.0.1:10740 127.0.0.1:3306 51 Send

0000  2F 00 00 00 03 53 45 4C 45 43 54 20 2A 20 46 52    /....SELECT * FR
0010  4F 4D 20 69 70 5F 62 61 6E 6E 65 64 20 57 48 45    OM ip_banned WHE
0020  52 45 20 69 70 20 3D 20 27 31 32 37 2E 30 2E 30    RE ip = '127.0.0
0030  2E 31 27                                           .1'

认证服务器从MySQL中查询客户端ip是否被封

3 127.0.0.1:3306 127.0.0.1:10740 343 Recv

0000  01 00 00 01 05 32 00 00 02 03 64 65 66 06 72 65    .....2....def.re
0010  61 6C 6D 64 09 69 70 5F 62 61 6E 6E 65 64 09 69    almd.ip_banned.i
0020  70 5F 62 61 6E 6E 65 64 02 69 70 02 69 70 0C 21    p_banned.ip.ip.!
0030  00 60 00 00 00 FD 03 40 00 00 00 3C 00 00 03 03    .`.....@...<....
0040  64 65 66 06 72 65 61 6C 6D 64 09 69 70 5F 62 61    def.realmd.ip_ba
0050  6E 6E 65 64 09 69 70 5F 62 61 6E 6E 65 64 07 62    nned.ip_banned.b
0060  61 6E 64 61 74 65 07 62 61 6E 64 61 74 65 0C 3F    andate.bandate.?
0070  00 28 00 00 00 08 03 50 00 00 00 40 00 00 04 03    .(.....P...@....
0080  64 65 66 06 72 65 61 6C 6D 64 09 69 70 5F 62 61    def.realmd.ip_ba
0090  6E 6E 65 64 09 69 70 5F 62 61 6E 6E 65 64 09 75    nned.ip_banned.u
00A0  6E 62 61 6E 64 61 74 65 09 75 6E 62 61 6E 64 61    nbandate.unbanda
00B0  74 65 0C 3F 00 28 00 00 00 08 01 10 00 00 00 3E    te.?.(.........>
00C0  00 00 05 03 64 65 66 06 72 65 61 6C 6D 64 09 69    ....def.realmd.i
00D0  70 5F 62 61 6E 6E 65 64 09 69 70 5F 62 61 6E 6E    p_banned.ip_bann
00E0  65 64 08 62 61 6E 6E 65 64 62 79 08 62 61 6E 6E    ed.bannedby.bann
00F0  65 64 62 79 0C 21 00 96 00 00 00 FD 01 00 00 00    edby.!..........
0100  00 40 00 00 06 03 64 65 66 06 72 65 61 6C 6D 64    [email protected]
0110  09 69 70 5F 62 61 6E 6E 65 64 09 69 70 5F 62 61    .ip_banned.ip_ba
0120  6E 6E 65 64 09 62 61 6E 72 65 61 73 6F 6E 09 62    nned.banreason.b
0130  61 6E 72 65 61 73 6F 6E 0C 21 00 FD 02 00 00 FD    anreason.!......
0140  01 00 00 00 00 05 00 00 07 FE 00 00 02 00 05 00    ................
0150  00 08 FE 00 00 02 00                               .......

MySQL返回的数据

4 127.0.0.1:10740 127.0.0.1:3306 83 Send

如果ip封锁已过期,解除封锁。

5 127.0.0.1:3306 127.0.0.1:10740 11 Recv

MySQL返回的数据

6 127.0.0.1:10740 127.0.0.1:3306 159 Send

认证服务器从MySQL数据库中取帐号相关信息

7 127.0.0.1:3306 127.0.0.1:10740 577 Recv

MYSQL返回的数据

8 127.0.0.1:10740 127.0.0.1:3306 78 Send

认证服务器从MySQL查找帐号是否被封

9 127.0.0.1:3306 127.0.0.1:10740 175 Recv

MYSQL返回的数据

10 127.0.0.1:10740 127.0.0.1:3306 98 Send

如果封号过期,取消封号

11 127.0.0.1:3306 127.0.0.1:10740 52 Recv

MYSQL返回的数据

12 127.0.0.1:3724 127.0.0.1:10775 119 Send

返回给客户端的数据,第0个字节是包类型AUTH_LOGON_CHALLENGE, 第1个字节为00,第2个字节为认证结果WOW_SUCCESS为00,第3-6这四个字节是根据auth数据库account中v、s两个字段算出来的一个数值,之后是安全之类的信息。计算过程在AuthSocket.cpp的AuthSocket::_HandleLogonChallenge()中。

13 127.0.0.1:10775 127.0.0.1:3724 75 Recv

客户端发给认证服务器的AUTH_LOGON_PROOF数据,结构定义在AuthSocket.cpp的sAuthLogonProof_C中。有一堆安全方面的计算,不知道Trinity这帮人怎么琢磨出来的。

14 127.0.0.1:3724 127.0.0.1:10775 32 Send

认证服务器返回给客户端的sAuthLogonProof_S结构数据

15 127.0.0.1:10740 127.0.0.1:3306 221 Send

认证服务器向MySQL更新账户信息。

16 127.0.0.1:3306 127.0.0.1:10740 52 Recv

MySQL返回的数据

17 127.0.0.1:10775 127.0.0.1:3724 5 Recv

客户端向认证服务器要求Realm登陆服务器列表,10为REALM_LIST命令,AuthSocket::_HandleRealmList()

18 127.0.0.1:10740 127.0.0.1:3306 53 Send

认证服务器从MySQL中查账户id

19 127.0.0.1:3306 127.0.0.1:10740 80 Recv

MySQL返回的数据

20 127.0.0.1:10740 127.0.0.1:3306 149 Send

认证服务器根据账户id从数据库中查找对应地区的登陆服务器信息

21 127.0.0.1:3306 127.0.0.1:10740 765 Recv

MySQL返回的数据

22 127.0.0.1:10740 127.0.0.1:3306 77 Send

从数据库中取该登陆服务器上该账号realmid为1的角色数量

23 127.0.0.1:3306 127.0.0.1:10740 107 Recv

MySQL返回的数据

24 127.0.0.1:10740 127.0.0.1:3306 77 Send

从数据库中查询该账户realmid为2的角色数量

25 127.0.0.1:3306 127.0.0.1:10740 101 Recv

MySQL返回的数据

26 127.0.0.1:3724 127.0.0.1:10775 81 Send

认证服务器返回给客户端登陆服务器列表

最后更新于

这有帮助吗?