【干货】如何开发一款游戏修改器?15:明文包结构

文摘   游戏   2025-01-08 00:00   广西  
本期我们的主要任务是探讨铭文包的结构。我们先简要回顾上期学到的知识点。然后,通过技能课程,我们根据铭文包的特征,深入了解了其结构。一般来说,铭文包的结构可以分为三层,我们通过技能扣进一步查找,并找到了主包的库。
这个库只有两个参数,我们已经在之前进行了测试。其中,第一个参数是缓冲区的地址,也就是包内容的地址;第二个参数是包的大小。对于较大的包,通常会使用结构来表示。本期,我们的重点是研究这种结构。当然,有些结构可能比较简短,比如背包中装备的使用。但具体细节可能需要进一步测试才能确定。
我们试图理解这些结构的含义,比如背包中装备的使用。通常,使用装备会导致一个十六进制的值,表示背包中装备的下标。然后,偏移量加二,表示背包中装备的下标。然而,这里的BD值还不清楚,可能是物品的 ID,但通常物品的 ID 长度应该是四个字节。因此,我们需要更详细地分析这些数据。
本期教程,我们将以一个大号账号登录游戏,从两个地方来分析这些结构,看能否通过我们的分析和测试确定它们的功能。首先,我们尝试连接到服务器,但遇到了一些问题,可能是因为重启导致无法连接。我们需要重新启动服务器程序并尝试连接。最终,我们成功连接到了服务器,并选择了一个大号进入游戏。由于大号可能拥有更多的物品,因此测试起来会更加方便。
看看这个宠物能不能取消显示。如果宠物在这里一直显示的话,感觉有点烦人。我们怎么能去掉这个功能呢?哪个是宠物的?暂时就这样分析吧。关于这个宠物,我们在分析的时候录制的教程会特别庞大,因为它的画面在不停地变化。之前,VIVO来看了一下,你们知道怎么把宠物去掉吗?我看看。他是属于法宝吗?还是属于什么?我们看一下。它是一个宠物,在天上飞来飞去,好像是一只龙。
这样我们的教程会非常庞大。我们看一下人物属性里面,能不能把这个宠物去掉。这是一个什么装备呀?把这些装备取下来看一下。哦,应该是这两个东西。取下来之后就没有了。不然老是显示这个画面的话,到时候教程会非常庞大。那可能就是一两个G都有可能。这个时候取下来。取下来之后呢,那么我们接下来看怎么分析它啊。我们接下来呢,找到工具里面的插debug,然后附加到游戏。因为这是一个大号账号,所以我们可以分析的,测试的道具也特别多。我们先来测试一下背包里面的。
从这里开始分析一下。那么我们上一次分析的时候,前边这个结构等会我们把它恢复出来。那么这个结构的话,目前我们整理一下它是怎么样的。因为这个是我们的包的地址,缓冲区地址随便怎么叫都可以,或者是包内容的地址也可以啊。这个名字很多啊。我们这里就把它叫做包地址,就分包的地址或者是名人包包地址。那么铭文包地址呢,再加零加这个地方了。word表示两个字节。那么这里的幺幺,他表示目前的话,我们可以暂时认为它是使用背包的装备。这个是两个字节。备注一下两个字节好。然后因为这里占了两字节,那么下一个属性的话,他肯定就要加上前边的这两个字节了是吧。那么这个加二的这一个字节,我们上期教程的分析呢,它是背包的一个下标啊。



