魔兽争霸游戏开始前数据包分析

来源:互联网 发布:图文编辑软件 编辑:程序博客网 时间:2024/05/15 23:13

1.搜索局域网游戏UDP,端口6112.

0x0000   FF FF FF FF FF FF 00 11-5B 82 2D EC 08 00 45 00   ..[??.E.

0x0010   00 2C A7 F4 00 00 80 11-D0 B2 C0 A8 01 72 FF FF   .,...胁括.r

0x0020   FF FF 17 E0 17 E0 00 18-6F 04 F7 2F 10 00 50 58   .??.o.?..PX

0x0030   33 57 14 00 00 00 00 00-00 00

加粗黑色为数据:F7 2F 10 00是格式头部,消息含义的标志;50 58 33 57 PX3W几个字,就是冰封王座的逆序;14 00 00 00 是版本号,0x14=20,即是1.20版的冰封王座在搜索游戏;00 00 00 00 是魔兽创建游戏的次数。

魔兽在多种情况下都会发布此消息,例如刚进入局域网,从游戏中退出,从创建的游戏中退出等等。

 

2.选择地图创建游戏后广播,即告知局域网我这儿创建了一个局域网游戏:udp

0x0000   FF FF FF FF FF FF 00 11-5B 82 2D EC 08 00 45 00   ..[??.E.

0x0010   00 2C CB C8 00 00 80 11-AC DE C0 A8 01 72 FF FF   .,...括.r

0x0020   FF FF 17 E0 17 E0 00 18-6E 02 F7 31 10 00 50 58   .??.n.?..PX

0x0030   33 57 14 00 00 00 01 00-00 00     

加粗黑色为数据:F7 31 10 00是格式头部,消息含义的标志。这个udp包通常是不变的。

 

3.选择地图创建游戏后第二个包udp

0x0000   FF FF FF FF FF FF 00 11-5B 82 2D EC 08 00 45 00   ..[??.E.

0x0010   00 2C CB CA 00 00 80 11-AC DC C0 A8 01 72 FF FF   .,...括.r

0x0020   FF FF 17 E0 17 E0 00 18-FE B0 F7 32 10 00 01 00   .??.?....

0x0030   00 00 01 00 00 00 04 00-00 00

最后一行的01表示当前局域网玩家人数加入一个人该数字加1,如果跟电脑玩这个数字不会变化;04表示总共有多少局域网玩家可以玩这个游戏+1,加入一个电脑,这个数据减1,加入局域网玩家这个数据不变,到最后这个数据表示玩这个游戏的局域网玩家数目。这个包除了以上两个数据,也通常不会变化。这类包在游戏开始以前每发生变化都要发送。

 

123数据包的发送在线程函数udp_send_thread_proc中完成。

 

4.局域网一个玩家收到主机广播后进行广播或者联系主机(UDP

0x0000   FF FF FF FF FF FF 00 17-31 7D 9E 66 08 00 45 00   ..1}..E.

0x0010   00 2C 08 39 00 00 80 11-70 0A C0 A8 01 D6 FF FF   .,.9...p..?

0x0020   FF FF 17 E0 17 E0 00 18-6E A0 F7 2F 10 00         .??.n/..

 

0x0000   00 11 5B 82 2D EC 00 17-31 7D 9E 66 08 00 45 00   ..[??.1}..E.

0x0010   00 2C 7D 7A 00 00 80 11-38 AE C0 A8 01 D6 C0 A8   .,}z...8??

0x0020   01 72 17 E0 17 E0 00 18-AB 85 F7 2F 10 00         .r.??.?..

 

 

 

 

 

 

 

 

5.创建主机收到玩家信息后给玩家发送地图一起创建者信息(UDP):

0x0000   00 17 31 7D 9E 66 00 11-5B 82 2D EC 08 00 45 00   ..1}..[??.E.

0x0010   00 98 C8 32 00 00 80 11-ED 89 C0 A8 01 72 C0 A8   .2...韷括.r

0x0020   01 D6 17 E0 17 E0 00 84-80 0F F7 30 7C 00 50 58   .???.?|.PX

0x0030   33 57 14 00 00 00 01 00-00 00 24 22 31 02 E5 BD   3W........$"1.

0x0040   93 E5 9C B0 E5 B1 80 E5-9F 9F E7 BD 91 E5 86 85   撳湴灞€鍩熺綉鍐?

0x0050   E7 9A 84 E6 B8 B8 E6 88-8F 20 28 47 6F 00 00 01   鐨勬父鎴?(Go...

0x0060   03 49 07 01 01 53 01 B9-53 01 6F 35 C1 9F 4D AB   .I...S..o5M?

0x0070   61 71 73 5D 31 33 33 D5-5D 31 33 33 2F 77 33 39   aqs]133133/w39

0x0080   79 01 47 6F 6F 65 51 1D-6D 61 79 65 73 01 01 00   y.GooeQ.mayes...

0x0090   02 00 00 00 01 00 00 00-01 00 00 00 02 00 00 00   ................

0x00A0   4D 00 00 00 E0 17    

 

其中F7 30是数据包类型,7C 00是数据包大小。

50 58 33 57 14 00 00 00 01 00-00 00PX3W以及版本号、创建次数等信息。

 

24 22 31 02 这个数据不敢确定,老发生变化,?????

 

E5 BD 93 E5 9C B0 E5 B1 80 E5-9F 9F E7 BD 91 E5 86 85 E7 9A 84 E6 B8 B8 E6 88-8F 20 28 47 6F 00 这是utf-8编码,表示当地局域网内的游戏 (ol”

 

01 03 49 07 01 01 53 01 B9-53 01 6F 35 C1 9F 4D 估计是是否开启地图或者裁判的消息。?????01 03 49 07固定,后面的01表示非裁判,如果是41则表示裁判。接着后面的01固定。B9-53 01 6F 35 C1 9F 4D这一段也是加密的,B9是加密字节

 

AB 61 71 73 5D 31 33 33 aps//123

D5-5D 31 33 33 2F 77 33 //123.w3

39 79 01 47 6F 6F 65 51 x/0GoodP

1D-6D 61 79 65 73 01 01 layer/0/0

解密方法:每一行第一个字节为密钥,这是一个奇偶校验加密程序,如B9,其二进制为10111001,逆序01000110取反为01100010,进行如下操作:                    

B9-0 53-1 01-1 6F-0 35-0 C1-0 9F-1 4D-0 去掉密钥部分结果为52 00 6F 35 C1 9E 4D 即为:R/0o5

 

第二行 AB取反 0 1010100 逆序得:0 0101010 61 70 73 5C 31 32 33 aps//123

第三行 D5取反 0 0101010 逆序得:0 1010100 5C 31 32 33 2E 77 33  //123.w3

第四行 39取反 1 1000110 逆序 0 1100011 78 00 47 6F 6F 64 50     x/0GoodP

第五行 1D取反 1 1100010 逆序 0 1000111 6C 61 79 65 72 00 00       layer/0/0

合起来即为aps//123//123.w3x/0GoodPlayer/0/0  15 10

而且总结经验如下:当某字节的十进制数能够被2整除的时候需要补1,即偶数补1

 

 

 

 

以下是裁判的:

0x0000   00 16 76 08 FE 30 00 16-76 08 FC D0 08 00 45 00   ..v.?..v...E.

0x0010   00 9E 63 CB 00 00 80 11-52 1F C0 A8 01 6C C0 A8   .?..R..l

0x0020   01 A8 17 E0 17 E0 00 8A-61 95 F7 30 82 00 50 58   .???奱曶0?PX

0x0030   33 57 14 00 00 00 02 00-00 00 2E 2F 4C 01 E5 BD   3W........./L.

0x0040   93 E5 9C B0 E5 B1 80 E5-9F 9F E7 BD 91 E5 86 85   撳湴灞€鍩熺綉鍐?

0x0050   E7 9A 84 E6 B8 B8 E6 88-8F 20 28 6A 69 00 00 01   鐨勬父鎴?(ji...

0x0060   03 49 07 41 01 35 01 C1-35 01 5F E3 E5 FD 4D 8B   .I.A.5.?._沐齅?

0x0070   61 71 73 5D 63 6F 69 63-75 5D 29 35 29 41 65 55   aqs]coicu])5)AeU

