以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 灌水天堂 』 (http://bbs.xml.org.cn/list.asp?boardid=26) ---- 游戏外挂制作浅析 (http://bbs.xml.org.cn/dispbbs.asp?boardid=26&rootid=&id=13464) |
-- 作者:卷积内核 -- 发布时间:1/11/2005 3:48:00 PM -- 游戏外挂制作浅析 个人的一点业余乱弹,见笑了. 首先,让我们来看一下网络游戏的工作原理: 网络游戏是这样工作的: 1.由服务器记录保存所有用户资料,所有信息的修改都是服务器完成的 2.服务器接受客户机的请求发送必要的信息给客户机,以使玩家正常游戏 3.服务器接收客户机的信息反馈,并根据反馈信息,对游戏帐号作相应修改 从以上简单的介绍,我们可以看出,网络游戏可以认为是这样工作的: 由客户机电脑操作服务器器电脑,对游戏帐号信息进行修改! 要操纵本地的电脑是很容易的,因此,要显示所有已经从服务器得到的信息是完全可能的,这就可以做到以下功能: 1、游戏没有黑夜,因为地图在本地,全部显示是完全可以做到的! 2.自动加血是没有问题的,因为血的多少也已经发到本地电脑,完全可以用外挂检测到,并在必要时加血,加血本身只是一个鼠标动作,完全可以交给外挂去做。类似的,自动加魔法,自动加气,自动回城、自动打怪、自动采矿卖钱然后再自动回去采、自动练级等等都可以做到! 3.卖东西的过程很经典:你卖东西时,实际就是告诉服务器电脑,你已经将一个东西卖了,真实过程是:你向服务器发送了一个具体物品的封包,如果这个封包正确,服务器就向你的游戏帐号加一定数量的钱,然后再反馈给你一些信息,假如封包不正确,自然就卖不到钱,因此,我们可以利用外挂不断向服务器发送封包,只要正确,那么服务器就认为我们再卖东西,即使我们什么都没有卖,服务器也不断给我们钱,这就是所谓的刷钱。如果封包没有加密,那么这个功能是非常容易实现的,如果封包加密,其实同样可以做到,只是要解密而已,稍微复杂些而已!类似的,就可以实现买东西用假钱(不用钱)。攻击、防御增加,原理都是类似的! 以上的讲解,大家应该明白,其实外挂是每个游戏都可能出现的,只要有人想做,那么就没有做不出外挂的游戏!除非这个游戏不能玩!! |
-- 作者:卷积内核 -- 发布时间:1/11/2005 3:49:00 PM -- 外挂是什么? 现在的网络游戏多是基于Internet上客户/服务器模式,服务端程序运行在游戏服务器上,游戏的设计者在其中创造一个庞大的游戏空间,各地的玩家可以通过运行客户端程序同时登录到游戏中。简单地说,网络游戏实际上就是由游戏开发商提供一个游戏环境,而玩家们就是在这个环境中相对自由和开放地进行游戏操作。那么既然在网络游戏中有了服务器这个概念,我们以前传统的修改游戏方法就显得无能为力了。记得我们在单机版的游戏中,随心所欲地通过内存搜索来修改角色的各种属性,这在网络游戏中就没有任何用处了。因为我们在网络游戏中所扮演角色的各种属性及各种重要资料都存放在服务器上,在我们自己机器上(客户端)只是显示角色的状态,所以通过修改客户端内存里有关角色的各种属性是不切实际的。那么是否我们就没有办法在网络游戏中达到我们修改的目的?回答是"否"。我们知道Internet客户/服务器模式的通讯一般采用TCP/IP通信协议,数据交换是通过IP数据包的传输来实现的,一般来说我们客户端向服务器发出某些请求,比如移动、战斗等指令都是通过封包的形式和服务器交换数据。那么我们把本地发出消息称为SEND,意思就是发送数据,服务器收到我们SEND的消息后,会按照既定的程序把有关的信息反馈给客户端,比如,移动的坐标,战斗的类型。那么我们把客户端收到服务器发来的有关消息称为RECV。知道了这个道理,接下来我们要做的工作就是分析客户端和服务器之间往来的数据(也就是封包),这样我们就可以提取到对我们有用的数据进行修改,然后模拟服务器发给客户端,或者模拟客户端发送给服务器,这样就可以实现我们修改游戏的目的了。 目前除了修改游戏封包来实现修改游戏的目的,我们也可以修改客户端的有关程序来达到我们的要求。我们知道目前各个服务器的运算能力是有限的,特别在游戏中,游戏服务器要计算游戏中所有玩家的状况几乎是不可能的,所以有一些运算还是要依靠我们客户端来完成,这样又给了我们修改游戏提供了一些便利。比如我们可以通过将客户端程序脱壳来发现一些程序的判断分支,通过跟踪调试我们可以把一些对我们不利的判断去掉,以此来满足我们修改游戏的需求。 |
-- 作者:卷积内核 -- 发布时间:1/11/2005 3:52:00 PM -- 你可以用WPE来分析封包. 一个封包,包含有如下元素,也就是组成部分吧! 1.需要传输的数据(主要的和最重要的部分就是这个,外挂修改的也是这部分) 2.序列号(每个封包必须有自己的序列号,以便到了接收端后可以按照序列号重新组装) 3.IP地址,一般都有这一部分,通过网络解析才知道封包从那里来,到那里去! 当然封包的内容不止这些,但是,我们了解这些就够了。 注意:在传输中,所有数据都是16位或者32位的,所以截获的封包看起来总是怪怪的! 面给一个封包的基本格式,给大家看看(下面是基本封包格式,如果您可以背下来他们的格式,这对您修改游戏是非常有用的!强烈建议您看一些关于封包格式的文章,您就可以很容易地把封包看清楚,很快知道哪个才是真正的数据): Source Port (16) | Destination Port (16) Sequence Number (32) Acknowledgment Number (32) Data Offset(4) | Reserved (6)|UGR|ACK|PSH|RST|SYN|FIN|Window(16) Checksum (16) | Urgent Pointer (16) Options (0 or more 32 bit words + padding) DATA ... 稍微注意以下,您可以看到,每行的长度都是32字节! |
-- 作者:卷积内核 -- 发布时间:1/11/2005 3:52:00 PM -- TCP/IP协议简介: TCP(transport control protocol)中文意思就是:传输控制协议。 TCP协议工作原理 首先是对需要传输的内容打包,包的大小有其自己处理方法,这个我们不用担心,我们最关心的,就是这个包是什么东西,这个包,就是封包。大家一定在很多地方听说过封包,以为是什么神秘莫测的东西,实际上,Intelnet上的电脑每天都在处理封包,TCP协议就是将这些包一个一个地编上号,然后按照一定的次序向通过IP协议已经建立了连接的另一太电脑把封包发送过去,另一台电脑收到这些有编号的封包后,按照编号把封包组装起来,就得到了需要的文件了!这里大家看到了,TCP协议和IP协议是不同的协议,但是他们协同工作,所以大多数场合下,直接称为TCP/IP协议。 |
-- 作者:卷积内核 -- 发布时间:1/11/2005 3:53:00 PM -- 通过前面的减少,我们已经知道,TCP协议和IP协议不是相同的协议,IP协议是属于网络层的协议,负责网络连接,主要是寻找地址用,建立连接使用,我们完全可以不管,我们最关心的是TCP协议! 为了说明封包的重要性,这里介绍一下交换技术,交换技术,从这里你可以明白,所有网络游戏都一定回使用封包,交换技术有3种方式:电路交换、分组交换、混合交换。电路交换:是建立连接前先建立一个完整的电路连接,特点是传输速度快,稳定性能好;缺点是:电路有限,能同时提供的服务小,除国家某些基于军事目的的网络可能是这种网络外,我们一般的网络是不会使用这种连接的。分组交换:是报文交换,在接收者和发送者之间不建立实际通路,当发送方发送时,先保存在一个交换局内,然后由交换局传送到下一个交换局,一步一步,知道文件被传送到目的地,这就好比是邮局,我们有封信要传送,我们是发送者,但是我们不直接发到接收者,而是交给邮局,邮局又交给下一个邮局,知道信件到达接收者手里,原理一样,但是有所不同的是:为了防止造成交换局数据堵塞,他们严格限制文件单位大小,这样,一个小包一个小包地发送,每个包都写好了编号、来源、目的地,这样,这些小包就可以一站一站地走向目的地,然后按照编号组装起来,就形成了完整的文件,这里的小包就是我们经常提到的:封包!,这是为了实现良好交换,并满足更多的人同时使用同一条路线的需要而设计的,我们的Intelnet传送文件的一中常见方式,这也就决定了,所有经过网络的文件都是以封包的形式传送的,游戏也概没能外。所以,所有游戏都是以封包形式在服务器端和客户端传送数据的,因此,封包是非常重要的,如果能够对封包进行操作,就可以完成对游戏的修改!功能强大的外挂,就是通过修改封包来完成对游戏的修改的!如果您要学习外挂制作,建议首先从WPE学起,它既简单又容易学习,而且功能很强大,不需要掌握任何编程语言,是学习制作外挂的捷径! |
-- 作者:卷积内核 -- 发布时间:1/11/2005 3:55:00 PM -- 加密解密 背包加密是一中相当高级的加密方式,不容易破解,而且还原也相对容易,因此采用这种加密方式加密游戏数据也是非常好的,只要知道背包,就可以轻易算出来,所以在游戏里面采用这种加密方式加密对游戏的影响也不是很大,不会给服务器带来太大的负担,而且加密是非常安全的,对于一些重要的数据采用这种方式加密是非常可靠的,说了那么多,你也许会问:“什么是背包加密方式”,好下面给大家说明。 背包分两种,加法背包和乘法背包!想讲加法背包! 我们知道:1<2,1+2<4,1+2+4<8,1+2+4+8<16,……,那么如果我们选择这样一些数,这些数从小到大排列,如果前面所有的数加起来的值总小于后面的数,那么这些数就可以构成一个背包,我们给一个这个背包里面的某些数的和,这个数就是被加密的数,由这个背包组成这个数只有一种组合方式,这个方式就是秘密了,例如给大家一个封包(2,3,6,12,24,48),由这个背包里的某些数构成的数:86,你知道86怎么来的吗?当然,你看着背包里面的内容,可以知道是由2+12+24+48得到的,如果你没有这个背包,而是直接得到这个86,你知道组成这个86的最小的数是多少吗?你无法知道,因为加起来等于86的数非常多:85+1=86,82+2=86等等,你是无法知道的,所以,背包加密非常难破。 那么游戏里面如何利用这个加密呢?可以给大家一个例子。 如果游戏里面,用户名和密码只能有字母和数字组成,那么总共就那么36个元素,我们利用一个包含36个元素的背包,背包的一个元素对应一个字母或者数字,当玩家设好用户名后,我们把这个用户名翻译成背包里面的元素,然后把这些用户转化而来的数字加起来,得到一个数,这个数就是用户名,你得到这个数,你知道用户名吗?也许大家还没明白我说什么,我把例子更具体一点,你也许就明白了! 有个密码是:511,这个密码是经过加法背包加密的,如果你没有背包,你知道密码吗?不知道吧,呵呵! 如果我告诉你背包是:(1,2,4,8,16,32,64,128,256),也许你对密码了解多也些了! 如果我告诉你,这个是加法背包,而且有如下对应关系:1对应a,2对应b,4对应c,8对应d,16对应e,32对应f,64——>g,128---->h,256---->i,那么你也许知道密码就是:abcdefghi,怎么样,从511到这个密码,是不是很难想到呢?也许你会说,如果密码不是这个顺序呢?当然,这个完全是可能的,但是我们这里为了简单就没有考虑这个。 这么复杂的加密,怎么解密?有如下两中破解方法: 1.利用孤立点破解;2.利用背包破解。 所谓孤立点,还是以上面的背包为例子,我们可以把密码设为a,看看得到了什么密码?1,如果我们把密码设为b,得到的密码为2,同理,可以把背包里面的所有元素都利用孤立点的方法全部枚举出来,这样我们就把背包弄到手了,对下面的破解就不成问题了,是不是很简单?其实在加密的时候,也许它们回利用异或运算先加密一下,再利用背包加密,这样更难破,孤立点方法非常有效,但是不是万能的,要结合前面的方法配合使用! 利用背包,这个就简单了,想一想,要加密也的有背包才能完成加密啊,要解密也要背包啊,呵呵,这就是说,不管是游戏的用户端,还是游戏的服务器端,都会有该背包的,找到该背包不是就解决问题了吗?怎么找?参考其他书籍,本书无法容纳那么多的内容!特别注意游戏编程,知道是怎么做的就知道东西在哪儿了! 讲完加法背包,下面讲乘法背包! |
-- 作者:卷积内核 -- 发布时间:1/11/2005 3:56:00 PM -- 乘法背包 有兴趣的继续学习吧,很多东东的. |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
62.500ms |