如何在外部程序中使用通过内存扫描程序发现的数据?

时间:2011-08-31 18:59:04

标签: c assembly

所以,有些背景:我正在使用一个名为cheat engine的内存扫描程序来获取非开源视频游戏中游戏统计数据的实时值(例如hp,mana,exp)试图制作机器人。

为了让我的机器人有效地使用这些信息,我需要及时将欺骗引擎(或具有类似功能的任何内存扫描程序)从我的机器人代码中获取。

现在,一个显而易见的方法是将所有信息保存到文件中,然后在我的机器人代码中加载文件,但由于这些数据需要大约每半秒更新一次,这不是一个真正的解决方案。

我真正需要的是一个非常方便的内存扫描程序,它允许您在一些编程语言(最好是java,c或matlab)中使用您发现的信息作为一组变量,或者一种访问内存地址的方法发现有上述语言之一。

后一个选项应该是可行的,因为作弊引擎提供了内存地址,控制进程ID和数据类型。

6 个答案:

答案 0 :(得分:10)

这个问题没有一个简单的答案。据我所知,你对这个领域很新,所以你真正需要的是对该主题的正确的介绍,为此,我建议阅读Exploiting Online Games: Cheating Massively Distributed Systems

这是一本很棒的书,它以一种详细的方式展示了游戏黑客的工作方式,并且它专门用了整章来介绍如何构建僵尸程序

如果要编写应用程序以读取/写入这些内存地址的数据,则需要调查ReadProcessMemory()WriteProcessMemory()等函数。无论您选择何种语言来实现机器人,都需要提供对Windows API的访问权限。这是必需的,因为你必须操纵另一个进程的内存空间。

Thereare lots tutorials显示如何使用 C C ++ 执行此操作因为他们是做这种东西的首选语言。另一种选择是使用macro tool,如果你想要一些简单的play the game for you

现代计算机游戏实施了自己的反作弊机制,使像(和我)这样的人更加困难。由于this book提出了攻击和防御技术,我建议任何对如何利用计算机游戏感兴趣的人。 这本书充满了代码示例

我很抱歉没有提供更多信息,但过去曾因为好奇心帮助别人而受到批评,我也绝不会比书中的作者解释如何做这些事情做得更好。

答案 1 :(得分:0)

尝试使用Lua界面来获取所需内容。

这是一个例子(我没有尝试过,但我认为它有效......)

http://forum.cheatengine.org/viewtopic.php?t=530047

答案 2 :(得分:0)

您可以在一方使用COM和Lua中的脚本(LuaCOM),另一方使用Matlab或C

答案 3 :(得分:0)

您需要使用调试库来执行此操作。您可以在变量的位置设置一个观察点,当它触发时,您将获得其值。

scanmem为Linux做了这个。

不幸的是,许多封闭源游戏都不遗余力地避免使用调试器,所以这不会对你的游戏产生影响。

答案 4 :(得分:0)

你试过Visual VM吗?

http://visualvm.java.net/download.html

答案 5 :(得分:0)

Cheat Engine是开源的,所以你要做的是查看Cheat Engine的源代码,看看内存转储是如何工作的。

然而,监视一个你没有控制的实时进程是非常重要的,所以除非你是11级的黑帽代码向导,否则我怀疑它不起作用。

即使你说你想要查看一些可以猜测内存转储的整数,但要以编程方式,一致地找到该区域要困难得多,同时可能会因为数据被复制或者复制而频繁地进行重新跟踪。当程序状态发生变化时移动。

另请阅读Cheat Engines常见问题解答中这一令人鼓舞的引用:

  

问:Cheat Engine会在网络游戏上运作吗?

     

答:大部分时间都没有

但无论如何,尝试一下 - 这听起来很有趣,我相信你会学到一些东西,并且你总有机会让它发挥作用: - )