文章目录

  • 关于寻路call
  • 通过参数找寻路call
    • CE搜索寻路目的地坐标
    • 通过参数定位寻路call
    • 寻路call参数分析
    • 寻路call代码测试
  • 寻路状态找寻路call
    • 搜索寻路标志位
    • 通过寻路标志位找寻路call

关于寻路call

寻路call在大部分的游戏里都是存在的,游戏的策划为了用户体验,一般都会自带寻路的功能,可以一键自动让人物到目的地。

但是也有一些游戏不包含寻路call,那样的游戏就需要我们去找一些地图数据以及障碍的遍历判断等等,再自己用算法去实现。

这个寻路call不太适合用send断点回溯去找,因为在寻路的过程需要不断的向服务器发送数据包,是一个比较复杂的过程,里面可能有很多循环和逻辑算法。单纯通过一个简单的调用关系不一定能找到这个call。

通过参数找寻路call

CE搜索寻路目的地坐标

在找这个call之前我们先来思考一下这个call会有什么样的参数,参数可能会有很多个,但是有一个参数是必然存在的,就是寻路的目的地坐标。

这里有三个坐标分别是XYZ,选择任意一个即可。


先让人物进行寻路,寻路完成之后,当前的人物坐标就是目的地坐标。接着搜索人物当前的坐标。

坐标在内存中的形式都是用的浮点数,浮点数的值是经过四舍五入以后显示到游戏界面的,所以这里要搜索一个区间的值,而不是搜索精确值,区间尽量给大。

接着让人物进行寻路,寻一个远一点的位置,这个时候寻路目的地坐标发生改变,此时在CE里搜索变化的值。

然后在人物寻路的过程中目的地坐标是不变的,我们可以一直扫描未变动的值

等人物到达目的地以后,再用根据当前的人物坐标进行一个范围的浮点数值扫描。

一直重复这个过程筛选掉CE的结果,最后会剩下二十多个,这二十多个值都是一样的,都等于当前人物的坐标。那么说明这些值都是人物的目的地坐标。这种情况只能一个一个去测试。

通过参数定位寻路call

这里有两个基地址,有基地址的情况当然优先考虑选择用基地址。

打开OD,在这两个基地址下四字节的硬件写入断点。然后让人物寻路,此时OD断下

此时[edi+0x2C]是我们的目的地坐标,然后下面这个call将坐标作为参数传入下面的call,那么这个call有可能是寻路call,也有可能是在寻路call的内部对参数进行处理。

删除硬件断点,Ctrl+F9执行到返回,上面的这个call也可能是寻路call。

实际上这两个call都是寻路call,里层的寻路call有点类似于封包,需要对数据进行组包,所有的数据糅合在一起,分析起来不是那么方便。外层的寻路call参数多,比较清晰,分析起来方便。这里我们选择外层的寻路call进行分析。

寻路call参数分析

我们在外层的寻路call下断,让游戏断下。

esi这个地方是一个常量1,多测试几次会发现这个参数的含义是地图ID。

往上翻一下也可以找到这个地图ID的一个基址表达式

edx是一个地址,指向的地址内容是和当前的人物坐标是一致的,那么edx就是出发点的人物坐标,坐标在内存中的存储形式是XZY

D1F930这个地址有点眼熟,回到CE

这个地址正是我们用于找call的切入点,也就是目的地的坐标

最后一个参数ecx是一个当前模块的基址,没有什么特殊含义

寻路call代码测试

接下来用代码注入器测试一下我们找到的这个call是否有效

首先随便找一块地址按照XZY的方式填入出发点的人物坐标

然后在0D1F930填上人物的目的地坐标

在注入器填上相关的汇编代码,注入到游戏进程,效果如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ek4EuVau-1586586062769)(004 两种方法找寻路call.assets/自动寻路.gif)]

寻路状态找寻路call

搜索寻路标志位

当人物正在寻路的时候是处于跑动的状态,不寻路的时候人物处于站立不动的状态。在寻路call的内部一定会对这个状态进行改写。

利用这个特点我们可以利用状态值作为突破口,来定位到寻路call

首先在人物寻路的过程中搜索1

然后在人物寻路结束的时候搜索0


最后可以筛选出三个地址,我这里正确的地址是第二个,大家需要去挨个测试。

通过寻路标志位找寻路call

打开OD,在寻路标志位下硬件写入断点,等游戏断下

打开调用堆栈,找到最后一个call,显示调用

这个地方,就是我们之前找到的寻路call。

代码之前已经测试过了,这里就不再测试。另外这个call的参数有出发点的人物坐标,也就是说以当前人物坐标为切入点也是可以找到这个call 的,各位可以自行尝试,到此分析结束。

相关工具:

https://github.com/TonyChen56/GameReverseNote

