为什么要学制作外挂

为什么要学制作外挂

学习制作外挂,其实是学习一门网络技术,不是仅仅是游戏!

我们玩游戏,游戏公司玩我们,你可以忍受游戏的不平衡吗?你可以忍受游戏的BUG吗,你愿意交钱去买外挂(有时后还可能上当受骗)吗?你不愿意自己做外挂自己用吗?你不愿意做几个外挂给你的朋友使用吗?你不愿意体验制作外挂的乐趣吗?你不愿意自己的游戏ID有很多钱,很好的装备,很高的等级吗?看到别人拿着外挂到处惹是生非,你心理平衡吗?所以,我们要自己制作外挂,做自己的外挂!

学习制作外挂,不是复杂的事,为什么不花点时间来学习学习呢?

学习外挂有3点好处:

1、学到一门技术(关于网络)

2、可以更好地玩游戏

3、可以利用外挂赚到人民币

制作外挂的可行性

首先,让我们来看一下网络游戏的工作原理:

网络游戏是这样工作的:

1.由服务器记录保存所有用户资料,所有信息的修改都是服务器完成的

2.服务器接受客户机的请求发送必要的信息给客户机,以使玩家正常游戏

3.服务器接收客户机的信息反馈,并根据反馈信息,对游戏帐号作相应修改

从以上简单的介绍,我们可以看出,网络游戏可以认为是这样工作的:

由客户机电脑操作服务器器电脑,对游戏帐号信息进行修改!

要操纵本地的电脑是很容易的,因此,要显示所有已经从服务器得到的信息是完全可能的,这就可以做到以下功能:

1、游戏没有黑夜,因为地图在本地,全部显示是完全可以做到的!

2.自动加血是没有问题的,因为血的多少也已经发到本地电脑,完全可以用外挂检测到,并在必要时加血,加血本身只是一个鼠标动作,完全可以交给外挂去做。类似的,自动加魔法,自动加气,自动回城、自动打怪、自动采矿卖钱然后再自动回去采、自动练级等等都可以做到!

3.卖东西的过程很经典:你卖东西时,实际就是告诉服务器电脑,你已经将一个东西卖了,真实过程是:你向服务器发送了一个具体物品的封包,如果这个封包正确,服务器就向你的游戏帐号加一定数量的钱,然后再反馈给你一些信息,假如封包不正确,自然就卖不到钱,因此,我们可以利用外挂不断向服务器发送封包,只要正确,那么服务器就认为我们再卖东西,即使我们什么都没有卖,服务器也不断给我们钱,这就是所谓的刷钱。如果封包没有加密,那么这个功能是非常容易实现的,如果封包加密,其实同样可以做到,只是要解密而已,稍微复杂些而已!类似的,就可以实现买东西用假钱(不用钱)。攻击、防御增加,原理都是类似的!

以上的讲解,大家应该明白,其实外挂是每个游戏都可能出现的,只要有人想做,那么就没有做不出外挂的游戏!除非这个游戏不能玩!!

学制作外挂难吗

外挂的制作,有容易的,也有难的。要制作简单的外挂,自然不难,如果要制作出功能变态的外挂,就比较难一些了,其次和选择制作外挂的工具也很有关系,例如,利用WPE制作外挂就很简单,只要有初中文化就可以制作出相当强大的外挂,如果用VB来编写外挂,也很简单,而且能实现几乎所有的功能,是学习和制作外挂最理想的工具了,VC也一样,难度大一些的是Delphi这样的开发工具,更难的是C语言,最难的就是汇编语言了,几乎可以认为由于太难掌握而不适合开发外挂。

本文章主要讲述WPE和VB制作外挂的准备知识、制作方法、制作技巧、实例讲解,由浅如深,逐步介入,学习起来是非常简单的,内容详实、资料丰富。从初学者到高级外挂制作者,都详细考虑了的,能让初学者快速入门,能让高级外挂制作者掌握更多外挂制作的方法和资料!可以说是制作外挂从入门到精通的最好文章!

关于外挂制作方面的文章非常少,一般都是只有WPE的简单介绍,关于VB的根本不谈,这是一个普遍现象,使得很多人用WPE按照说明怎么也弄不出来,想用其他软件做又苦于没有一本可以参考的文章,本文章就是在这样的环境下编写的,希望能让跟多的人知道怎样制作外挂,了解这门前沿的知识!

