【问题标题】:Detect if process memory being manipulated?检测进程内存是否被操纵?
【发布时间】:2014-08-31 08:06:37
【问题描述】:

我想知道如何监视另一个应用程序的进程内存并查看它是否被第三方操纵。比如ReadProcessMemory、WriteProcessMemory 是在特定进程上调用的。例如,nProtect GameGuard 可以检测游戏进程内存何时被操纵。

【问题讨论】:

  • 你到底想完成什么?
  • 我想检测何时在我的应用程序上调用 OpenProcess、ReadProcessMemory、WriteProcessMemory。不过我想通过一个单独的程序来监控它。
  • 可能是系统范围的排序钩子。你会注入到每个进程中,并监控它们对函数的调用,如果进程 id 与你的匹配,你会照做吗?

标签: c++ memory memory-management


【解决方案1】:

真正的答案可能很冗长,所以这里有一些简短的提示。

首先,您需要一些系统范围的挂钩来连接这些函数,以及它们的低级构建块(Zw...、Nt...,甚至系统调用)。这应该由内核驱动程序完成。

其次,您需要一种方法来安装此驱动程序,并随意将其删除。这可以通过服务来完成。

第三,您需要一种在内核驱动程序和游戏之间进行通信的方法。在初始化阶段,游戏将安装驱动程序,并告诉它游戏正在运行哪个进程 ID。然后驱动程序将阻止其他进程对该特定进程的所有访问。

第四,您需要维护一个白名单。防病毒等应用程序确实需要窥探您的游戏。您的内核驱动程序必须允许这些检查通过。这就是 nProtect 和类似技术失败的地方。他们只是不断与其他软件发生冲突。

第五,也许是时候考虑其他方法来保护您的游戏了。 David Aucsmith 的论文“Tamper Resistant Software: An Implementation”值得一读。

【讨论】:

  • 谢谢,我想我会同意你的第五个建议。我希望它不必如此具有侵略性。
  • 很抱歉在旧线程上发帖,但这也是一本好书。尽管它采用了稍微不同的方法,但它引入了许多检测和抵消内存操作的好方法,包括散列/冗余。 research.microsoft.com/en-us/um/people/venkie/…
猜你喜欢
  • 2021-10-24
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多