什么是拦截数据包和修改文件?

三:如何分析我们截获的数据包?

首先,我们将WPE截获的数据包保存为文本文件,然后打开它。这时我们会看到以下数据(这里以金庸群英会中PK店员客户端发来的数据为例进行说明):

第一个文件:SEND-& gt;0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1b send->;0010 17 12 DD 34 12 12 12 17 12 0E 12 12 12 12 12 12 12 9BSEND->;0000 E6 56 1E f 1 29 06 17 12 3B 0E 17 1a send->;0000 E6 56 1B C0 68 12 12 12 5a send->0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 send->;0000 E6 56 17 C9 12

第二个文件:SEND-& gt;0000 83 33 68 47 1B 0E 81 72 76 76 77 76 76 02 7 esend->0010 72 77 07 1C 77 77 77 77 72 77 72 72 77 77 6 dsend->0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3 send->0000 83 33 7E A5 21 77 77 3f send->0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 send->0000 83 33 72 AC 77

我们发现两个PK店主的数据格式是一样的,但是内容不一样。我们是PK的NPC。为什么会不一样?原来金庸大侠传输的数据包在网络上传输之前都是加密的,所以我们面临的问题是如何将密文解密成明文,然后进行分析。

因为一般的数据包加密都是异或运算,所以我们先说说什么是异或。简单来说,XOR就是“同为0,不同为1”(这是针对二进制逐位的)。比如0001和0010异或,我们逐位比较,异或结果是0011,计算方法是:0065438。那么异或结果的第四位是0,0,0001的第三位是0,0,0010的第三位是0,按照“同为0,不同为1”的原则,异或结果的第三位是0,0010。0001的1位是1,0010的1位是0,所以异或结果的1位得到1,也就是0011。异或运算以后会遇到很多,可以先熟悉一下,对分析很有帮助。

我们继续看上面两个文件。按照常理,数据包里的数据不会全是有价值的。游戏开发的时候会预留一些字节空间给以后的扩展,也就是说数据包里会有一些“00”字节。观察以上文件,会发现第一档有很多“12”,第二档有很多“77”。这是不是意味着我们说的是“00”?推理到这里,我们开始行动吧!

我们将第一个文件与“12”进行异或运算,将第二个文件与“77”进行异或运算。当然,手工计算很麻烦。我们用“M2M 1.0加密包分析工具”来计算就方便多了。得到以下结果:

第一个文件:1 SEND->;0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 send->;0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 00 892发送->0000 F4 44 0C E3 3B 13 05 00 29 1C 05 083发送->;0000 F4 44 09 D2 7A 00 00 00 484发送->;0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 005发送->;0000 F4 44 05分贝00

第二个文件:1发送-& gt;0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 send->;0010 05 00 70 6B 00 00 00 00 00 05 00 05 00 00 00 1 a2发送->;0000 F4 44 0C E3 3B 13 05 00 29 1C 05 843发送->;0000 F4 44 09 D2 56 00 00 00 484发送->;0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 005发送->;0000 F4 44 05分贝00

哈,两份文件大部分是一样的,说明我们的推理是正确的,以上就是我们需要的明文!

接下来就是找出一些关键字节的含义,这就需要截取大量的数据进行分析。

首先,我们会发现每个包都是以“F4 44”开头的,第三个字节是变化的,但是变化是很有规律的。让我们来看看每个包的长度。你发现什么了吗?对了,第三个字节是包的长度!通过拦截大量的数据包,我们判断第四个字节代表一个指令,也就是客户端告诉服务器做什么。例如,向服务器请求的战斗指令是“30”,而战斗中的移动指令是“D4”。接下来需要分析第一个包“F4 44 65438+f 0306 c 79 f 605 01 01 0001 75 09 0500 CF 26 00000000 005 000 1 000 0000089”。应该有一个NPC通知服务器你的PK,那我们先找找这个店员的代码在哪里。我们来PK另一个落水狗(就是大理客栈外的那个):SEND-& gt;0000 F4 44 1F 30 D4 75 F6 05 01 00 01 00 01 00 01 75 09 send->;001005008 a 19000001100200000 c0根据常识分析,虽然游戏中NPC的种类不会超过65535(FFFF),但是他们在开发时不会把自己限制在单词的范围内,不利于游戏的扩展,所以我们会用双字来看。通过对比“店员”和“小土豆”这两个袋子,重点放在“6C 79 F6 05”和“CF 26 00 00”上。(比较容易,但是不能太慢,呵呵)再来看看后面的包装。在后面的包里,应该有NPC码,比如移动包。游戏是允许观看比赛的,所以服务器必须知道NPC的移动坐标,并广播给其他观看比赛的玩家。在第四个包的后面“发送-& gt;0000 F4 44 10DA 01DB 6C 79 F6 05 02 27 35 010000“我们又看到了“6C 79 F6 05”,初步断定是调酒师的代号!(这个分析包含了大量的工作。你可以用WPE截取数据,自己分析。)

第一个包的分析暂时放在这里(我们暂时不需要完全清楚里面的信息)

让我们来看看第四个包“SEND-& gt;0000 f44 10da 01 db 6 c 79 f 605027 35 010000”,然后拦截PK黄狗的包。(二狗就出来了。)看包的格式:SEND-& gt;0000 F4 44 1A DA 02 0B 4B 7D F6 05 02 27 35 01 00 00 send->;F8 05 02 27 36 01 00 00 00

根据上面的分析,黄狗的代码是“4 b 7 df 605”(100040011),但是如何区分两个黄狗服务器呢?看“eb03f 805”(100140011),就是最后一个代码加100000,呵呵,这样服务器就可以识别两只黄狗了。我们会通过敌人在野外截获的数据包来确认,确实如此。

然后,这个包的格式要明确:第三个字节是包的长度,“DA”是指令,第五个字节是NPC的数量。从第七字节开始的10字节代表一个NPC的信息,多一个NPC意味着10字节。

如果你玩过网金,一定知道随机遇到敌人有时候会出现援军。让我们利用游戏的这种强化,让有强化的NPC出现在每一场战斗中。

通过战斗中援军截获的数据包,我们会发现服务器发出了这样一个数据包:F4 44 12 e 9 b 03 f 805 02 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00(这里简单以黄狗的代码为例)。然后,让我们使用单机代理技术来欺骗客户端和服务器!

好了,打电话到NPC的工作已经完成了一半。接下来的事情,如何修改和发送数据包,我们在下一节继续讲解。