外挂是什么?

现在的网络游戏多是基于Internet上客户/服务器模式,服务端程序运行在游戏服务器上,游戏的设计者在其中创造一个庞大的游戏空间,各地的玩家可以通过运行客户端程序同时登录到游戏中。简单地说,网络游戏实际上就是由游戏开发商提供一个游戏环境,而玩家们就是在这个环境中相对自由和开放地进行游戏操作。那么既然在网络游戏中有了服务器这个概念,我们以前传统的修改游戏方法就显得无能为力了。记得我们在单机版的游戏中,随心所欲地通过内存搜索来修改角色的各种属性,这在网络游戏中就没有任何用处了。因为我们在网络游戏中所扮演角色的各种属性及各种重要资料都存放在服务器上,在我们自己机器上(客户端)只是显示角色的状态,所以通过修改客户端内存里有关角色的各种属性是不切实际的。那么是否我们就没有办法在网络游戏中达到我们修改的目的?回答是"否"。我们知道Internet客户/服务器模式的通讯一般采用TCP/IP通信协议,数据交换是通过IP数据包的传输来实现的,一般来说我们客户端向服务器发出某些请求,比如移动、战斗等指令都是通过封包的形式和服务器交换数据。那么我们把本地发出消息称为SEND,意思就是发送数据,服务器收到我们SEND的消息后,会按照既定的程序把有关的信息反馈给客户端,比如,移动的坐标,战斗的类型。那么我们把客户端收到服务器发来的有关消息称为RECV。知道了这个道理,接下来我们要做的工作就是分析客户端和服务器之间往来的数据(也就是封包),这样我们就可以提取到对我们有用的数据进行修改,然后模拟服务器发给客户端,或者模拟客户端发送给服务器,这样就可以实现我们修改游戏的目的了。

目前除了修改游戏封包来实现修改游戏的目的,我们也可以修改客户端的有关程序来达到我们的要求。我们知道目前各个服务器的运算能力是有限的,特别在游戏中,游戏服务器要计算游戏中所有玩家的状况几乎是不可能的,所以有一些运算还是要依靠我们客户端来完成,这样又给了我们修改游戏提供了一些便利。比如我们可以通过将客户端程序脱壳来发现一些程序的判断分支,通过跟踪调试我们可以把一些对我们不利的判断去掉,以此来满足我们修改游戏的需求。

外挂工具介绍:

WPE

(WinsockPacketEditor)

它的中文名称是:网络封包编辑器

在大多数的变成工具中winsock已经封装成一个控件,成为网络变成的控件,是非常方便的,利用这个控件,变成工具就可以编写外挂工具。

现在,WPE有两个版本,分别是:WPE1.3和WPEpro0.7前者是使用与win98操作平台,后者适用与win200和winXP操作系统。都有中文版。

VB

使用VB就可以非常容易地编写出很出色的外挂。例如,可以编写注册功能,使你做的外挂让别人使用时必须注册才能使用,WPE做出来的外挂是任何人得到了外挂就可以使用,不能实现限制使用,并且VB对键盘鼠标的控制,对系统的控制都很出色,VB是visialbasic的意思,就是可视化依据basic语言的编程工具,Basic本身就是基本的的意思,是很简单的语言,但是功能却是非常强大,建议大家学习。

WPE工作原理说明

wpe所要改的...不是[游戏里面的数值]..而是[伪造信息封包]......

什么意思咧??就是我们用wpe所要改的...并不是"生命力由100变成10000"之类的东西...这种东西无法(最启码我不知道方法..)用wpe改....

我们要改的可能是把"我卖了一500元的东西"改成"我卖了一个500000元的东西"或把"我得了10的exp"改成"我得了1000000的exp"之类的.........

或者是明明身上没东西...还一直卖"500元的东西"..或没怪物还"一直打10的exp"..(也就是一直传一样的封包...)大致上就是这样...不过光是这样讲..可能也很多人听不懂...所以就照以下的做法一步一步做吧...

一开始..当然是要锁定一个游戏啰....看好以下步骤:

1.打开wpe程序

2.执行游戏

3.进入游戏后再按[Alt+Tab]跳出游戏

4.到wpe的窗口如果没问题的话....这时你点选"SELECTGAME"里面...会有一大串的东东...选最下面的那个..就是你正在玩的那个游戏了啦...(他上面所显示的字并不是窗口名字..不同于普通修改器..所以别因为找不到名字就以为程序坏啰....)

