外挂编写教程:网络游戏外挂编写初级教程

做自己喜欢
------ 明天你来自己做外挂 随着网络游戏日益火爆很多玩家都投身到游戏中目前很多玩家都依赖于些游戏外挂来进行游戏那么做个游戏外挂是否是件很困难事呢?回答是"否"诚然编写是需要些基本知识所以我们想以最简单语言来给你讲授编写外挂些窍门技巧些思路方法并提供给你些基本辅助工具即使你是个菜鸟看了我们教程并窍门技巧地使用我们提供给你工具你完全能够编写出个完全属于你自己外挂在本教程内我们提供了金庸群侠传以及网络 3国这两个游戏修改实际例子这两款游戏都是对封包进行过加密运算如果你对这两个游戏修改有了了解后相信你在其他游戏中也能非常好地做出属于自己外挂我们提供了金庸打增援20个NPC和网络 3国在PK中自动吃药自动发镖这两个实际例子让你上手更容易我们也会本教程内附上这两个软件Software以提供给你使用和学习我们会在教程内讲授给你如何去破解封包加密算法如何利用我们提供给你工具来伪造和发送封包本教程除了文字教程外我们还会提供金庸群侠和 3国外挂另外还提供6个外挂制作工具以供你使用希望在以后游戏中个玩家都能够在游戏中成长起来不但游戏玩出色修改游戏也同样出色个真正游戏DIY 要想在修改游戏中做到百战百胜是需要相当丰富计算机知识有很多计算机高手就是从玩游戏修改游戏中逐步对计算机产生浓厚兴趣逐步成长起来不要在羡慕别人能够做到别人能够做你也能够!我相信你们看了本教程后会对游戏有个全新认识呵呵我是个好老师!(别拿鸡蛋砸我呀救命啊!#¥%……*)   不过要想从修改游戏中学到知识增加自己计算机水平可不能只是靠修改游戏呀! 要知道修改游戏只是个验证你对你所了解某些计算机知识理解程度场所只能给你些发现问题、解决问题机会只能起到帮助你提高学习计算机兴趣作用而决不是学习计算机捷径

--------------------------------------------------------------------------------
:什么叫外挂?
现在网络游戏多是基于Internet上客户/服务器模式服务端运行在游戏服务器上游戏设计者在其中创造个庞大游戏空间各地玩家可以通过运行客户端同时登录到游戏中简单地说网络游戏实际上就是由游戏开发商提供个游戏环境而玩家们就是在这个环境中相对自由和开放地进行游戏操作那么既然在网络游戏中有了服务器这个概念我们以前传统修改游戏思路方法就显得无能为力了记得我们在单机版游戏中随心所欲地通过内存搜索来修改角色各种属性这在网络游戏中就没有任何用处了我们在网络游戏中所扮演角色各种属性及各种重要资料都存放在服务器上在我们自己机器上(客户端)只是显示角色状态所以通过修改客户端内存里有关角色各种属性是不切实际那么是否我们就没有办法在网络游戏中达到我们修改?回答是"否"我们知道Internet客户/服务器模式通讯般采用TCP/IP通信协议数据交换是通过IP数据包传输来实现般来说我们客户端向服务器发出某些请求比如移动、战斗等指令都是通过封包形式和服务器交换数据那么我们把本地发出消息称为SEND意思就是发送数据服务器收到我们SEND消息后会按照既定把有关信息反馈给客户端比如移动坐标战斗类型那么我们把客户端收到服务器发来有关消息称为RECV知道了这个道理接下来我们要做工作就是分析客户端和服务器的间往来数据(也就是封包)这样我们就可以提取到对我们有用数据进行修改然后模拟服务器发给客户端或者模拟客户端发送给服务器这样就可以实现我们修改游戏 目前除了修改游戏封包来实现修改游戏我们也可以修改客户端有关来达到我们要求我们知道目前各个服务器运算能力是有限特别在游戏中游戏服务器要计算游戏中所有玩家状况几乎是不可能所以有些运算还是要依靠我们客户端来完成这样又给了我们修改游戏提供了些便利比如我们可以通过将客户端脱壳来发现判断分支通过跟踪调试我们可以把些对我们不利判断去掉以此来满足我们修改游戏需求 在下几个章节中我们将给大家讲述封包概念和修改跟踪客户端有关知识大家准备好了吗?

游戏数据格式和存储:

在进行我们工作的前我们需要掌握些有关计算机中储存数据方式知识和游戏中储存数据特点本章节是提供给菜鸟级玩家看如果你是高手就可以跳过了呵呵!  如果你想成为无坚不摧剑客那么这些东西就会花掉你些时间;如果你只想作个江湖游客那么这些东西了解和否无关紧要是作剑客还是作游客你选择吧!

现在我们开始!首先你要知道游戏中储存数据几种格式这几种格式是:字节(BYTE)、字(WORD)和双字(DOUBLE WORD)或者说是8位、16位和32位储存方式字节也就是8位方式能储存0~255数字;字或说是16位储存方式能储存0~65535数;双字即32位方式能储存0~4294967295

为何要了解这些知识呢?在游戏中各种参数最大值是区别有些可能100左右就够了比如金庸群侠传中角色等级、随机遇敌个数等等而有些却需要大于255甚至大于65535象金庸群侠传中角色金钱值可达到数百万所以在游戏中各种区别数据类型是不在我们修改游戏时需要寻找准备修改数据封包在这种时候正确判断数据类型是迅速找到正确地址重要条件

  在计算机中数据以字节为基本储存单位每个字节被赋予个编号以确定各自位置这个编号我们就称为地址

在需要用到字或双字时计算机用连续两个字节来组成个字连续两个字组成个双字个字或双字地址就是它们低位字节地址 现在我们常用Windows 9x操作系统中地址是用个32位 2进制数表示而在平时我们用到内存地址时总是用个8位16进制数来表示它

2进制和十 6进制又是怎样回事呢?

  简单说来 2进制数就是种只有0和1两个数码每满2则进计数进位法同样16进制就是每满十 6就进计数进位法16进制有0--F十 6个数字它为表示十到十 5数字采用了A、B、C、D、E、F 6个数字它们和十进制对应关系是:A对应于10B对应于11C对应于12D对应于13E对应于14F对应于15而且16进制数和 2进制数间有个简单对应关系那就是; 4位 2进制数相当于位16进制数比如个 4位 2进制数1111就相当于16进制F1010就相当于A

了解这些基础知识对修改游戏有着很大帮助下面我就要谈到这个问题由于在计算机中数据是以 2进制方式储存同时16进制数和 2进制间转换关系十分简单所以大部分修改工具在显示计算机中数据时会显示16进制代码而且在你修改时也需要输入16进制数字你清楚了吧?

  在游戏中看到数据可都是十进制在要寻找并修改参数值时可以使用Windows提供计算器来进行十进制和16进制换算我们可以在开始菜单里组中附件中找到它

  现在要了解知识也差不多了!不过有个问题在游戏修改中是需要注意在计算机中数据储存方式般是低位数储存在低位字节高位数储存在高位字节比如十进制数41715转换为16进制数为A2F3但在计算机中这个数被存为F3A2

看了以上内容大家对数据存贮和数据对应关系都了解了吗? 好了接下来我们要告诉大家在游戏中封包到底是如何回事了来!大家把袖口卷起来让我们来干活吧!


--------------------------------------------------------------------------------
2:什么是封包?
如何截获个游戏封包?如何去检查游戏服务器ip地址和端口号? Internet用户使用各种信息服务其通讯信息最终均可以归结为以IP包为单位信息传送IP包除了包括要传送数据信息外还包含有信息要发送到IP地址、信息发送源IP地址、以及些相关控制信息台路由器收到个IP数据包时它将根据数据包中IP地址项查找路由表根据查找结果将此IP数据包送往对应端口台IP路由器收到此数据包后继续转发直至发到目路由器的间可以通过路由协议来进行路由信息交换从而更新路由表

那么我们所关心内容只是IP包中数据信息我们可以使用许多监听网络工具来截获客户端和服务器的间交换数据下面就向你介绍其中种工具:WPE

WPE使用思路方法:执行WPE会有下列几项功能可选择:

SELECT GAME选择目前在记忆体中您想拦截程式您只需双击该程式名称即可

TRACE追踪功能用来追踪撷取程式送收封包WPE必须先完成点选欲追踪程式名称才可以使用此项目 按下Play键开始撷取程式收送封包您可以随时按下 | | 暂停追踪想继续时请再按下 | | 按下正方形可以停止撷取封包并且显示所有已撷取封包内容若您没按下正方形停止键追踪动作将依照OPTION里设定值自动停止如果您没有撷取到资料试试将OPTION里调整为Winsock Version 2WPE 及 Trainers 是设定在显示至少16 bits 颜色下才可执行

FILTER过滤功能用来分析所撷取到封包并且予以修改

SEND PACKET送出封包功能能够让您送出假造封包

TRAINER MAKER制作修改器

OPTIONS设定功能让您调整WPE些设定值

FILTER详细教学

- 当FILTER在启动状态时 ON按钮会呈现红色- 当您启动FILTER时您随时可以关闭这个视窗FILTER将会保留在原来状态直到您再按次 _disibledevent= 10h﹞生命值而您观察到第4跟第5个封包位置4有10h值出现应该就是这里了

您观察10h前0A 09 C1在两个封包中都没改变可见得这3个数值是发出火球关键

因此您将0A 09 C1 10填在搜寻列﹝SEARCH﹞然后在修改列﹝MODIFY﹞位置4填上FF如此当您再度发出火球时FF会取代的前10也就是攻击力为255火球了!

ADVANCED MODE:

范例: 当您在个游戏中您不想要用真实姓名您想用修改过假名传送给对方在您使用TRACE后您会发现有些封包里面有您名字出现假设您名字是Shadow换算成16进位则是﹝53 68 61 64 6F 77﹞;而您打算用moon﹝6D 6F 6F 6E 20 20﹞来取代他1) SEND-> 0000 08 14 21 06 01 042) SEND-> 0000 01 06 99 53 68 61 64 6F 77 00 01 05 3) SEND-> 0000 03 84 11 09 11 094) SEND-> 0000 0A 09 C1 10 00 53 68 61 64 6F 77 00 11 5) SEND-> 0000 0A 09 C1 10 00 00 66 52 44

