内容参考于:易道云信息技术研究院VIP课
上一个内容:自动化助手显示物品数据-CSDN博客
然后游戏中有弓箭,弓箭有数量,可以作为突破口,也可以使用物品id
获取弓的方式
获取弓箭的方式
然后搜索250
然后搜索出一个
然后可以正常改成999
然后接下来找出是什么改写了这个数据
然后把弓箭拆下来
所以一共有两个地方修改它,一个是995854,一个是5BAF36,然后简单看一下看出,0x5BAF36位置有大量数据更新
0x995854位置更新单一数据
这里游戏掉线了,基址会与上方不一样
然后先使用 0x5BAF36 来找,使用哪个都行
然后ctrl+f9,再按f8 就来到了下图位置
然后下图红框位置的代码:imul指令是乘法,imul edx,edx,1E0,翻译成C++就是 edx = edx * 0x1E0,然后这就说明edx是索引
现在是通过下图红框位置的装备触发的断点,现在edx是1
现在是通过下图红框位置的装备触发的断点,现在edx是4
现在是通过下图红框位置的装备触发的断点,现在edx是5
然后下标位置
然后武器是6
然后下掉弓之后,会自动把弓箭也给下掉,下标是7
然后由此可见0x1E0是物品结构大小,然后下图红框代码是 lea ebp, dword ptr ds:[edx+esi+22D0],然后edx是索引,所以esi是基址,接下来找esi的值怎样来的
然后看到esi是通过上层传递过来的,mov esi,ecx,这时一个thisCall,也就是当前函数是一个类的成员函数
然后记录一些esi的值,方便后续用,当前是0x1E077144
然后ctrl+f9,再按f8,来到下图位置
然后这里的ecx,与我们记录的内容一样,然后它来自于edi,所以接下来找edi
然后上图中的函数很长,所以来到它的上一层,ctrl+f9,再按f8,来到下图位置
这里的ecx就不一样了,所以 0x1E077144 这个值只能是0x951D10函数里来的
接下来来到 0x951D10函数里 一行一行的跟,看看 0x1E077144这个值第一次出现的位置,第一次出现的位置0x951D6F,从0x772300函数里得到的
0x772300函数的ecx是从0x866140函数里得到,然后0x866140函数之前已经用到了,通过调用0x866140对象(0x866140的返回值是一个对象)的0x7722C0函数获取背包,它下图中它是调用的0x772300函数,所以武器或者说装备的基址是通过0x866140返回值对象的0x772300成员函数得到,发现位置 0x951D6A
然后理一下分析到的东西,首先通过0x866140返回值对象的0x772300成员函数得到背包里的装备基址,然后在0x77F387位置知道了装备栏的算法,它直接是一个自定义类型数组,大小是1E0,然后装备栏第一个物品偏移是0x22D0,然后看图1所示装备栏一共有13个格子,它不可能会变,所以13是固定的,所以数组大小是13
图1: