【游戏逆向】】游戏全屏捡物的分析实现

前言

在角色对战类中,拾取怪物掉落的装备是一项必备的工作,由于装备位置掉落的不确定性,玩家想要拾取离角色距离较远的装备需要一定的时间,这一段时间往往会影响游戏的评分或是玩家的心态,基于此,全屏捡物诞生了,通过作弊手段将一段时间节省了下来。

实现全屏捡物一般来说有两种方式,一种是改变自身可捡物的范围,另一种就是改变物品的坐标,把物品吸到可以拾取的范围里,我很早之前看到一份DNF的源码就是用第二种方法实现的,本文就用第一种方法实现这个功能。

首先,要这个捡物的范围,肯定是在捡物CALL附近的,所以最先要找的是捡物的代码,由于示例不是网络游戏,不能通过在发包处下断回溯去找,那么只能通过捡物这个过程去找到他的代码,可以是访问物品ID等等,这里就用一个简单的搜索地面物品数量来解决问题。
在这里插入图片描述
然后减少一个搜一次在这里插入图片描述
访问后拾取
在这里插入图片描述
就得到了相应的地址,打开OD,下断,再去打一个物品然后拾取
段下后在上几层CALL下断在这里插入图片描述
运行后发现
在这里插入图片描述
到这个CALL才不会断下,且从上方字符串可以看出这里应该是捡物代码段
尝试在地面没有物品的情况下捡物,发现这里并不断下来,说明上面有相关的判断在这里插入图片描述
通过下断尝试 发现006BC414是在捡物动作触发后最先到达的地址
在这里插入图片描述
上面是一个switch-case语句在汇编中的表示,当eax=3是就跳转到捡物部分
一直F8往下运行,发现经过两个跳转来到了return处在这里插入图片描述
因为此时地面是没有物品的,所以就直接return了在这里插入图片描述
回过头去看发现是这个jle起了判断作用,jle是不大于跳转,上面cmp比较的是eax和ebx的值,也就是说当eax小于等于ebx的时候捡物就不继续进行了
在这里插入图片描述
地面没有物品的时候eax是0,ebx也是0,上面我们可以看到eax被作为006BC43F的一个参数,那么后面cmp的eax的值就是这个call 的返回值,不难猜到这个call 的作用就是返回在拾取范围内地面物品的数量,作为有这么一个功能的call他的参数里面很有可能包括拾取的范围,进入该call
在这里插入图片描述
Add esp,0x10 说明该cal有4个参数
在这里插入图片描述
可以直接看到的参数是3个,还有一个隐藏的参数是esi的值,因为esi储存的浮点型,它通过fild 和fstp dword ptr [esp]将它压人栈中
经调试发现这个esi的值一直是
尝试修改成10000后发现超出范围的物品已经能拾取了,说明这个地址就是一个存放拾取范围的地址,由于它不是一个基址,可以HOOK或者找到它的基址方便下一次的修改。

总结:

在分析的过程中,需要根据已知的条件做出一些合理的猜测和判断,最终实现所需要的功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

douluo998

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值