但是您仔细看名字在每个封包中并不是出现在相同位置上

- 在第2个封包里名字是出现在第4个位置上- 在第4个封包里名字是出现在第6个位置上

在这种情况下您就需要使用ADVANCED MODE- 您在搜寻列﹝SEARCH﹞填上:53 68 61 64 6F 77 ﹝请务必从位置1开始填﹞- 您想要从原来名字Shadow个字母开始置换新名字因此您要选择从数值被发现位置开始替代连续数值﹝from the position of the chain found﹞- 现在在修改列﹝MODIFY﹞000位置填上:6D 6F 6F 6E 20 20 ﹝此为相对应位置也就是从原来搜寻栏+001位置开始递换﹞- 如果您想从封包个位置就修改数值请选择﹝from the beginning of the packet﹞

了解点TCP/IP协议常识人都知道互联网是将信息数据打包的后再传送出去每个数据包分为头部信息和数据信息两部分头部信息包括数据包发送地址和到达地址等数据信息包括我们在游戏中相关操作各项信息那么在做截获封包过程的前我们先要知道游戏服务器IP地址和端口号等各种信息实际上最简单是看看我们游戏目录下是否有个SERVER.INI配置文件这个文件里你可以查看到个游戏服务器IP地址比如金庸群侠传就是如此那么除了这个我们还可以在DOS下使用NETSTAT这个命令

