山东网站制作推荐,wordpress新站SEO优化,建设银行官方网站打不开,网站建设服务公司哪家好0x0前言#xff1a;
在角色对战类中#xff0c;拾取怪物掉落的装备是一项必备的工作#xff0c;由于装备位置掉落的不确定性#xff0c;玩家想要拾取离角色距离较远的装备需要一定的时间#xff0c;这一段时间往往会影响游戏的评分或是玩家的心态#xff0c;基于此…0x0前言
在角色对战类中拾取怪物掉落的装备是一项必备的工作由于装备位置掉落的不确定性玩家想要拾取离角色距离较远的装备需要一定的时间这一段时间往往会影响游戏的评分或是玩家的心态基于此全屏捡物诞生了通过作弊手段将一段时间节省了下来。
0x1正文 实现全屏捡物一般来说有两种方式一种是改变自身可捡物的范围另一种就是改变物品的坐标把物品吸到可以拾取的范围里我很早之前看到一份DNF的源码就是用第二种方法实现的本文就用第一种方法实现这个功能。 首先要这个捡物的范围肯定是在捡物CALL附近的所以最先要找的是捡物的代码由于示例不是网络游戏不能通过在发包处下断回溯去找那么只能通过捡物这个过程去找到他的代码可以是访问物品ID等等这里就用一个简单的搜索地面物品数量来解决问题。 然后减少一个搜一次 访问后拾取 就得到了相应的地址打开OD下断再去打一个物品然后拾取 段下后在上几层CALL下断 运行后发现 到这个CALL才不会断下且从上方字符串可以看出这里应该是捡物代码段
尝试在地面没有物品的情况下捡物发现这里并不断下来说明上面有相关的判断 通过下断尝试 发现006BC414是在捡物动作触发后最先到达的地址 上面是一个switch-case语句在汇编中的表示当eax3是就跳转到捡物部分
一直F8往下运行发现经过两个跳转来到了return处 因为此时地面是没有物品的所以就直接return了 回过头去看发现是这个jle起了判断作用jle是不大于跳转上面cmp比较的是eax和ebx的值也就是说当eax小于等于ebx的时候捡物就不继续进行了 地面没有物品的时候eax是0ebx也是0上面我们可以看到eax被作为006BC43F的一个参数那么后面cmp的eax的值就是这个call 的返回值不难猜到这个call 的作用就是返回在拾取范围内地面物品的数量 作为有这么一个功能的call他的参数里面很有可能包括拾取的范围进入该call Add esp0x10 说明该cal有4个参数 可以直接看到的参数是3个还有一个隐藏的参数是esi的值因为esi储存的浮点型它通过fild 和fstp dword ptr [esp]将它压人栈中
经调试发现这个esi的值一直是 尝试修改成10000后发现超出范围的物品已经能拾取了说明这个地址就是一个存放拾取范围的地址由于它不是一个基址可以HOOK或者找到它的基址方便下一次的修改。
0x2总结 在分析的过程中需要根据已知的条件做出一些合理的猜测和判断最终实现所需要的功能。