查找游戏的玩家动画功能

逆向工程 ollydbg
2021-06-29 12:02:49

我目前正在对 2001 年的旧游戏进行小型多人游戏修改。现在,我可以通过反向找到的 X、Y 和 Z 坐标远程移动玩家。但是我不知道如何获得播放器的动画功能。我如何从这一点开始?在反汇编中,我应该搜索类似设置的状态(PlayerRun、PlayerTurnLeft 等),还是应该尝试追溯坐标设置的位置?

我有点卡住了,现在不知道如何开始。我正在使用 CheatEngine 和 OllyDBG。

编辑:我终于用 Cheat Engine 在内存中找到了动画状态值。将其更改为“跳跃”动画效果很好,但不适用于“移动”动画。可能游戏会检查用户是否按下了让玩家向前移动的键。反正我看了一下写动画状态的反汇编。我玩了一些跳跃和比较,在某些情况下,动画不会出现,这意味着我基本上处于正确的功能中。在这一点上我有点卡住了,因为我不知道如何找出正确的函数(有多个)及其参数。

1个回答

您是在寻找在客户端本地修改的函数,还是试图确定一个函数来处理传出坐标数据以远程移动玩家?对于这个答案,我将假设前者。我还将 100% 坚持使用 Cheat Engine。无论如何,这并不全面,但从动态分析的角度来看,它应该能让您朝着正确的方向前进。

您发现的坐标数据可能在某个时候通过您感兴趣的函数提供,但问题是当您的坐标数据通过指令传递时,您可能深入到子程序中。因此,您可以首先检查向您找到的三个坐标地址中的任何一个写入的内容。

您可能有多个结果,而且任何给定的结果都可能是共享指令,因此通过右键单击指令并选择查看指令写入的地址来检查它。如果经过一些测试后只弹出一个地址,那么您就可以开始了。

在反汇编程序中查看该指令后,您将进入某种可能与坐标数据相关的例程。它直接是您感兴趣的功能吗?这是您必须花一些时间倒车才能找到的地方。

在此过程中可能会对您有所帮助的几件事如下:

  1. Enumerate DLLs:在 Memory Viewer 窗口中,单击View -> Enumerate DLLs and SymbolsCE 可以收集到的与函数名称相关的任何信息都会在那里填充,因此您可以搜索您可能感兴趣的名称。可以在此处查看演示视频

  2. 剖析代码:在内存查看器窗口中,单击工具 -> 剖析代码这将在您反转时为您提供许多适用的附加信息,例如哪些 CALL 正在调用您可能会发现自己处于其中的例程等。

您还可以利用 CE 的中断/跟踪来查找传递给函数的参数。我喜欢从被调用的函数/方法的粗略视图开始,这导致了我所在的那个。为此,在 Break and Trace 窗口中,选中显示“Step over 而不是单步”的框。我还喜欢检查“保存堆栈快照”,以便我可以挑选一些东西。

最后,您可能需要考虑使用 Ultimap 或 Ultimap 2,可在“工具”下的“内存查看器”窗口中找到。它们允许您记录函数调用并过滤掉所有您知道不是您感兴趣的函数的调用。可以在此处此处查看两个讨论 Ultimap 的视频如果您的目标是 32 位,那么您可以使用一个很棒的小工具CDA:代码动态分析此处的教程视频)来做与 Ultimap 相同的事情,但以不同的方式(基于时间线)并且没有额外的麻烦的 Ultimap 需要 DBVM 才能工作(Ultimap 2 不需要 DBVM,但确实需要正确的 CPU,因为它利用了Intel Processor Trace)。