接下来呢....再进入游戏....找个要测试的目标....

我这里就以卖东西为例啰........

1.进入道具店..跟老板讲话

2.开启好卖道具的窗口..以便随时可以卖东西

3.再按[Alt+Tab]跳出游戏到wpe窗口

4.连点wpe中的"TRACE"这时它会出现一个窗口..有拨放/停止键,边还有"SENT","RECV"

5.按下拨放键,并尽快回到游戏,卖掉你的东西再跳出来按暂停键(||)接下来你可以看到右边已经有很多"RECV"和几个"SENT"ok....第一部份就完成啰...

如果你在这里"SENT","RECV"都没增加...那可能就是你选错程序啰...到"SELECTGAME"重选试试吧....接下来按下停止键(方块的那个键)..你会看到wpe中有着一堆数字..前面还有"R"或"S"...其中的"R"就是receive..也就是你从远程主机接收到的讯息...这个部分并不是我们所要注意的...因为资料是存在远程主机的....所以我们传(也就是"S"-Sent)什么过去远程主机才是最重要的....这时候拿出你的纸笔..把那Sent的信息都抄下来......(很麻烦..可是我不知道有什么比较不麻烦的方法....)

接下来咧...再卖一次东西(最好是一样的东西ㄛ)..重复刚刚1~5的步骤....再把S的抄下来.....然后现在你手上就有两笔卖东西所会传出的信息了...自己比对看看啰...找出一段相同的部分!!没错~~~~那段数字就是掌控你卖东西的关键啰!!!接下来..再去卖一次东西...这次换卖不一样的东西....再抄下来比对......

ok...这次应该就可以找出卖的"道具"所代表的数字在哪啰....

接下来就是试看看能不能卖自己身上明明没有的东西啰...(能的话就一直卖卖到你觉得钱够多啰)或是看看那段信息里面有没有包含该道具的价格..有的话..把钱改高..就有赚头啰.............

我虽然看的懂~~但改不来~~天ㄚ~~有更厉害的高手吗??

WPE会有下列几项功能可选择:

●SELECTGAME选择目前在内存中您想拦截的程序,您只需双击该程序名称两下即可。

●TRACE追踪功能。用来追踪撷取程序送收的封包。

●FILTER过滤功能。用来分析所撷取到的封包,并且予已修改。

●SENDPACKET送出封包功能。能够让您丢出假造的封包。

●TRAINERMAKER制作修改器。

●OPTIONS设定功能。让您调整WPE的一些设定值。

WPE使用方法:

1.启动wpe,双击selectgame,选择你所要截获ip包的程序,例如图中千年

的主程序Client.exe

2.trace选项是用来截获封包的,具体方法就是双击trace,按开始录制的三角,

停止按红方。sentrecv显示的接收和发送封包的进度!在设定的长度到达后,

自动停止,默认值100行!

截获封包后,s框后面的数字是发送封包的内容,r框后面的数字是接收封包的

内容,以16进制数和acsII两种方式体现!整个程序的上面有储存清除,

查找3个选项!

3.filter的功能实现起来比较复杂,原理是每当有一个发送的封包中含有指定

的字节,那么发送另一个由你编写伪封包出去!

打开fliter以后选项有打开保存全部选择写封包开始fliter清除已编写

的封包清除所有选择的封包关闭!

双击filterlist里任意一个filter,进入编辑模式!data对话框里,search

是写入可能截获的封包的内容,modify里写入的是,每当出现search里的内

容的时候,用modify里写入的替换掉!也就是说假如我截获一个仍1元钱的封包,我写入search,再截获一个仍100元的封包,那么每当你放1元钱的时候,系统会发送一个放100元的封包出去!(石器里封包经过加密,每次同样动作发送封包的内容可能不同)

4.sendpackets是发送封包的功能,packetslist里有5个选项,不再重复

介绍。send对话框time可以设置发送封包的次数newsocket是指定ip和端

口发送,opensocket是利用selectgame指定的程序发送,端口可以双击

截获的封包前s框获得!

5.双击任意packets可以进入编辑界面,用size来设置封包最大长度!

编辑好以后,按箭头加入右面发送区(最大100个),设置好发送次数,

点击开始的三角,即可发送!

