免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
上一个内容:20.第二阶段x64游戏实战-代码实现遍历周围
上一个内容里把遍历周围的npc和玩家写到了我们的列表中显示,发现采集物,比如宝箱、矿石、药材等没有名字,或者说采集物名字的偏移和人物的偏移不是同一个,所以接下来要找采集物名字的偏移是什么
首先采集物没有名字,改怎么找?
第一种方式,我们有它的对象,直接去这个内存地址里看看,哪一个像名字,找之前要知道一个东西,名字在对象里是以什么样子存在的,名字是一个字符串,Unicode编码一个中文两个字节,在对象中名字是一个内存地址,这个内存地址指向了一个字节(中文)这样的形式,继续往下看,看到了就懂了

然后打开x64dbg跳转到内存,如下图

如下图如果是内存地址鼠标右击会有 在内存窗口中转到指定QWORD 这个选项的

如下图不是内存地址就不会有 在内存窗口中转到指定QWORD 这个选项

然后名字的位置不会很深,如果很深通过这种方式没法找很难找,要用别的方式,最终在偏移0x150位置发现了名字(采集物对象中没有几个值是内存地址所以很好找,如果采集物对象中地址很多就很难找可能会没法找),如下图红框

然后右击选择 内存2

然后跳转过去之后,下图红框位置就是名字的内存地址

然后在 内存3中显示

下图红框就是名字了

上面是第一种方式,下面开始第二种方式通过对采集物的名字设置访问断点来找,下图是游戏中的采集物,虽然打了马赛克,依然可以看出它在地图上是没有名字的,没有名字该怎么办?

经过研究游戏,发现它在地图上没有名字,但是在小地图上鼠标移动上去的时候是有名字的,下图红框位置就是名字,它的名字是铜矿

然后打开CE,当前游戏是Unicode编码所以要勾选代码页,否则搜索不出来

搜索完发现了一件事,如下图我们要的是铜矿,但是搜索出来了铜矿石、铜矿脉这些不需要的东西,而且有176个,很难找我们要的铜矿

这里要知道一点,字符串是以0结尾的,如下图第一种方式找的名字,可以发现它是有个00的,这个00就是字符串的结尾,所以可以利用这一点重新使用CE搜索

然后如下图

然后双击下图红框位置

然后选择字节数组

可以看到铜矿石的编码(编码是一个称呼,可以理解成计算机认识的二进制数据,下面是以十六机制显示的,所以实际上还是计算机认识的二进制数据只是显示模式不一样),然后双击下图红框位置

把 CD AD BF F3 CA AF 复制一下,然后新的扫描

然后选择字节数组

之前说过一个中文两个字节 CDAD是铜字 BFF3是矿字,然后给它们写一个结尾符00

然后点击首次扫描

可以找到两个了

如下图红框,过了一会发现有一个变了,所以就剩下一个了

然后如下图复制地址来到x64dbg,在内存窗口中跳过去

然后设置访问断点

然后就跳转到了下图红框位置,这里rdx访问了名字

然后删除硬件断点

然后开始分析代码、

然后断点发现rsi的值就是采集物的地址,通过跟之前写的遍历周围的对象做对比发现的

采集物的公式是[[对象地址+0x150]+0x8]
