免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。
工具下载:
链接: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,这个后面再写,现在把背包找出来了,可以得到物品的数量了,其它的后面再写