6.options里面是一些关于wpe的设置!winsockfuctions用来选择截获封包

的的种类,比如,只截获发送封包,就在send,sendto前面选择对号!

fliteroptions里面是设置fliter功能里最大封包的长度!

packetstraceoptions里设置的是截获封包的最大长度,和发送封包的

最大长度!

常用封包代码及替换方法:

注意:这里的xx全部是空出来得意思(以后不再交代这个问题了)

也就是封包的第4位到第7位是时间代码,空出来避开服务器对时间验证

1个1的代码:(代码总数22位)可以替换相同位数的代码。例交易取消的代码和开地图

send->0000285345xxxxxxxx4e4e4e4e4e564e4e75

send->00103e4e53564e29

3个1的代码:(代码总数26位)可以替换成卖东西的代码等等

send->000028564exxxxxxxx4e4e4e4e4e4a4e4e75

send->0010534e5356584d414e4e29

4个1的代码:(代码总数26位)代码总数与3个1的相同。注意:(打头3位代码不同)

3个1的是28564e而4个1的是285641可以替换买东西的代码

send->0000285641xxxxxxxx4e4e4e4e4e6c4e4e75

send->0010564e5356584d3f564e29

6个1的代码:(代码总数30位)这个可替换的比较多。例如无名类的武功,交易点确认等

send->0000285675xxxxxxxx4e4e4e4e4e644e4e75

send->00104a4e5356584d3f56584d414e4e29

11个1的代码:(代码总数34位)可替换拖物品栏物品后点确认的封包

send->0000284a4exxxxxxxx4e4e4e4e4e6a4e4e75

send->0010424e5356584d3f56584d3f56584d3f56

send->00205829

33个1的代码:(代码总数66位)可替换状态,如福袋保管后取消和确认的封包,还有刚刚进入游戏是点提示框的封包,与老板娘交易后取消和确认的封包等等

send->0000284245xxxxxxxx4e4e4e4e4e5c4e4e75

send->0010524e5356584d3f56584d3f56584d3f56

send->0020584d3f56584d3f56584d3f56584d3f56

send->0030584d3f56584d3f56584d3f56584d414e

send->00404e29

alt+m(即开小地图)::(代码总数22位)

send->0000285341xxxxxxxx4e4e4e4e4e534e5465

send->00104e4e4e4e4e29

物品栏第一格物品放入保管窗第一格的封包代码:(代码总数46位)

send->0000287741xxxxxxxx4e4e4e4e4e794e3e65

send->00103e3e754e4e4e4e4e4e4e4e4e4e4e754e

send->00204e4e4e4e48546c654e4e4e4e4e29

点击屏幕最右下角处老板娘的代码(其他位置没抓过,其实找到其他的把那个不同的代码忽略掉应该就可以实现所有位置的点击了):(代码总数30位)

send->0000285675xxxxxxxx4e4e4e4e4e644e3e41

send->0010534e4e4e4e4e4e4e4a4e4e4e4e29

取消福袋保管的代码:(代码总数66位)

send->0000284245xxxxxxxx4e4e4e4e4e5c4e3e5e

send->00106c4e4e4e4e5a5c774e4d6e61594e4d3e

send->002053544e4d4e4e4e4e4e75564d774e7441

send->00304e4e4e4e7559795e4e5a3f3e4e4e4e4e

send->00404e29

确认福袋保管的代码:(代码总数66位)

send->0000284245xxxxxxxx4e4e4e4e4e5c4e3e5e

send->00106c4e4e564e5a5c774e4d6e61594e4a4b

send->002054544e4d4e4e4e4e4e475677774e7441

send->00304e4e4e4e7559795e4e5a3f3e4e4e4e4e

send->00404e29

拉出物品栏第一格物品的动作代码:(代码总数46位)

send->0000287741xxxxxxxx4e4e4e4e4e794e3e65

send->00103e4e754e4e4e4e4e4e4e4e4e4e4e4e4e

send->00204e4e6e75544e414d4e4e4e4e4e29

拉出物品栏物品后点取消的代码:(代码总数34位)

send->0000284a4exxxxxxxx4e4e4e4e4e6a4e3e57

send->00104e4e4e4e4e4e4e774e4e4e4e4e4e4e4e

send->00204e29

这个是我截取的向无法放置物品的位置放置物品的代码,(即无法放下这个物品的状态)需要说明的是我当时物品栏第一格是钱币,钱币下面是汤药。而且数量是47个。

