6.第二阶段x64游戏实战-分析人物状态

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

上一个内容:5.第二阶段x64游戏实战-动态模块地址

人物状态是与角色相关的,如果做辅助的话是需要判断当前人物是在打怪中还是移动中还是静止中还是在释放技能、挖矿、采药等

人物状态数据期望的样子

0:表示站着不动

1:表示移动

2:表示打怪

3:表示采集

4:表示释放技能中

注释:上面的数字可能与游戏中用的数字对不上,但是期望是这样的数字,范围大约0-50之间把,越小越好,下面开始找人物状态

首先打开游戏,打开CE,如下图,数据类型使用字节,扫描类型使用位置的初始值,字节的范围是0-255

首次扫描之后

首次扫描的时候人物是站着不动的状态,然后让角色移动或者其它可以修改人物状态的数据,这里就使用移动角色的操作来修改人物状态,角色移动过程中使用变动的数值再次扫描

当角色移动完成恢复到站着不动的状态后使用变动的数值再次扫描,然后紧接着使用未变动的数值再次扫描,这里注意如果使用传送技能来修改角色状态要手动取消技能,不要让角色真的传送了,有的游戏传送之后会重新把人物数据初始化,也就会导致我们使用未知的初始值扫描的数据失效

通过上方变动的数据和未变动的数据扫描剩下200多个不好过滤了

最开始说过人物状态期望的是0-50之间,这里直接用0-100进行筛选,如下图筛选玩还剩31个,这时候操作游戏修改人物状态观察数据

下方是人物移动过程中,还是有大于100的数字,这时候还是使用0到100进行再次扫描

现在满足期望的是下图红框的这几个数据,因为它们的数字很小,然后回到游戏中继续修改人物状态观察数据

最终发现下图红框的数据是人物状态,下图中它的值是2,人物移动过程中它的值会是2,移动完成又会变成0

打坐的时候值是6

释放技能的时候是5

打怪的时候是7

采集材料是8

总结

0:站着不动

2:移动中

5:释放技能中

6:打坐中

7:打怪(战斗中)

8:采集材料中

然后打开x64dbg开始找基址

然后右击选择地址

然后数值的显示方式就会变成下图的样子,这个样子比较好看(用不用看个人习惯),这里要注意修改显示类型之后地址会跳,记得重新CTRL+G到目标地址,如下图地址就变了

然后硬件访问-》字节,如下图地址就变了

然后就会在下图位置断点住

然后禁用硬件断点,禁用玩按F9让代码运行起来(代码长时间卡死不执行会让游戏掉线)

然后分析代码,人物状态是下图红框位置的代码访问的,也就是rcx+1B8访问的

rcx的值来自于rax+0x98

rax的值来自于0x00007FF7BBE4CD70基址,然后开始计算偏移

模块首地址是00007FF7BB510000

然后右击复制

结果是0x93CD70

公式\[Game.exe+0x93CD70+0x98]+0x1B8,在CE中进行验证

这里要说一点,写当前文章时游戏更新了,导致偏移变化了,它的基址实际上是与之前找到的坐标的基址是同一个,如下图使用CE验证

然后整理一下数据

5C是x坐标

60是z坐标

64是y坐标

1B8是人物状态


相关推荐
bkspiderx5 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆6 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光6 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
码云数智-园园6 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
禾小西7 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨7 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
徐小黑ACG8 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
优橙教育8 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
SEO_juper8 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
西柚小萌新9 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库