游戏辅助 (二) | FPS游戏查找敌人坐标

  • 游戏辅助
  • 2020-07-29 18:59:23
  • 浏览 80
简介通过一款经典的FPS游戏,分析学习游戏开发的原理,游戏辅助的原理,以及游戏数据是如何存储的,边学边思考

在游戏的编程设计中,一般都会使用列表或者数组来存放整个地图或者房间的游戏人物,那么,思路就是通过查找下一个游戏人物的地址,用来对比当前角色的地址,得到偏移多少数据,然后就可以通过不断的累加或递减该偏移得出所有人物的地址了。

敌人坐标

找敌人的基址,也是从敌人的坐标开始找,已知本人坐标,靠近敌人,那么敌人的坐标也应该在自己的坐标附近。

可以通过搜索类似区间的值,快速确认敌人的坐标。

当敌人移动的时候,Z 轴数据发生变化了,再次搜索减少或者增加的数值,重复步骤直到数量比较少的时候。

敌人已经移动到比原来低的位置了,此时再次搜索减少的数值。

敌人再次移动,Z 轴数据发生变化了。

位置比原来的高,此时再次搜索增加的数值。

分析数据

重复搜索到比较少的数据后,分析一下哪些数据可能是敌人的坐标 Z 轴,将搜索到的地址加入到地址列表里,先锁定一部分地址的数值,观察敌人是否还可以改变高度位置,如果还可以,则不是这些地址决定敌人位置的 Z 轴,删除掉后继续锁定其余地址。

逐渐排除非正确的地址后,发现有一些数据锁定后,敌人无法改变高度位置了,例如人物进入地图里,或者腾空行走,就是锁定到影响 Z 轴的地址了。

重复锁定排除,最终确定该地址的数值决定敌人的 Z 轴位置。

这个地址并不是基址(CE 里面绿色的),右键找出是什么访问了该地址。优先查看 mov 指令的代码,这里的偏移 288 和游戏里本人坐标的偏移一样。

搜索指针的数值 2BD83270 得出一堆地址,其中就有一个绿色的基址,和本人坐标几乎一样,只有一点点差别。

将这个地址添加到地址列表,加上指针偏移。

游戏里面反复跟随敌人跑动,验证数据确实是敌人正确的 Z 轴坐标。

推断数据

本人的 Y Z 轴的数据分别是偏移减十六进制的 4 ,那么敌人的应该也是一样,因为写代码的时候人物对象的数据结构是一样的。

再继续推断人物列表数据中,每一个人物对象的地址差是多少,本人的基址是 server.dll+4F2FEC 而敌人的基址是 server.dll+4F2FFC,两个偏移之间相差的是一个十六进制的 10 。因此,再下一个人物的地址偏移就应该是 server.dll+4F300C 了,十六进制运算 4F2FFC + 10 = 4F300C。

在游戏里继续添加一个敌人,在 CE 里手动添加地址,验证推断数据,得出下一个敌人的坐标也是正确的。

文章评论