时间太仓促,所以没来得及研究其中具体代码的含义就急着发上来了。用11个1的代码替换后会产生这样的现象。先拖物品栏1格的钱币到外面,然后不用输入数量,在对话栏输入11个1。结果放在钱币下面的汤药会掉出来47个。而那个没有输入数量的窗口还不消失,可以移动,也可以进行买卖保管及移动物品的动作。但就是无法实现复制(痛苦!)

刚进入游戏提示框点确认的代码:(代码总数66位)

send->00002842454exx4e4e4e4e4e4e4e5c4e3e5e

send->0010774e45564e5a5c774e4d6e61594exxxx

send->0020xxxxxxxx4e4e4e4e4exxxxxxxxxxxxxx

send->00304e4e4e4e7559795e4e5a3f3e4e4e4e4e

send->00404e29

物品栏第一格物品拖到交易窗后点取消的代码:(代码总数34位)这个代码跟物品拖到地面点取消的效果一样。

send->0000284a4exxxxxxxx4e4e4e4e4e6a4e3e57

send->00104e4e4e4e4e4e4e484e4e4e4e4e4e4e4e

send->00204e29

(贴出来的只不过是千年里面的很小一部分封包代码,以后我会继续发贴的,同时也请广大wpe爱好者一起来补充和完善其余未截取的代码!)

如果其中有不准确的代码还请大家提出,我会及时改正的。(这些全部是我今天上午截取的,因为工作忙,时间太紧,错误的地方请朋友们多海涵)

VB工作原理说明

随着网络游戏的日益火爆,很多玩家都投身到游戏中。目前很多玩家都依赖于一些游戏的外挂程序来进行游戏。那么做一个游戏的外挂程序是否是一件很困难的事呢?回答是"否",诚然编写一些程序是需要一些基本知识的,所以我们想以最简单的语言来给你讲授编写外挂程序的一些技巧,一些方法,并提供给你一些基本的辅助工具,即使你是一个菜鸟,看了我们的教程,并技巧地使用我们提供给你的工具,你完全能够编写出一个完全属于你自己的外挂。在本教程内,我们提供了金庸群侠传,以及网络三国这两个游戏的修改实际例子,因为这两款游戏都是对封包进行过加密运算的,如果你对这两个游戏的修改有了一定的了解后,相信你在其他游戏中也能非常好地做出属于自己的外挂。我们提供了金庸打增援20个NPC和网络三国在PK中自动吃药,自动发镖这两个实际的例子,让你上手更容易。我们也会本教程内附上这两个软件以提供给你使用和学习。我们会在教程内讲授给你怎么去破解封包的加密算法,怎么利用我们提供给你工具来伪造和发送封包。本教程除了文字教程外,我们还会提供金庸群侠和三国的外挂程序,另外还提供6个外挂制作工具,以供你使用。希望在以后的游戏中,每一个玩家都能够在游戏中成长起来,不但游戏玩的出色,修改游戏也同样出色,做一个真正的游戏DIY。

