当前位置:   article > 正文

30.x86游戏实战-遍历背包数组

30.x86游戏实战-遍历背包数组

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

本次游戏没法给

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

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:29.x86游戏实战-XXX发包函数

背包一般是一个数组结构(数组结构就跟饭店里的座位一样,数量是固定的,饭店的座位是放人的,数组结构是用来放数据的),背包数组里的内容一般是内存地址,这个内存地址指向了物品,有了数组的概念之后开始分析

首先打开CE并附加到游戏

使用未知的初始值,然后点击首次扫描

会扫描出这么一堆东西

然后来到游戏,下图是游戏中快捷背包

下图位置是空的,什么物品也没放,第4个位置

然后这时随便把物品放到第4个位置,然后来到CE点击变动的数值,然后点击再次扫描

这样数据就会变少了

然后不要动游戏里第4个位置,然后点击未变动的数值

这里补充一个东西记得要以 十六进制观看,如下图

然后再次来到游戏改变第4个位置,然后来到CE选择变动的数值然后再次扫描,也就是一直重复上方两个操作,最终剩下了一个(可能最终会剩下多个,这是正常的,从多个里找最符合的一个),这个也比较符合背包数据的情况,它第4个位置放不同的物品它会变不同的值(内存地址)把物品拿掉就会变成0(如果有多个就按照这个思路找最符合的那一个)

然后复制这个内存地址,也就是复制5FC1EDE8,然后打开OD并附加到游戏,然后单击内存区,然后按CTRL+G,然后粘贴5FC1EDE8,然后点ok,OD刚打开可能需要操作 单击内存区,然后按CTRL+G,然后粘贴5FC1EDE8,然后点ok 这个两次或多次,不然不准

然后点完OK就来到了5FC1EDE8位置

然后在5FC1EDE8位置下一个访问断点

然后就回来的下图位置

然后下图红框圈出来的就是数组访问数据的算法,ecx是数组第一个数据(背包基址),一个数据大小是4字节,eax是序号它决定了访问数组里第几个数据

下方的内容地址与上方的不一样,因为这里游戏崩溃重启了

然后打断点观察,打断点之前别忘了删除硬件访问断点,删除完按f9让游戏继续运行

删除完硬件断点并且按了f9之后在下图红框位置打断点

经过观察(多次按f9观察eax的内容)03应该是背包第一个位置,然后在内存区,按CTRL+G写下图红框的内容

点击OK之后,就跳转到背包第一个位置了,这个可以在游戏中把背包第一个位置的物品拿掉进行测试

更改了物品位置之后OD不会自动刷新,这时需要,鼠标点击一下内存区(如点击了还没反应,那就在内存区换个位置点,反正就是点击内存区OD内存区的内容才会刷新)

背包六个位置分别对应

然后接下来找ecx的值(找基址了),如下图,通过观察ecx来自于esi+0x38位置的值,注意esi+0x38是一个内存地址,这里要的是内存地址里的值,然后esi的值来自于ecx,ecx来自于上一层

然后在下图红框位置打断点

让后来到下图位置

直接就能看到ecx的值了,然后就得到了基址[[0x1A5FB24]+0x38]+3*4

然后测试,在内存去按CTRL+G然后输入[[0x1A5FB24]+0x38]+3*4然后点OK

它可以正常跳到背包第一个位置

然后接下来观察一下背包数组的数据,在第一个位置右击选择数据窗口跟随

可以看到有一些字符串,这里看的不是第一个位置,是第二个位置,第一个位置数据窗口跟随过去没有什么有用的东西

翻译,它应该会对应物品的中文名

然后还看到,背包基址(第一个位置)后面还有很多数据,但是快捷操作背包只有六个,这是什么情况?

从第六个开始,后面是背包里的东西,如下图游戏的背包(注意不是上面分析的快捷背包了,是背包)


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/928674
推荐阅读
相关标签
  

闽ICP备14008679号