004 两种方法找寻路call相关推荐

  1. 计算机为什么找不到摄像头,win7系统摄像头图标不见怎么办?找回win7摄像头图标的两种方法...

    一般情况下,win7系统只要打开"我的电脑"就能看到系统默认的摄像头图标,双击摄像头图标,就可以运行视频摄像功能.但是有的用户打开自己的win7计算机图标后,发现win7系统摄像头 ...

  2. map用value值找key的两种方法

    map用value值找key的两种方法 Map中是一个key有且只有一个value. 但是一个value可以对应多个key值. 只用用特殊方法才能用value值来找key,以下就是用value值找ke ...

  3. 我的世界java版怎么找史莱姆区块_我的世界手机版史莱姆区块查找的两种方法...

    大家好,我是拾方. 大家在玩我的世界的时候,经常为一些材料而发愁,去收集又比较浪费时间,所以就有了一些"农场"存在.比如我们在做一些红石装置的时候,经常需要粘液球,前期只能去一些沼 ...

  4. jquery-12 折叠面板如何实现(两种方法)

    jquery-12 折叠面板如何实现(两种方法) 一.总结 一句话总结:1.根据点击次数来判断显示还是隐藏,用data方法保证每个元素一个点击次数:2.找到元素的下一个,然后toggle实现显示隐藏. ...

  5. centos下两种方法安装git

    centos 5 64位下两种方法安装git 这里来给大家介绍下编译安装和yum安装git.   系统:centos 5.5 64位   需要的软件包:git-latest.tar.gz epel-r ...

  6. mysql数据库导入到excel表格数据_[转载]将EXCEL表格中的数据导入mysql数据库表中(两种方法)...

    今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命上网查阅方法,发现以下两种方法比较可行: 在此之前先说说按照网上的说法我没有试验成功的方法,将excel文件xls保 ...

  7. cpp 怎么连接mysql_C++连接mysql数据库的两种方法

    现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多.通过网上的一些资料和自己的摸索,大致清楚了C++连接m ...

  8. PHP教程:WebService最常用的两种方法

    国内用PHP写WebService的真的很少,网上资料也没多少,公司的项目开发过程中,经历了不少这方面的东西,写出来以供大家参考(谢谢老农提供的WSDL和程序文件) 客户端 代码: 01.   02. ...

  9. tableau linux无网络安装_举个栗子!Tableau 技巧(110)两种方法实现正态分布 Normal distribution...

    关于正态分布 正态分布(Normal distribution),也称"常态分布",又名高斯分布(Gaussian distribution).正态分布是统计学中一个重要的概率分布 ...

最新文章

  1. linux与安卓系统目录,android系统架构及源码目录结构
  2. hdfs的实验总结_实验2-熟悉常用的HDFS操作.doc
  3. R语言聚类算法之期望最大化聚类(Expectation Maximization Algorithm)
  4. WEB-INF目录结构
  5. HTML里face作用,html5 – @ font-face在子文件夹中的字体时不起作用
  6. Linux从用户层到内核层系列 - GNU系列之glibc介绍
  7. Flask集成Markdown文本编辑器
  8. 强烈推荐APP破解常用工具集合!最强总结
  9. python数据科学导论_R与Python手牵手:数据科学导论系列(包的载入)
  10. 音频硬件发展史,以及DSD是如何产生的 一起说一说音频
  11. 我所遇见的bug 系列1 win7在生成的程序里,播放音频时没声音
  12. Linux CentOS 系统实战笔记-基础篇
  13. WPS(word)批量给所有表格添加题注(标题)
  14. 在Delphi中很精确地控制生成的WORD文档的格式
  15. android 信息添加附件功能,网易邮箱Android新版 添加附件可直接预览
  16. bmob php支付,个人开发者也能盈利!Bmob支付SDK使用实例
  17. android小电脑,废旧笔记本电脑纯手工改装“安卓小电脑”,太赞了!
  18. element-ui快速使用(使用element-ui做一个表格)
  19. 2021-09-13项目部署
  20. 免费查重可以一直使用吗? ​​

热门文章

  1. ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值——bug调试记录
  2. DL之YoloV3:YoloV3论文《YOLOv3: An Incremental Improvement》的翻译与解读
  3. Matlab:利用Matlab实现布朗运动模拟
  4. Crawler:基于splinter.browser库实现爬取12306网站来实现快速抢票
  5. java_OA管理系统(一):Servlet总结案例仿网络聊天室
  6. 决策树-缺失值和连续值处理及属性划分
  7. macOS上实现Qt应用程序做文件关联打开
  8. jQuery选择器整理
  9. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何设置PLC的扫描周期,运行周期
  10. 蓝牙4.0 vs 蓝牙4.1 vs 蓝牙4.2 vs 蓝牙5.0