网络游戏数据的编程修改

选择游戏选择你想在内存中屏蔽的程序,你只需要双击程序名。

痕迹追踪功能。用于跟踪捕获程序发送和接收的数据包。WPE必须先点击要跟踪的节目名称,然后才能使用此项。按播放键开始捕获程序发送和接收的数据包。您可以随时按下||,暂停跟踪,然后在需要继续时再次按下||。按方块停止捕获数据包,并显示所有捕获的数据包内容。如果不按方形停止键,跟踪动作会根据选项中的设定值自动停止。如果您没有获得数据,请尝试将选项调整到Winsock版本2。WPE和教练设置显示至少16位。

过滤器过滤功能。用于分析捕获的数据包并对其进行修改。

发送数据包发送数据包功能。允许你发送假数据包。

教练制造者制造修改器。

选项设置功能。让您调整WPE的一些设置。

滤波器的详细教学

-当过滤器启动时,按钮ON将显示为红色。-当您启动过滤器时,您可以随时关闭此窗口。过滤器将保持其原始状态,直到您再次按下开/关按钮。-只有当过滤器启用按钮关闭时,您才能勾选过滤器前面的复选框进行编辑和修改。-当您想要编辑过滤器时,只需双击过滤器的名称。

正常模式:

示例:

当你在游戏街霸Online(最终战斗Online版)中,你使用火球两次并击中对方,那么你会捕获到以下数据包:SEND-& gt;0000 08 14 21 06 01 04发送->;0000 02 09 87 00 67 FF A4 AA 11 22 00 00 00 00 00 SEND->;0000 03 84 1109 1109发送->;0000 0A 09 c 1 10 00 00 FF 52 44 SEND->0000 0A 09 c 1 10 00 00 66 52 44

你的第一个火球减少对方生命值16滴(16 = 10h),你观察到第4、5包的4号位有10h值,应该在这里。

你观察到10h之前的0A 09 C1在两个包中都没有变化,可见这三个值是发出火球的关键。

因此,您在搜索列(search)中填充0A 09 C1 10,然后在修改列(modify)中的位置4填充FF。这样,当你再次发射火球的时候,FF会替换掉之前10的火球,也就是攻击力255的火球!

高级模式:

举例:你在一个游戏里,不想用真名,但是想用修改过的假名发给对方。使用TRACE后,你会发现你的名字出现在一些数据包中。假设你的名字叫影子,换算成16,就是(53 68 61 64 6f 77);而你要用Moon (6D6F6E20 20)代替他。1)发送->;0000 08 14 21 06 01 042)发送->;0000 01 06 99 53 68 61 64 6F 77 00 01 05 3)发送->;0000 03 84 1109 11094)发送->;0000 0A 09 c 1 10 00 53 68 61 64 6F 77 00 11 5)发送->0000 0A 09 c 1 10 00 00 66 52 44

但如果你仔细看,你的名字并没有出现在每一个包的同一个位置。

-在第二个数据包中,名称出现在第四个位置。-在第四个数据包中,名称出现在第六个位置。

在这种情况下,你需要使用高级模式——你填写搜索列(search): 53 68 61 64 6F77(请务必从位置1开始填写)——你要从原来名字阴影的第一个字母开始替换新名字,所以你要选择从数值中找到的那个。-现在,在修改列的位置填写:6d6f 6 e 2020(﹝modify﹞000(这是对应的位置,即从原搜索列的+001位置开始)-如果要从包的第一个位置开始修改值,请选择。

稍微了解TCP/IP协议的人都知道,互联网是把信息和数据打包后再发出去的。每个数据分组被分成报头信息和数据信息。报头信息包括数据包的发送地址和到达地址。数据信息包括我们在游戏中相关操作的各种信息。然后在我们拦截数据包之前,我们需要知道游戏服务器的IP地址和端口号。其实最简单的就是看有没有SERVER的配置文件。INI在我们的游戏目录中。你可以在这个文件中查看某个游戏服务器的IP地址,比如金庸传,那么除此之外,我们还可以在DOS中使用命令NETSTAT。

NETSTAT命令的作用是显示网络连接、路由表和网络接口信息,可以让用户知道当前有哪些网络连接在运行。或者你可以使用特洛伊马客星等工具来检查网络连接。工具有很多,看你喜欢用哪一个了。

NETSTAT命令的一般格式是:NETSTAT [option]

命令中选项的含义如下:-a显示所有套接字,包括正在被监控的套接字。-c将每隔1秒再次显示,直到用户将其中断。-i显示所有网络接口的信息。-n用网络IP地址替换名称,显示网络连接。-r以与“route -e”相同的格式显示核心路由表。-t显示TCP协议的连接。-u显示UDP协议的连接。-v显示正在进行的工作。

-

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

首先,我们将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的工作已经完成了一半。接下来的事情,如何修改和发送数据包,我们在下一节继续讲解。

-

四:如何冒充“客户端”,将我们需要的数据包发送到“服务器”?

这里我们需要使用一个工具,它位于客户端和服务器之间,它的工作是接收和转发数据包。这个工具叫做代理。如果代理的工作只是单纯的接收和转发,那是没有意义的,但是请注意,所有的数据包都要通过它来传输,这一点在这里意义重大。我们可以对接收到的数据包进行分析,要么直接转发,要么修改后转发,要么憋着,甚至伪造我们需要发送的数据包。

下面继续讲如何同时欺骗服务器和客户端,即修改包和伪造包。通过我们上一节的分析,我们已经知道了打多个NPC的包格式,那就动手吧!

首先需要找到客户端发来的数据包,找到战斗的特征,也就是第1个请求战斗的数据包。我们寻找“F4 44 1F 30”的特征,这个特征不会改变。当然,我们需要解密,以后再找。找到后,说明客户端在找服务器打架。我们不会移动和转发这个包。继续向下搜索。这时候就不容易找到特征码了。让我们首先寻找“DA ”,它是客户机发送NPC信息包的指令。那么可能其他包也有“DA”。没关系。让我们看看前三个字节中是否有“F4 44”。找到之后,我们的工作就开始了!

我们决定玩的NPC的数量。这个数字不能很大,因为网金的包长是用一个字节来表示的,所以一个包可以有255个字节。正如我们上面分析的,增加一个NPC需要增加10字节,所以大家通过计算知道,打20个NPC比较合适。

然后我们要分析计算客户端原来的NPC码,因为增加的NPC码要加上100000。然后计算我们添加的NPC码,并将其组合成一个新的数据包。注意代表要修改的包长度的字节,然后转发给服务器。这一步,写程序的时候注意算法,以免造成很大的延迟。

上面我们欺骗了服务器端,欺骗客户端很简单。

在发送上述数据包后,我们根据新添加的NPC码构造一个数据包,并立即将其发送给客户端。格式为“F4 44 12 E9 NPC代码02 00 00 03 00 00 00 00 00 00 00 00 00 00 00”。我们为每个新加入的NPC构造这样一个包,按顺序发给客户端,客户端就会被我们骗了。很简单。

以后的战斗我们就不管其他的了,爱怎么打就怎么打,呵呵。本栏目文章均来自网络,版权归原作者及所有发布网站所有。这些文章是本网收集的,仅供学习参考。没有人可以将这些文章用于商业或其他目的。(ProgramFan.Com)