NETSTAT命令功能是显示网络连接、路由表和网络接口信息可以让用户得知目前都有哪些网络连接正在运作或者你可以使用木马客星等工具来查看网络连接工具是很多看你喜欢用哪种了

NETSTAT命令般格式为:NETSTAT [选项]

命令中各选项含义如下:-a 显示所有包括正在监听-c 每隔1秒就重新显示直到用户中断它-i 显示所有网络接口信息-n 以网络IP地址代替名称显示出网络连接情形-r 显示核心路由表格式同"route -e"-t 显示TCP协议连接情况-u 显示UDP协议连接情况-v 显示正在进行工作

--------------------------------------------------------------------------------
3:如何来分析我们截获封包?
首先我们将WPE截获封包保存为文本文件然后打开它这时会看到如下数据(这里我们以金庸群侠传里PK店小 2客户端发送数据为例来讲解):

个文件:SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1BSEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9BSEND-> 0000 E6 56 1E F1 29 06 17 12 3B 0E 17 1ASEND-> 0000 E6 56 1B C0 68 12 12 12 5ASEND-> 0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12SEND-> 0000 E6 56 17 C9 12

第 2个文件:SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7ESEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6DSEND-> 0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3SEND-> 0000 83 33 7E A5 21 77 77 77 3FSEND-> 0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77SEND-> 0000 83 33 72 AC 77

我们发现两次PK店小 2数据格式但是内容却不相同我们是PK个NPC为什么会区别呢? 原来金庸群侠传封包是经过了加密运算才在网路上传输那么我们面临问题就是如何将密文解密成明文再分析了

数据包加密都是异或运算所以这里先讲下什么是异或 简单异或就是"相同为0区别为1"(这是针对 2进制按位来讲)举个例子0001和0010异或我们按位对比得到异或结果是0011计算思路方法是:0001第4位为00010第4位为0它们相同则异或结果第4位按照"相同为0区别为1"原则得到00001第3位为00010第3位为0则异或结果第3位得到00001第2位为00010第2位为1则异或结果第2位得到10001第1位为10010第1位为0则异或结果第1位得到1组合起来就是0011异或运算今后会遇到很多大家可以先熟悉熟悉熟练了对分析很有帮助

下面我们继续看看上面两个文件按照常理数据包数据不会全部都有值游戏开发时会预留些字节空间来便于日后扩充也就是说数据包里会存在些"00"字节观察上面文件我们会发现文件里很多"12"文件 2里很多"77"那么这是不是代表我们说"00"呢?推理到这里我们就开始行动吧!