要想在修改游戏中做到百战百胜,是需要相当丰富的计算机知识的。有很多计算机高手就是从玩游戏,修改游戏中,逐步对计算机产生浓厚的兴趣,逐步成长起来的。不要在羡慕别人能够做到的,因为别人能够做的你也能够!我相信你们看了本教程后,会对游戏有一个全新的认识,呵呵,因为我是个好老师!(别拿鸡蛋砸我呀,救命啊!#¥%……*)

不过要想从修改游戏中学到知识,增加自己的计算机水平,可不能只是靠修改游戏呀!要知道,修改游戏只是一个验证你对你所了解的某些计算机知识的理解程度的场所,只能给你一些发现问题、解决问题的机会,只能起到帮助你提高学习计算机的兴趣的作用,而决不是学习计算机的捷径。

一:什么叫外挂?

现在的网络游戏多是基于Internet上客户/服务器模式,服务端程序运行在游戏服务器上,游戏的设计者在其中创造一个庞大的游戏空间,各地的玩家可以通过运行客户端程序同时登录到游戏中。简单地说,网络游戏实际上就是由游戏开发商提供一个游戏环境,而玩家们就是在这个环境中相对自由和开放地进行游戏操作。那么既然在网络游戏中有了服务器这个概念,我们以前传统的修改游戏方法就显得无能为力了。记得我们在单机版的游戏中,随心所欲地通过内存搜索来修改角色的各种属性,这在网络游戏中就没有任何用处了。因为我们在网络游戏中所扮演角色的各种属性及各种重要资料都存放在服务器上,在我们自己机器上(客户端)只是显示角色的状态,所以通过修改客户端内存里有关角色的各种属性是不切实际的。那么是否我们就没有办法在网络游戏中达到我们修改的目的?回答是"否"。我们知道Internet客户/服务器模式的通讯一般采用TCP/IP通信协议,数据交换是通过IP数据包的传输来实现的,一般来说我们客户端向服务器发出某些请求,比如移动、战斗等指令都是通过封包的形式和服务器交换数据。那么我们把本地发出消息称为SEND,意思就是发送数据,服务器收到我们SEND的消息后,会按照既定的程序把有关的信息反馈给客户端,比如,移动的坐标,战斗的类型。那么我们把客户端收到服务器发来的有关消息称为RECV。知道了这个道理,接下来我们要做的工作就是分析客户端和服务器之间往来的数据(也就是封包),这样我们就可以提取到对我们有用的数据进行修改,然后模拟服务器发给客户端,或者模拟客户端发送给服务器,这样就可以实现我们修改游戏的目的了。

目前除了修改游戏封包来实现修改游戏的目的,我们也可以修改客户端的有关程序来达到我们的要求。我们知道目前各个服务器的运算能力是有限的,特别在游戏中,游戏服务器要计算游戏中所有玩家的状况几乎是不可能的,所以有一些运算还是要依靠我们客户端来完成,这样又给了我们修改游戏提供了一些便利。比如我们可以通过将客户端程序脱壳来发现一些程序的判断分支,通过跟踪调试我们可以把一些对我们不利的判断去掉,以此来满足我们修改游戏的需求。

在下几个章节中,我们将给大家讲述封包的概念,和修改跟踪客户端的有关知识。大家准备好了吗?

游戏数据格式和存储:

在进行我们的工作之前,我们需要掌握一些关于计算机中储存数据方式的知识和游戏中储存数据的特点。本章节是提供给菜鸟级的玩家看的,如果你是高手就可以跳过了,呵呵!

如果,你想成为无坚不摧的剑客,那么,这些东西就会花掉你一些时间;如果,你只想作个江湖的游客的话,那么这些东西,了解与否无关紧要。是作剑客,还是作游客,你选择吧!

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

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

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

在需要用到字或双字时,计算机用连续的两个字节来组成一个字,连续的两个字组成一个双字。而一个字或双字的地址就是它们的低位字节的地址。

现在我们常用的Windows9x操作系统中,地址是用一个32位的二进制数表示的。而在平时我们用到内存地址时,总是用一个8位的16进制数来表示它。

二进制和十六进制又是怎样一回事呢?

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

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

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

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

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

三怎么用计算机语言去写一个单机代理?

在上一章,我们已经对于代理的原理进行了讲解,大家对于代理已经有了一个初步的认识,现在我教大家如何用计算机语言编写一个自己的代理,我们考虑到简单明了,我们选用VB,因为用VB编写代理只需要很少的代码。

代码如下:

PrivateSubForm_Load()

DaiLi.LocalPort="1234"

Server.RemotePort="1234"

Server.RemoteHost="211.100.20.26"

DaiLi.Listen

EndSub

PrivateSubDaiLi_ConnectionRequest(ByValrequestIDAsLong)

Server.Connect

Client.AcceptrequestID

EndSub

PrivateSubClient_DataArrival(ByValbytesTotalAsLong)

DimClientToServer()AsByte

Client.GetDataClientToServer

Server.SendDataClientToServer

EndSub

PrivateSubServer_DataArrival(ByValbytesTotalAsLong)

DimServerToClient()AsByte

Server.GetDataServerToClient

Client.SendDataServerToClient

EndSub

Form_Load()这个过程表示在程序启动的时候要做的一些初始化操作。

DaiLi.LocalPort="1234"设定监听端口

Server.RemotePort="1234"设定象游戏服务器连接的端口(和监听端口是相同的)

Server.RemoteHost="211.100.20.26"设定游戏服务器的IP地址

DaiLi.Listen监听本地的连接请求

这时你只要将游戏的服务器列表的IP改成127.0.0.1,那么游戏的客户端程序就会来连接我们的代理,我们的代理会调用如下的过程:

PrivateSubDaiLi_ConnectionRequest(ByValrequestIDAsLong)

Server.Connect代理客户端向服务器连接

Client.AcceptrequestID接受客户端的连接请求

EndSub

当客户端向服务器发送数据时,就会调用下边的过程

PrivateSubClient_DataArrival(ByValbytesTotalAsLong)

DimClientToServer()AsByte变量定义,请求了一个用于存放数据的空间

Client.GetDataClientToServer客户端的连接接收这些数据

在这里我们可以添加自己的代码,对封包进行修改,然后再发向服务器。

Server.SendDataClientToServer服务器的连接把这些数据发向服务器

EndSub

当服务器发送数据给客户端时,会调用下边的过程

PrivateSubServer_DataArrival(ByValbytesTotalAsLong)

DimServerToClient()AsByte变量定义,请求了一个用于存放数据的空间

Server.GetDataServerToClient服务器连接接收数据

在这里我们可以添加自己的代码,对封包进行修改,然后再发给客户端。

Client.SendDataServerToClient

EndSub

用其他语言编写基本的原理也是差不多的,不过可能稍微要麻烦一些,因为VB本身有一个MSWINSCK.OCX控件,这个控件封装了WINDOWS的网络操作,而且接口很简单,推荐大家使用。

四如果单机代理被封,我们怎么利用底层的技术来接管游戏的发包?

在WINDOWS系统中,网络通讯的任务是由一个叫WSOCK32.DLL(在SYSTEM目录下)来完成的,每当游戏被运行时,他都会自动的去调用这个动态连接库,因为在WINDOWS系统中对于文件的搜索顺序是程序目录>系统目录>路径中设置的目录,所以我们就有机会替换掉系统的WSOCK32.DLL使的游戏调用我们的WSOCK32.DLL,这样我们就有了对于游戏封包绝对的控制权,有人问:"我们应该怎么做呢?",我们只要自己编写一个WSOCK32.DLL放到游戏的目录下,就OK了,当然让我们完全自己去编写一个WSOCK32.DLL是不太现实的,因为本身网络通讯要处理很多更底层的东西,比如说从网卡读取BIT流,所以我们选择由我们的WSOCK32.DLL去调用系统的WSOCK32.DLL来完成这个功能。

WSOCK32.DLL有很多的输出函数,函数如下:

__WSAFDIsSet

accept

AcceptEx

Arecv

Asend

bind

closesocket

closesockinfo

connect

dn_expand

EnumProtocolsA

EnumProtocolsW

GetAcceptExSockaddrs

GetAddressByNameA

GetAddressByNameW

gethostbyaddr

gethostbyname

gethostname

GetNameByTypeA

GetNameByTypeW

getnetbyname

getpeername

getprotobyname

getprotobynumber

getservbyname

getservbyport

GetServiceA

GetServiceW

getsockname

getsockopt

GetTypeByNameA

GetTypeByNameW

htonl

htons

inet_addr

inet_network

inet_ntoa

ioctlsocket

listen

MigrateWinsockConfiguration

NPLoadNameSpaces

NSPStartup

ntohl

ntohs

rcmd

recv

recvfrom

rexec

rresvport

s_perror

select

send

sendto

sethostname

SetServiceA

SetServiceW

setsockopt

shutdown

socket

TransmitFile

WEP

WSAAsyncGetHostByAddr

WSAAsyncGetHostByName

WSAAsyncGetProtoByName

WSAAsyncGetProtoByNumber

WSAAsyncGetServByName

WSAAsyncGetServByPort

WSAAsyncSelect

WSACancelAsyncRequest

WSACancelBlockingCall

WSACleanup

WSAGetLastError

WSAIsBlocking

WSApSetPostRoutine

WSARecvEx

WSASetBlockingHook

WSASetLastError

WSAStartup

WSAUnhookBlockingHook

WsControl

WSHEnumProtocols

在这里,不是所有的函数都要修改,因为我们只关心发送和接收的封包,所以我们只要修改send 和recv两个函数,前者是发送封包的后者是接收封包的,我们在这两个函数的处理中加入我们自己的代码,来完成封包的辨认,修改以及转发等功能。[/sell]

自:Club.ChinaRen.com

相关推荐