封包挂入门——第一章:什么是封包
(2013-01-05 05:11:22)
标签:
封包挂网络游戏游戏修改外挂编写入门基础教程杂谈 |
一:什么叫脚本?
脚本也不完全局限于网游,各种单机或者局域网的游戏都可以开发对应的脚本,也都有人开发相应的脚本,比如红警,星际,魔兽的修改器,小游戏有改愤怒的小鸟,改仙剑奇侠传的,改植物大战僵尸的,这些东西想必大家都不陌生吧!更改单机的工具,9X年就有了,什么金山游侠,GameMaster等等,我上大学那会儿就特喜欢更改单机游戏,玩仙剑98,不想让林月如死,在林月如死后再让她复活,修改李逍遥的和赵灵儿,林月如的攻防血,其乐无穷!
客户端-服务器的网游模式的通讯一般采用TCP/IP通信协议,数据交换是通过IP数据包的传输来实现的,一般来说客户端向服务器发出某些请求,比如移动、战斗等指令都是通过封包的形式和服务器交换数据。那么我们把本地发出消息称为SEND,意思就是发送数据,服务器收到我们SEND的消息后,会按照既定的程序把有关的信息反馈给客户端,比如,移动的坐标,战斗的类型。那么我们把客户端收到服务器发来的有关消息称为RECV。知道了这个道理,接下来我们要做的工作就是分析客户端和服务器之间往来的数据(也就是封包),这样我们就可以提取到对我们有用的数据进行修改,然后模拟服务器发给客户端,或者模拟客户端发送给服务器,这样就可以实现我们修改游戏的目的了。
目前除了修改游戏封包来实现修改游戏的目的,我们也可以修改客户端的有关程序来达到我们的要求。因为硬件能力的限制,目前各个服务器的运算能力是有限的,特别在游戏中,游戏服务器要计算游戏中所有玩家的状况几乎是不可能的,所以有一些运算还是要依靠我们客户端来完成,这样又给了我们修改游戏提供了一些便利。比如我们可以通过将客户端程序脱壳来发现一些程序的判断分支,通过跟踪调试我们可以把一些对我们不利的判断去掉,以此来满足我们修改游戏的需求。 在后续的帖子中,我会陆续将给大家讲述封包的概念和修改跟踪客户端的有关知识,请拭目以待!
目前除了修改游戏封包来实现修改游戏的目的,我们也可以修改客户端的有关程序来达到我们的要求。因为硬件能力的限制,目前各个服务器的运算能力是有限的,特别在游戏中,游戏服务器要计算游戏中所有玩家的状况几乎是不可能的,所以有一些运算还是要依靠我们客户端来完成,这样又给了我们修改游戏提供了一些便利。比如我们可以通过将客户端程序脱壳来发现一些程序的判断分支,通过跟踪调试我们可以把一些对我们不利的判断去掉,以此来满足我们修改游戏的需求。 在后续的帖子中,我会陆续将给大家讲述封包的概念和修改跟踪客户端的有关知识,请拭目以待!
基本概念——游戏数据格式和存储:
在进行我们的工作之前,我们需要掌握一些关于计算机中储存数据方式的知识和游戏中储存数据的特点。这里是提供给菜鸟级的玩家看的,如果你是高手就可以跳过了,如果,你想成为无坚不摧的杀手,那么,这些东西就会花掉你一些时间;如果,你只想做看客的话,那么这些东西,了解与否无关紧要。是作杀手,还是作看客,你选择吧!
现在我们开始!首先,你要知道游戏中储存数据的几种格式,这几种格式是:字节(BYTE)、字(WORD)和双字(DOUBLE WORD),或者说是8位、16位和32位储存方式。字节也就是8位方式能储存0~255的数字;字或说是16位储存方式能储存0~65535的数;双字即32位方式能储存0~4294967295的数。
为何要了解这些知识呢?在游戏中各种参数的最大值是不同的,有些可能100左右就够了,比如,《大唐无双2》中的角色的等级、随机遇敌个数等等。而有些却需要大于255甚至大于65535,如《大唐无双2》中角色的金钱值可达到数百万。所以,在游戏中各种不同的数据的类型是不一样的。在我们修改游戏时需要寻找准备修改的数据的封包,在这种时候,正确判断数据的类型是迅速找到正确地址的重要条件,这一点和找内存数据有雷同,主要是为了在海量的数据中,缩小范围,归类查找。
在计算机中数据以字节为基本的储存单位,每个字节被赋予一个编号,以确定各自的位置。这个编号我们就称为地址。在需要用到字或双字时,计算机用连续的两个字节来组成一个字,连续的两个字组成一个双字。而一个字或双字的地址就是它们的低位字节的地址。现在xp操作系统中,地址是用一个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进制的换算(windows-开始-附件-计算器)。
最后需要告知大家的是,在计算机中数据的储存方式一般是低位数储存在低位字节,高位数储存在高位字节,比如,十进制数50332转换为16进制的数为C49C,但在计算机中这个数被存为9CC4。
看了以上内容大家对数据的存贮和数据的对应关系都了解了吗?接下来我要告诉大家在游戏中,封包到底是怎么一回事,来!抑制住兴奋吧,你会发现这些东西居然如此的通俗易懂!
二:什么是封包?
怎么截获一个游戏的封包?怎么去检查游戏服务器的ip地址和端口号? Internet用户使用的各种信息服务,其通讯的信息最终均可以归结为以IP包为单位的信息传送,IP包除了包括要传送的数据信息外,还包含有信息要发送到的目的IP地址、信息发送的源IP地址、以及一些相关的控制信息。当一台路由器收到一个IP数据包时,它将根据数据包中的目的IP地址项查找路由表,根据查找的结果将此IP数据包送往对应端口。下一台IP路由器收到此数据包后继续转发,直至发到目的地。路由器之间可以通过路由协议来进行路由信息的交换,从而更新路由表,那么我们所关心的内容只是IP包中的数据信息,我们可以使用许多监听网络的工具来截获客户端与服务器之间的交换数据。并且把这些数据按照你的意愿去修改。
在进行我们的工作之前,我们需要掌握一些关于计算机中储存数据方式的知识和游戏中储存数据的特点。这里是提供给菜鸟级的玩家看的,如果你是高手就可以跳过了,如果,你想成为无坚不摧的杀手,那么,这些东西就会花掉你一些时间;如果,你只想做看客的话,那么这些东西,了解与否无关紧要。是作杀手,还是作看客,你选择吧!
现在我们开始!首先,你要知道游戏中储存数据的几种格式,这几种格式是:字节(BYTE)、字(WORD)和双字(DOUBLE
为何要了解这些知识呢?在游戏中各种参数的最大值是不同的,有些可能100左右就够了,比如,《大唐无双2》中的角色的等级、随机遇敌个数等等。而有些却需要大于255甚至大于65535,如《大唐无双2》中角色的金钱值可达到数百万。所以,在游戏中各种不同的数据的类型是不一样的。在我们修改游戏时需要寻找准备修改的数据的封包,在这种时候,正确判断数据的类型是迅速找到正确地址的重要条件,这一点和找内存数据有雷同,主要是为了在海量的数据中,缩小范围,归类查找。
在计算机中数据以字节为基本的储存单位,每个字节被赋予一个编号,以确定各自的位置。这个编号我们就称为地址。在需要用到字或双字时,计算机用连续的两个字节来组成一个字,连续的两个字组成一个双字。而一个字或双字的地址就是它们的低位字节的地址。现在xp操作系统中,地址是用一个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进制的换算(windows-开始-附件-计算器)。
最后需要告知大家的是,在计算机中数据的储存方式一般是低位数储存在低位字节,高位数储存在高位字节,比如,十进制数50332转换为16进制的数为C49C,但在计算机中这个数被存为9CC4。
看了以上内容大家对数据的存贮和数据的对应关系都了解了吗?接下来我要告诉大家在游戏中,封包到底是怎么一回事,来!抑制住兴奋吧,你会发现这些东西居然如此的通俗易懂!
二:什么是封包?
怎么截获一个游戏的封包?怎么去检查游戏服务器的ip地址和端口号? Internet用户使用的各种信息服务,其通讯的信息最终均可以归结为以IP包为单位的信息传送,IP包除了包括要传送的数据信息外,还包含有信息要发送到的目的IP地址、信息发送的源IP地址、以及一些相关的控制信息。当一台路由器收到一个IP数据包时,它将根据数据包中的目的IP地址项查找路由表,根据查找的结果将此IP数据包送往对应端口。下一台IP路由器收到此数据包后继续转发,直至发到目的地。路由器之间可以通过路由协议来进行路由信息的交换,从而更新路由表,那么我们所关心的内容只是IP包中的数据信息,我们可以使用许多监听网络的工具来截获客户端与服务器之间的交换数据。并且把这些数据按照你的意愿去修改。
前一篇:我的收徒标准