0x0080   73 65 6F 61 6D 69 6F 3B-65 2F 77 33 6D 01 6B 07   seoamio;e/w3m.k.

0x0090   69 61 6F 01 01 00 0C 00-00 00 09 00 00 00 01 00   iao.............

0x00A0   00 00 0C 00 00 00 1F 00-00 00 E0 17   

 

01 03 49 07 41 01 35 01 C1-35 01 5F E3 E5 FD 其中01 03 49 07是固定的,41 01表示裁判后面的固定使用即可

 

OC是总数目,加入一个电脑该数目减一,

09是管观看者数目?暂且固定吧。

01是局域网玩家数目。

接下来的0C不作介绍。

1F随机?最后是端口

 

该数据包5的发送在线程函数udp_recv_thread_proc中调用函数send_map_and_user_name完成。由于黄色部分数据未知太多,但是对每张图都是唯一的,所以采取了对每张图都截取该段数据,并做成一个查找表来完成。

 

6.主机给玩家发送地图UDP信息以后,玩家TCP连接主机(以下两个包连续发送)

0x0000   00 16 76 08 FC D0 00 16-76 08 FE 30 08 00 45 00   ..v...v.?..E.

0x0010   00 28 A5 E3 40 00 80 06-D0 87 C0 A8 01 A8 C0 A8   .(@..袊括.ɡ?

0x0020   01 6C 04 18 17 E0 A3 27-A5 25 BC 99 68 7C 50 10   .l...'?h|P.

0x0030   FF FF A2 14 00 00 00 00-00 00 00 00  或者 AA AA-AA AA AA AA

其实这些一串0或者A不是客户有意构造的包,而是TCP自己构造的发送回馈。

 

0x0000   00 16 76 08 FC D0 00 16-76 08 FE 30 08 00 45 00   ..v...v.?..E.

0x0010   00 51 A5 E4 40 00 80 06-D0 5D C0 A8 01 A8 C0 A8   .Q@..衇括.ɡ?

0x0020   01 6C 04 18 17 E0 A3 27-A5 25 BC 99 68 7C 50 18   .l...'?h|P.

0x0030   FF FF 8A 05 00 00 F7 1E-29 00 08 00 00 00 26 1B   ?..?).....&.

0x0040   17 02 00 E0 17 01 00 00-00 6E 69 75 00 01 00 02   ...?....niu....

0x0050   00 17 E0 C0 A8 01 A8 00-00 00 00 00 00 00 00      ..??.......

F7 1E是数据包格式,29 00是大小

08 00 00 00 是一个固定增长的数据,以后会用到,其实就是广播时的tag_count,每次连创建加1,这里我们都采取0126 1B 17 02是服务器传过来的随机数(即以上实例中红色部分2E 2F 4C 01), E0 17 是端口, 6E 69 75是玩家名字。17 E0 C0 A8 01 A8是端口跟IP6112 192.168.1.168),其余的暂不用管。

 

 

……

 

本人已经数据包分析完毕,开发出了一个魔兽游戏引导程序,可以引导玩家加入游戏

 

如果感兴趣者留言联系。

原创粉丝点击