我可以在内存中搜索特定的对象结构吗?

时间:2014-02-13 07:05:01

标签: c# memory

昨晚我骑了CheatEngine,我在游戏中找到了一个结构。游戏有4个字符,每个字符都有" health"和" mana",这两个都是4个字节(int)。有没有办法可以扫描应用程序以找到第一次出现?

我发现玩家1的健康状况位于2DC2E72C,我将其缩短为" 72C"因为之后其他球员的健康状况非常准确。

  • 玩家1健康:72C
  • 玩家2健康:81C
  • 玩家3健康:90C
  • 玩家4健康:9FC

经过我可信赖的微软计算器的一些手工操作后,我发现每个玩家之间的健康状况是240字节。玩家法术力是4个字节,在健康状态后立即放置,因此结构为:

  • 000 Player 1 health
  • 004 Player 1 mana
  • 240 Player 2健康
  • 244 Player 2 mana
  • 等等。

所以我的问题是,我可以在应用程序内存中搜索此模式吗?该模式将是以下行:2x4字节,240字节,2x4字节,240字节....

3 个答案:

答案 0 :(得分:0)

如果您有包含内存内容的文本文件,则可以使用正则表达式搜索所需的模式。 Boost有一个很好的正则表达式库。

答案 1 :(得分:0)

我认为没有managed方法可以做到这一点。

然而,CheatEngine是一个开源程序,它做同样的

http://www.cheatengine.org/

也许您可以查看源代码并找出使用C#实现相同的API调用

更新:我知道,你已经提到过CheatEngine,第一次忽略了它。 我在CodeProject上发现了这篇文章http://www.codeproject.com/Articles/15680/How-to-write-a-Memory-Scanner-using-C

看起来很简单

答案 2 :(得分:0)

如果我没记错的话,当天有一个叫做FreeCheese的作弊程序。它的工作方式是这样的:

  1. 从用户输入中获取搜索值
  2. 扫描游戏的进程内存,查找与用户输入匹配的任何值 商店找到地址
  3. 要求用户更改游戏的值,然后选择 新值作为输入
  4. 重新扫描步骤2中的地址并丢弃与新值不匹配的地址
  5. 重复步骤3和4,直到找到始终反映用户指定的更改的地址(地址数)
  6. 要求用户输入新值并将该值写入找到的地址
  7. 第6步很棘手,因为您需要进行类型/大小检查以确保您可以实际应用新值。

    快乐作弊:)