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

0x0前言:

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

0x1正文:

   实现全屏捡物一般来说有两种方式,一种是改变自身可捡物的范围,另一种就是改变物品的坐标,把物品吸到可以拾取的范围里,我很早之前看到一份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或者找到它的基址方便下一次的修改。

0x2总结:

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

douluo998

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

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

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

打赏作者

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

抵扣说明:

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

余额充值