我们把文件和"12"异或文件 2和"77"异或当然用手算很费事我们使用"M2M 1.0 加密封包分析工具"来计算就方便多了得到下面结果:

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

第 2个文件:1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 843 SEND-> 0000 F4 44 09 D2 56 00 00 00 484 SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 005 SEND-> 0000 F4 44 05 DB 00

下两个文件大部分都样啦介绍说明我们推理是正确上面就是我们需要明文!

接下来就是搞清楚些关键字节所代表含义这就需要截获大量数据来分析

首先我们会发现每个数据包都是"F4 44"开头第3个字节是变化但是变化很有规律我们来看看各个包长度发现什么没有?对了第3个字节就是包长度! 通过截获大量数据包我们判断第4个字节代表指令也就是说客户端告诉服务器进行是什么操作例如向服务器请求战斗指令为"30"战斗中移动指令为"D4"等 接下来我们就需要分析下上面第个包"F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89"在这个包里包含什么信息呢?应该有通知服务器你PK哪个NPC吧我们就先来找找这个店小 2代码在什么地方 我们再PK个小喽罗(就是大理客栈外那个咯):SEND-> 0000 F4 44 1F 30 D4 75 F6 05 01 01 00 01 00 01 75 09SEND-> 0010 05 00 8A 19 00 00 00 00 11 00 02 00 00 00 C0 我们根据常理分析游戏里NPC种类虽然不会超过65535(FFFF)但开发时不会把自己限制在字范围那样不利于游戏扩充所以我们在双字里看看通过"店小 2"和"小喽罗"两个包对比我们把目标放在"6C 79 F6 05"和"CF 26 00 00"上(对比下很容易但你不能太迟钝咯呵呵)我们再看看后面在后面包里应该还会出现NPC代码比如移动游戏允许观战服务器必然需要知道NPC移动坐标再广播给观战其他玩家在后面第4个包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00"里我们又看到了"6C 79 F6 05"初步断定店小 2代码就是它了!(这分析里边包含了很多工作大家可以用WPE截下数据来自己分析分析)

个包分析暂时就到这里(里面还有信息我们暂时不需要完全清楚了)

我们看看第4个包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00"再截获PK黄狗(狗会出来2只哦)看看包格式:SEND-> 0000 F4 44 1A DA 02 0B 4B 7D F6 05 02 27 35 01 00 00SEND-> 0010 EB 03 F8 05 02 27 36 01 00 00

根据上面分析黄狗代码为"4B 7D F6 05"(100040011)不过两只黄狗服务器怎样分辨呢?看看"EB 03 F8 05"(100140011)是上个代码加上100000呵呵这样服务器就可以认出两只黄狗了我们再通过野外遇敌截获数据包来证实果然如此

那么这个包格式应该比较清楚了:第3个字节为包长度"DA"为指令第5个字节为NPC个数从第7个字节开始10个字节代表个NPC信息个NPC就多10个字节来表示

大家如果玩过网金必然知道随机遇敌有时会出现增援我们就利用游戏这个增援来让每次战斗都会出现增援NPC吧

通过在战斗中出现增援截获数据包我们会发现服务器端发送了这样个包:F4 44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8个字节为增援NPC代码(这里我们就简单以黄狗代码来举例) 那么我们就利用单机代理技术来同时欺骗客户端和服务器吧!

好了呼叫NPC工作到这里算是完成了小半接下来事情怎样修改封包和发送封包我们下节继续讲解吧

--------------------------------------------------------------------------------
4:如何冒充"客户端"向"服务器"发我们需要封包?
这里我们需要使用个工具它位于客户端和服务器端的间工作就是进行数据包接收和转发这个工具我们称为代理如果代理工作单纯就是接收和转发这就毫无意义了但是请注意:所有数据包都要通过它来传输这里意义就重大了我们可以分析接收到数据包或者直接转发或者修改后转发或者压住不转发甚至伪造我们需要封包来发送

下面我们继续讲怎样来同时欺骗服务器和客户端也就是修改封包和伪造封包 通过我们上节分析我们已经知道了打多个NPC封包格式那么我们就动手吧!

首先我们要查找客户端发送找到战斗特征就是请求战斗第1个包我们找"F4 44 1F 30"这个特征这是不会改变当然是要解密后来查找哦 找到后表示客户端在向服务器请求战斗我们不动这个包转发 继续向下查找这时需要查找特征码不太好办我们先查找"DA"这是客户端发送NPC信息数据包指令那么可能其他包也有"DA"没关系我们看前3个字节有没有"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",把每个新增NPC都构造这样个包按顺序连在起发送给客户端客户端也就被我们骗过了很简单吧

以后战斗中其他事我们就不管了尽情地开打吧呵呵
Tags:  网络游戏外挂教程 游戏外挂编写教程 外挂编写教程

延伸阅读

最新评论

发表评论