这个是背包的下标零到多少啊。这个是确确认了。那么再加上哈从加热那里加上前边的那一个字节,那么得到加三。这里他还有一个字节啊。这个字节呢,那么我们之前的测试的时候出现了零币,零币这些数值。但这些数字是什么作用,我们暂时不知道。那么这个包的大小啊,它是四字节。四字节啊。嗯这个四字节呢,可能表示的是使用我们背包里面的装备,但是我们这几个有更多的道具。我们可以来测试一下它究竟是什么。
在这个地方下一个段,因为背包里面的物品的话,他走的地方也不止这一个地方,也不止这一个地方好。我们先使用一下背包,里面的这些物品。展开一下背包,展开背包的时候,它也会断下。我们把这些取消掉,把这一段点取消掉。背包我们展开之后,这里有一些宠物。这个背包的格子,目前他有255个。你看255的话,可能就是他最大的一个上限背包的。
让我们看看有哪些装备。这是什么飞行精华?我找一下,这是什么靴子。点一下右脚,他在这个地方断了一下,是不是在73AE70这个地方?这是昨天的,对,就是这个地方。这是我们用背包里面的装备。那么我们看一下现在它的包的内容。我们转到ESI,这是包的地址。我们用字节来看一下,然后你看一下,他前两个字节是幺幺,然后后边的话是23和03,那么也就是说现在的话他CL的话,C罗这个变化。那么我们来看ESI加二是多少。ESI加二来里边的话,读出来是DA这一个字节啊。也在加ESI看有没有变化。
ESI加二,33这一次写的现在是23。哦,这个是23加三的按键好。我们走错了,在内存这13+3,我们看他的低位,这里是3。这里是3。看看是不是这样啊。重新来看一下,用字节类型转到ESI这个地方,我们重新看一下16进制啊,我们这里用自己类型来看一下。他一共就四个字节吧,我们把这四个字节拷贝出来,用字节类型来分析一下。那么目前的话,前边这两个字节,我们要把它给分开。那么分开的话,这个包就是这样的一个四字节。那么这四个字节,第一个是背包使用的装备,那个指令,这个是固定的。只要使用背包的某些装备,它这个幺幺这个是固定的。这个是字节类型的,如果我们转换成word的类型呢,它实际上是多少啊?这个高位要放在前面,但实际上转换成word的类型就是0011。这个是001。他是这样的。
这下边的这两个都是一个字节的。这个好像变化了。这个是乘3加3,这个地方是3了。那么之前出现过这个B和D,那么这个23的话应该就是35是吧。下边应该是第35,36个。第36个可能是第36个格子,我们来数一下。我们先让他跑起来,看一下是不是第36个格子。刚才我们使用的那个呃,我们数一下。你看从但是呢我们前面应该还有几个,看起来的话,差不多应该是在36个。但是现在服务器断开,重新连一下。好,那么这些发包呢我们暂时也把它去掉。他应该是登录进来进入游戏初始化的某些发包。我们再次把背包打开,我们数一下,刚才是这一个是吧,这个的话12345,然后这里是656个六五就是33,132333435恰好是36是吧。那么说明我们再次确定了啊,这一个就是背包是吧,确定就是背包的下标啊。
刚才我们是他的那个子弹是23,23的话,0X23是吧,这个对应的话就是十进制的35,那么35因为它的格子的下标是从零开始的,所以说刚好是第36个啊,这个确定了。那么前面这个就是固定的。我们现在只需要知道他这最后这个值,它代表的就是究竟是什么啊,这个这个三它又代表的是什么,这个BD它代表的是什么,需要知道这个东西,这个东西的话目前的话还看不太出来,我们再使用两个物品,看一下这个能不能使用点右键使用一下,这个时候把这个消重新点右键使用一下,那么使用的时候也是跑到这里了,我们转到E3I看一下前面四个字节,现在的四个字节是这样的,拷贝拷贝出来之后,先让他跑起来。
现在的四个字节是这样的。同样的,前面的0011我们不用去看它。这个一个字节代表的是背包的那个格子。最后这个零又是什么呢?现在它又变成零了是吧?就是加三这个偏移这里,前面这个是零,偏移吧?这里是零二偏移那里,这里呢加零三偏移那里。那么现在这个加零三这个偏移的话,它就变成零了是吧?都出现过的这个零三,还有前面的B和D啊,他都出现过的。但是我们现在依然不知道最后这个偏移,它表示的是什么属性。我们使用同一个物品,我们再来试一下,看它相应的那个加三这个偏移的值会不会变。
我们也可以在这个地方下段也是可以的。这个地方下段之后的话,我们直接看这个CL啊,C2的子呢就是加三的那个值。我们看一下刚才的那个物品,把它给取下来。取下来的话他也会经过这里,我们暂时不管。我们先看一下,把它放上去的时候,点右键。这个时候C罗是多少?C罗呢依然是01240。这个时候煮好的包再来看一下它是没有变化的啊,110啊。这前面这两个字节表示的0011是吧,表示的是使用我们背包里面的装备。这个2日呢是下标确定了,他是2日的话是十进制的三四第35个。这里是固定的是零,那么这个零它是从什么地方来的呢?如果我们在这里,如果是猜测不到这个CL值的一个意义的话,那么我们可以用逆向的方法向前跟去找一下这个CL这个词的来源。
那么追到前边,你看它的一个来源的话,这个呢是我们的下标一个字节的AL值的一个来源,这是来源于上层的,这个我们之前也讲过啊,一般来说USP加八的话可能是参数一的概率比较大好,那么这个可能是参数二啊,参数二呢就是我们说的那个CL的那个值的来源。我们就要去找一下这个CL好。我们看一下,如果他是参数的话,你看刚好我这里能够对应上是吧,二二和零,那也就是说你看这里从返回到的话,再一次证实了,再一次证实了什么呢?这个二二就是这个下标嘛,就是上层的这个扩的第一个参数,然后这个零呢就是第二个参数。我们返回到这里去跟一下,跟一下,这就是C的来源。
好我们在这个就是我们的下标啊,那么也就是说实际上这个上层扩的话我们也是可以用来使用我们背包里面的装备了,就调用这个库是吧,传一个C罗,传一个下标进去就可以了。但这个CO它究竟表示的是一个什么东西呢?我们还得往前去跟跟这个什么跟这个一比X,而这个EBBX呢它来自于ESP加一四。ESP加一四。ESP加一四的话这个我们就要根据堆栈的一个平衡来计算了,在这个地方我们要首先要去看一下这个库里面它有个return0C说明了他这里平了三个push是吧,这三个push呢被这个recount insi给平掉了。刚好零四是12是吧,这三个是平调的,我们就pass掉。
不用管不用管。那么这里呢他有三个push也是三个push的话,它相当于是原有的EST什么减了C是吧,那么这个ESP已检测的话就是多少人就是ESP加八了,那么ESP加八的话,好像它又是上层上一个啊,这个库的参数啊就是这个703F60,但是不是我们在这个地方下个断点啊,可能我们要追的这个C罗又是上层的参数,当然是零的时候我们还不是很好区分啊,可能是参数打个问号,先让他跑起来,我们看一下,这个时候还没有断开,没有断开的话,我们看一下再把它取下来。
我们继续往前走。只有继续往前走了,我们才能比较容易地获得他的一个具体的值的来源,才能够进一步的分析这个值究竟有什么作用。好,再往前走。目前没有看到他是从什么地方来的啊,一直向前,一直向前的话,这里有个EX加二零,这里有个不知道是不是从这个机制偏移来的。但是呢,他不止一个地方。我们再来看一下。从这里我们给他下个断点。EDI的话,你看他这里有个跳转,有可能是从上边很远的地方跳过来的啊。
我们跳过了一个地方之后的话,那么这里呢也是一个可能被复制的地方,加一个断点。还有可能就是更前面的。你看这里他也有可能这里就是直接复制为零,还有一个地方就是这个地方啊。当然现在的这个数值呢来源呢是三。我们跟踪的时候比较明显一点。我们先让他跑起来。跑起来之后我们看一下,啊,这个时候他已经好像穿上去了。我们重新打开一下这个背包,重新打开这个人物角色装备,显示一下。这里他也会发包,显示装备之后,看一下,好像点不了,可能是掉线了。点不了的话,另外点一个,点一个看一下。这个的话,这里是36,加了四个五个是吧,是41。
41的话看一下它的下标是多少。先从这里来看一下有没有它的下标出现。那么目前我们按F8看一下,EDI取出来的值是多少?这个值显然不是的,因为那个值是很小的是吧。这个地方应该不是我们向后看啊。这里呢是不值为零,可能也不大。那么现在EDI我们看一下哎,EDI确实是为零的,这个是500的话,为零的话就是这里,但是这里的话他只是一个初值,另外他应该还有一个值的来源。你看这里有一个什么点个INC啊,有一个INC,INC是什么呢,是一个字加一个指令,那么从这个呢还有一个比较比较EDI呢是否大于三九啊,然后从这里呢它有一个获得快捷栏对象。
这个EDA呢它是什么,是是快捷栏对象的一个啊,那个容器的下标。我们就是快捷栏有一个数组嘛,是不是快捷栏对象对的下标。那么从这前边我们能够看出来的,你看这里他应该在某个地方可能有一个循环,这里他从上面给跳过了。这样啊,你看这里他向前跳向停跳来说明这里是一个什么形成一个循环。
而且最关键的是这个哈,我们之前有一个备注,就是我们技能栏上获取对象的时候,获取某一个格子对象的时候呢,这个EDI呢它是什么,它是那个技能栏数组的下标,那么根据我的经验来猜测的话,这个ED呢应该是那个装备数组的那个下标啊,极有可能是那个下标,因为我们的装备他某一个对应的装备穿在哪一个位置他是有这个讲究的是吧,比如说我们鞋子该穿穿在第几个位置,我们的首饰比如说什么上衣啊,或者是鞋子穿在什么位置,他都是有一个讲究的啊,都是穿在一个固定的位置上的,所以说我们从这里的一个分析的话,这个数字的一个来源的这样的一个分析的话,那么基本上能够确定啊,这个EDI呢可能就是从这里这里他不断的再去嘛,不断的再去循环看这个东西。
可能这里做循环的目的是去判断对应的位置是否已经有其他的装备了,如果有的话可能该替换下来,还是直接穿上去了。可能做一些判断。那么这里是一个非常明显的特征。我们根据这一点的话,基本上能够大概率的推测,这个EDI就是我们背包的那个下标,就是装备数组的下标。而这个是背包数组的下标。那么基本上我们能够有这样一个确定。我们把这一段和前面那一段都拷贝下来。而且这个ED2的话,你看后边这里还有,是吧,这里他是来自EX,这里可能又是另外一个容器。
那么我们先把这个拷贝下来,然后我们找到的话,关键的地方呢是在这里。这里是一个关键点。当然是不是这样的,我们还需要进一步的分析。好,我们先让它跑起来。跑起来之后可能多半是掉线了。掉下来我们重新进一下游戏,来验证一下我们的这个推测是否正确。好,我们打开我的背包以及我们的这个装备。你看这里边是不是头盔,他这些位置都是固定的。当然他这个编号不一定是顺序这么下来的啊,可能不一定是顺序下来的,但是你看这个它都有一个它的一个位置的。这个位置的话,如果是从上到下再来算的话,刚好就是三,是不是?
而这个的话是帽子,他可能就是零零,如果是顺序下来的,当然他也可能不是顺序编号的,如果是顺序编号的话,这个下标是零,那么这个下边呢要么是二,要么是三,因为后边这里还有一个还有一个格子,他这个格子我们暂时也不知道它是怎么来编号的啊,哪一个是第一,哪一个是第二,但是呢他都是固定的啊,这个东西只要是同一类的,都是帽子的话,它就是固定的,比如说这个都是假,这两个都是假,那么你看这两个它的那个加三偏移是一样的,我们基本上就可以确定他是同一个位置好,那么我们试一下,我们就以这个武器,因为这个武器的话,它是同一款物品都是放在这个格子里面,所以说这个格子的下标是固定的啊,这个衣服也是是吧,他都是放在这个,那么它也是固定的,我们只要下个断点来分析的话,基本上就可以验证我们的推测是否正确。
我们再次转到这个地方,转到这个地方,好然后呢我们使用一下第一个啊,第一个兵器,那么我们看一下ESI最后一个加三偏移,我们看到这个时候呢它传入的这是它的下标网,这个呢是零,不是应该更进去啊,这个时候应该是EDI1D二,是装备的那个下标,这个时候是零,好我们再走一下,走到这里来,那么走到这里来之后,我们可以看到啊,走到E32,我们看到最后一格是零啊,的确这个呢是装备下标应该是这个装备栏的装备数组或者叫,但是这个垂直呢它是零,如果是零的话,那么我们使用另一个传上去的话,他应该也是零是吧。
我们来测试一下这个短兵器。右键点击装备,看看会经过这一段。最后我们看到的是零。从这里来看,我们能得出一个初步结论:如果是武器的话,装备的那个格子下标就是五零。我们可以先这么认为。后面我们还需要进行更多的测试。他放的那个叫做装备自己处理的下标,就是你。再来看一下衣服。它在装备里面的位置是什么?这两件都是衣服,都是同一类的。我们右键点击进去看一下。再来看一下转到ESI来看一下这个。
你看,他是二,对应着衣服。在装备数组里的编号也是二。好,我们换一件衣服,按F9跑起来。我们换另外这件衣服上去试一下。再转到ESI背包的。你看这个地方,它依然是二。我们换了两件衣服,它们的下标都是一样的,因为它们要使用在装备栏里面的同一个位置。另外这个宠物我们可以试一下。你看这两个都是宠物,是吧?好,我们右键点击试一下。看一下这个宠物它是放在哪一个。
然后宠物呢,前面这里应该是第32个,后边这个幺幺就是第17个,应该是17。那么我们这里给他备注一下,宠物就是幺幺是十进制的17011。好,我们再试一下,换一个宠物。再试一下,换这个白色的龙。我们右键点击再看一下它的ESI包内容。但这个是幺零。这个是妖灵的话,这样两个就对不上了。难道他可以放两个宠物?我们看一下它是否能够放两个宠物。但是这个的话它是有理的,但是他们也是同类的。会不会这个游戏有点笨呢?我们看一下宠物那个,那他应该是可能是在时装上面还是在哪里。
升级了。这里有很多花了很多包,这个游戏不太懂。这个游戏是不是在神器里面好像是法宝啊?因为是法宝。对,你看他恰好他这个宠物呢恰好有两个啊,因为其他的那个时装什么的,他都是我们的那个装备是吧,他都只能占同一个。但是这个宠物呢,他恰好有两个啊,所以说呢他这里他不一样是吧,一个是第16个,一个是第17个啊。所以说这个呢他不一样。所以说这个与我们猜想的应该也是一样的,装备数据里面,他也是那个装备数组里面的那个格子啊,一个是16,一个是17。
因为从这里来看的话,它可以有两个宠物。然后把它给取下。好,那么本期我们的分析暂时就到这里了。下期教程我们换一下其他的药品,进行主包的分析。本期我们分析的是装备使用,这个主包比较简单,就四个字节,前两个字节是指令,第三个字节实际上是加二这个偏移,这里是下标加三这个偏移,这里呢就是我们要装备的那个格子的那个下标。现在我们基本上确定了这是我们装备数组里面的下标。
我们给它备注好。然后我们休息一下。这个我们分析好之后,到时候我们要装备什么物品,我们在主包的时候就非常方便了。是不是我们就知道我们要装备宠物的时候,要么放在16,要么放在17那里。我们还可以可以骗你一下这个装备数组啊,16那个格子里面有没有放宠物啊?没有放的话,我们就放到17;如果是放了是吧,我们就放到17里。16如果没有放,我就放到里面可以读一下相应的格子是否为零。
设为零的话就放在里面。像这种情况。那么其他的衣服和武器的话,他只能只能拿一把武器的话,那么我们就连他的下边就是固定就是为零的衣服,固定就是为二的。这个到时候可以把它他就是一个常量嘛,我们可以写成每种类型啊,或者是其他的方式来定义,定义成常量就可以了。好,这节课的分析暂时就到这里。下期教程我们要分析的是使用物品,药品这一类的主包的分析。因为它的长度是十个字节。那么本期教程就到这里。


暮色的狐
这是一只高强度上网冲浪、高质量输出内容的狐狸。主打ACGN杂谈、技术干货分享、第九艺术鉴赏、网梗百科解析、情感树洞鸡汤、正能量价值观~
 最新文章