23.第二阶段x86游戏实战2-背包遍历(OD卡死解决办法,背包数量基址)

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

本次游戏没法给

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

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

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

提取码:6tw3

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

上一个内容:22.第二阶段x86游戏实战2-背包遍历REP指令详解

OD会有一个问题,打了硬件断点,然后硬件断点触发之后OD会卡死,重启电脑也没用,这时可以先在发包的位置(任意可以简单触发断点的位置应该都可以)打一个普通断点(快捷键F2)让它断下来再按F8然后再按F9,然后再打硬件断点就会好了

上一个内容通过CE搜索物品数量得到物品数量的内存地址,然后通过给物品数量打硬件写入断点(这个内存地址只要写东西了就会断下来)跳转到了一个rep指令位置,然后本次就在rep指令位置接着继续

首先通过对数量的地址打硬件写入断点在下图红框位置断点住(因为可能有其它的东西也会调用下方的代码)

断点住之后删除断点

**

然后可以看到下图红框位置ecx的值等于0x18的时候会断下来,也就是说物品的数量在ecx等于0x18时

然后分析代码,然后edi的值是背包然后它来自于edx+0x14,edx又来自于ecx

然后就得到一个公式,[edx+0x14]+0x5C位置是数量,0x5C是通过,2F-0x18=0x17,0x17*4=0x5C 得到的

如下图,ecx的值是0x18,这个0x18是已经执行完rep指令的结果,所以实际上我们要的数量应该是[edx+0x14]+0x58 这个位置 (2F-0x19)*4=0x58

然后通过现在代码分析好了,然后再通过对数量打硬件写入断点,再次断在下图红框位置,现在需要找ecx(dex的值来自于ecx)的值哪来的了

断点住,按CTRL+F9

按了CTRL+F9之后会来到下图位置

ecx的值来自于esi+eax,下图esi的值来源,来自于eax*4,下图用的lea指令所以现在的公式[[eax*4+eax]+0x14]+0x58

然后通过断点,这个断点是通过拖动物品触发的,观察eax*4的eax的值是什么,如下图,发现eax的值是当前点击物品所在背包的序号,序号是从0开始,下图红框位置是第22(这个22是十进制的)个,然后由于是从0开始所以下图红框位置的序号是0x15

然后现在知道eax是序号了,注意这个eax是通过找esi得到的,然后下图红框位置esi加了eax,这说明eax还有别的值,所以现在还剩下eax的值哪来的

如下图红框eax的值来自于ebx+0x181C4位置,然后现在的公式,[[eax*4+[ebx+0x181C4]]+0x14]+0x58

然后通过往上翻发现ebx来自于ecx,然后ecx来自于上一层,所以继续断点(还是通过数量的硬件写入断点追),通过硬件断点,断在下图位置

取消硬件写入断点,然后按CTRL+F9,来到下图位置

然后继续按CTRL+F9,来到下图位置

然后就找到了ecx,它就是基址了,0x83F458,最终的公式 dd [[0x15*4+[[0x83F458]+0x181C4]]+0x14]+0x58,然后计算它的偏移

偏移是 0x59F458

然后发现没有数量的物品,它会是一个不知道是什么的数据,可能是物品id,这个后面再写,现在把背包找出来了,可以得到物品的数量了,其它的后面再写


img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值