19.第二阶段x86游戏实战2-寻找寻路call
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:18.第二阶段x86游戏实战2-探索释放技能call
上一个内容中找到了,释放技能调用的函数,本次找一下寻路调用的函数
下方采用通过发送数据包的位置找寻路,找寻路的方式还有通过人物状态,之前走路的状态是2,站着不动的状态是0,打坐的状态是6可以跟踪这些状态的写入去追,然后还可以通过人物基址去追
坐标的特征:十六进制以4开头或以C开头的一般就是坐标,看多了也就能认识了
先说这个游戏通过发送数据包的位置追寻路追不到,因为它使用了循环,它通过修改状态来实现走路,意思是0表示不走路,1表示走路,一个线程专门写走路,一个线程专门读取是否走路执行走路逻辑
然后开始验证上面写的字,打开游戏,打开OD,并使用OD附加到游戏
首先来到发送数据包的位置
还是鼠标单击下图红框位置,然后鼠标移动到游戏中准备触发走路,然后按F2紧接着用鼠标触发走路
断下来之后双击取消断点
按CTRL+F9之后
按CTRL+F9之后
按CTRL+F9之后
按CTRL+F9之后
按CTRL+F9之后,来到非游戏模块(非Game模块)
按CTRL+F9之后,又会来到Game模块
按CTRL+F9之后又会来到非Game模块,这是一个递归循环(不知道递归循环什么意思没事,就是一个循环,递归是循环的一种,搞懂需要写C++代码,C++基础里的东西,后面有机会写一个递归循环一看就能懂)
然后继续老套路,来到zl3层,看看它是否除了走路会触发断点其它都不会触发,下图来到zl3层,对它打断点发现只有走路才能触发断点
然后来到zl4层,我们要找最外侧的那一个,所以还要往上找,所以来到zl4层,对zl4打断点发现它不走路也会断下来,所以zl3层是最外侧
然后来到zl3层,查看它的参数,ecx
然后按F8,执行call 0x25EFD0,发现栈没有变化,所以call 0x25EFD0没有参数(之前看参数是点进去看retn 后面跟不跟数字,通过数字判断函数有几个参数,本次是第二种看参数的方式,如果有参数栈一定会变的)
然后通过多次断点观察,ecx的值不变,这个值游戏重启了肯定会变,然后需要找ecx的值哪来的,需要找到它的基址,如下图ecx的值来自于esi,esi的值来自于ecx,ecx的值来自于上一层
通过断点CTRL+F9来到上一层,ecx来自于esi+0x154位置,esi的值还是来自于ecx,ecx又来自于上一层,所以继续断点CTRL+F9找
CTRL+F9之后就来到那个循环了,在循环里找ecx的值没法找,因为不知道这个循环要循环几次才能出去,能找到也是运气好,所以这样找不现实,需要换个方式找
然后再回到zl3,现在怎么办?往上是循环没法找ecx的值,这时候怎么办?不信没法找的自己去试试一找一个不知声,这里补充一点,当前坐标和目的地坐标在zl2附近可以看到取值
现在有一个问题,现在在一个循环里,为什么zl4会不断的执行,上图zl3位置只有走路的时候才执行?然后在zl3函数头部打断点,会发现zl3头部也是会不断的断下来
然后在zl3断点住之后通过按F8,看看是为什么zl3位置不走路不执行,然后会发现下图两个红框位置,它通过对比esi+0x130位置的值与0做比较je指令是相等就跳转,这里注意马上就要验证刚开始写的东西了
通过CTRL+F9往上找发现上面是循环,并没有给esi+130位置赋值的代码,esi+130位置的值是从别的地方来的(肯定不是从循环里来的)跳出循环的方式,在下图红框位置下硬件写入断点
单字节的硬件写入
然后它就跳转到了新的地方
记录偏移0xBEFBB
本次到这就结束了,下次接着上图位置继续,这里补充一个东西,如果没有下图红框的东西
它就在调试-》硬件断点里打开
删除硬件断点
这里提一点,当前坐标和目的地坐标在zl2附近可以看到取值,如下图,从ebp来的,这里还是不好搞,最好的call应该是给它一个目的地坐标就可以