免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
上一个内容:23.第二阶段x64游戏实战-分析背包物品数量
首先打开x64dbg,在内存窗口中跳转到上一个内容找到的基址,也就是下图的代码 mov rcx, qword ptr ds:[0x00007FF7A6DAA7E0]里的0x00007FF7A6DAA7E0这个内存地址
跳转之后,上一个内容找到的计算物品数量的公式 [[0x0*0x8+[[0x00007FF7AEBBA7E0]+0x18278]]+0x18]+0x80-0x30,这里是[0x00007FF7AEBBA7E0]所以要跟一下内存,继续往下看,注意[0x00007FF7AEBBA7E0]跟当前的地址不一样,因为游戏重新开了导致内存地址变了实际上是[0x00007FF7A6DAA7E0]这个
然后右击选择 在内存窗口中转到指定QWORD,然后选择内存1
选择完之后,如下图就相当于执行了 [0x00007FF7A6DAA7E0] 这个
然后继续根据公式走,跳转到0x18278位置,也就是执行 [0x00007FF7AEBBA7E0]+0x18278这个公式了
就来到了下图位置,下图红框就是背包的地址,继续往下看
然后下图红框位置就是背包的大小,它是三个数,14是一个大小,34是一个大小,34是一个大小
选择十进制显示(十进制是我们所常用的阿拉伯数字)
然后可以看到当前背包可容纳数量是52、52、30,也通过游戏中背包的格子验证了,这三个数字改了会让背包变大,但是不要改因为这里在安全层面是可以做防护的
下图红框有4个内存地址,它这是有4个背包,现在只知道第一个是物品,其它的不知道,等后面用C++遍历出来看看它的数据是什么就能知道了
然后看看它的数组大小,如下图
然后再除以8,上面0x780是内存空间大小,一个内存地址是8字节,所以除以8才是个数
上面执行了[0x00007FF7AEBBA7E0]+0x18278这个公式,接下来执行 [[0x00007FF7AEBBA7E0]+0x18278]这个公式,如下图右击选择 在内存窗口中转到知道QWORD再点击内存1
这些就是物品对象了,怎么验证它就是物品对象了
如下图红框,它的值变成了0,这个是因为把背包冲第一个物品放到了后面,背包中第一个格子变成空的了
如下图它这个背包有三页,下图是第一个页,然后背包格子的数量是52然后52乘以8结果是416十六进制是0x1A0
然后背包第一个最大数量是100(通过短暂修改背包大小确定的,想要扩大背包是要购买和装备扩容道具的),100乘以8是800十六进制是0x320,可以看到从0x320开始下面又有数据了,这些数据是背包第二页的数据
再往下是第二个页
第二页最大带下也是100,100乘以8是800,800加上第一页的800是1600,1600的十六进制是0x640,再往下就是第三页数据,第三页数据只有20个不能扩容
第一页第二页第三页的意思是,背包中有分类比如道具、材料、任务(任务道具),这里第一页指的道具、第二页指的材料、第三页指的任务