内容参考于:易道云信息技术研究院VIP课
上一个内容:72.网游逆向分析与插件开发-背包的获取-项目需求与需求拆解-CSDN博客
然后首先找切入点:
通过药物来当切入点,药物比较好使用,然后鼠标放到药物上它有名字、种类、说明、数量等,除了数量我们都改不了,所以毫无疑问通过数量来当切入点
然后打开 Cheat Engine 开始搜索,搜出来很多地址
然后使用一个药物之后就还有两个了
然后第二个(0x2109A2BC地址)通过内存修改有变化,也就是说ui界面绘制的时候一定是使用的0x2109A2BC地址,因为第一个地址(0x1F355B64)没有变化
然后这两个地址在使用药物时不同的地方调用了相同的函数对物品的数量进行减1,假数据一般会通过主数据的变化而变化,但是现在改了第二个地址之后,ui绘制的时候有效果,但是假数据(副本数据)没有变化
然后现在的分析:
接下来要找的是这个背包是一个怎样的情况,如果背包是数组的话,它有一个特点是物品的大小是固定的,所以数组的话搜出来物品的地址应该是与数组是等差的,所以接下来搜索下一另一个物品
通过它们的内存地址:也看不出是不是数组,现在的数据量太少,看不出来等差(下面我是直接通过他俩的差值找的第三个,可以通过找这俩的方式再找第三个,然后再计算差值,或者找第四个第五个。。之后,再计算差值)
然后通过2109A4A8-2109A2BC的差值,得到了第三个物品的数量,现在数量时11
然后修改内存,可以正常修改
所以背包的结构是一个数组,数组里的结构分别是1EC和6E4,通过上方是什么改写了它们可以看出它们应该是同一种数据类型,但是差值不同,这可能6E4这个东西它是物品的详细内容,可能是用在客户端的,那个1EC使用在网络端,现在基本确定,它的9C位置是一个4字节的数量,然后背包是一个数组,通过背包ui移动物品到不同的位置,内存地址不变,但是放过去的物品数量会实时改变,如下图把2位置的商品放到1位置,然后1位置的物品就会跟2位置的物品互换位置,这时内存会实时显示物品的数量,这也就说明原本2位置的数据会复制到数组下标0位置,然后还会把物品1的数据复制到背包数组下标1位置,这里用的不是指针。
然后这样可以找到耐久度了,现在耐久度是43,然后就搜索43
搜出来很多:
然后在换另一个装备到背包数组下标0位置上,下方是衣服耐久是37
然后就又找到了两个
然后可以看出它正好在数量的前面
然后看看它们的偏移,通过是什么访问了它们看,1F355B60没有被访问
98位置
然后找物品的名字,通过字符串搜索
然后找到了两个,现在可以看出物品的名字并不在物品的数据里,因为字符串的地址明显于上面分析的物品数据差异大,也就说明了游戏里物品这个东西,它里面本身是没有名字的,它有的应该是物品的种类,比如一个物品是2号种类,那么2号种类就对应 xxx这个名字不会变,也就是说物品里有一个物品id,通过物品id一定会指向一个名字(这时可能会有算法),所以要找到物品的id还有连接名字的算法
接下来要找物品的id,找的方式,下图中两个物品都是 MP 回复草药,然后让它俩的数量变成一样,然后这时再不断的让它俩互换位置,这样变的数据肯定是id或者其它我们不知道的数据
先采用下图红框里的俩地址:
然后首先找一下它们的起始地址:1F355AC8
然后设置起始位置与结束位置:
’
然后搜索未知的数据
然后有四个地址
然后修改数据大的发现,物品的图标变了,但是变的规律没找到,它也不是物品种类,如果是物品种类的话名字应该是会发生改变的,由于它图标修改起来没有规律,所以不使用6E8的了
使用1E4的,首先找它的基址
然后设置起始地址与结束地址
然后出了两个
第二个是数量:
然后种类就找到了
然后把武器放在下图位置,看看能不能找到其它数据
搜出很多数据
然后很游戏中武器的说明作对比,可以看出搜出来的是武器的攻击力、命中率、耐久度等
然后换了一个物品,数据全没了,所以它是跟装备有关的数据
然后现在物品最重要的数据已经找到了,如下图红框位置
它的偏移是0x34
文章来源:https://www.toymoban.com/news/detail-800622.html
现在知道的偏移0x34是物品id,0x9c是数量,0x120是最大耐久度,0x98是耐久度文章来源地址https://www.toymoban.com/news/detail-800622.html
到了这里,关于73.网游逆向分析与插件开发-背包的获取-物品数据的初步数据分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!