因此,在给定游戏中,有一些物体随机放置在地图周围。我设法(通过在作弊引擎中使用内存)发现,当某个对象在我的绘制距离之内时,单个值会发生变化。它是0或1的布尔值。我曾希望能够搜索这些对象的位置(基于我在x和y中对象在N,E,S和W的位置的间隔)惊讶地发现在此范围内未找到任何值!我是否可以通过某种软件/方法来解决此类问题?

我意识到这是一个广泛的问题-我不想将其局限于特定的游戏,因为我希望将该方法应用于多个游戏。如果还有其他方法可以使问题更狭窄,请在评论中说出来,我将进行修正!

#1 楼

我假设应用程序是用Visual C ++编写的。

CheatEngine本身对于查找对象已经非常有用-首先,您需要在代码中找到创建这些对象的位置。例如,在C ++中,您将编写:

GameObject* obj = new GameObject();


在汇编中,通常内联到malloc调用中。因此,如果您使用IDA Pro之类的工具更准确地对装配进行反向工程,您可能会看到类似以下内容的东西:

大小始终为64字节(这只是一个示例,因此您的具体程序可能会有更大的对象)。

如果在Visual Studio中启动程序(文件->打开。解决方案..-> YourProgram.exe),可以强制其使用Windows调试堆,这将使您能够遍历所有动态分配的堆节点并过滤出所有大小为64字节的节点。

现在您应该拥有大量潜在的GameObject指针,并且最终过滤级别将检测一些基本模式-例如,如果该类使用虚函数,则该对象的第一个字段将是其VTable条目,因此,您可以轻松地识别它是否是GameObject。

这可能不是一个完整的示例,但应为g足够使您朝正确的方向前进。

评论


如果找到vtable,则可以使用作弊引擎扫描内存以查找指向它的指针

– osvein
17年12月6日15:37