如何检测更改的内存数据?

时间:2012-01-05 16:53:07

标签: c windows security

我正在研究Windows编程,我有一些问题。

我看到了一个保护内存数据的安全模块。 如果一个进程要更改其他进程内存,它会检测并关闭进程。

这通常用于游戏或银行应用程序中的反作弊引擎(我住在韩国,所以我认为这是最好的例子。几乎每个在线游戏或银行应用程序都有自我防御算法。 )

我的问题是,是否有任何API或功能检测到这一点?

感谢。

P.S。 我可以举个例子,

如果 0x01000000 内存数据&#39; <&#39; ,某些不同的流程会将其更改为&#39; B&#39; 。 当我第一次想到这一点时,我认为我必须创建一个线程来检查数据,如果它发生了变化,请关闭该过程。 但我认为这不是一个好主意。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您的问题的一般答案:不,没有这样的API或功能。

但是有不同的方法可以达到相同的效果。 Api挂钩。您可以在系统中挂钩函数(例如WriteProcessMemory),然后检查是否有人试图在您的过程中更改某些内容。有关此问题的更多信息here。 2.调试。您可以在函数或内存更改上使用调试断点。

答案 1 :(得分:0)

an API 允许您监视对特定内存区域的写入操作。

UINT GetWriteWatch(
  DWORD     dwFlags,
  PVOID     lpBaseAddress,
  SIZE_T    dwRegionSize,
  PVOID     *lpAddresses,
  ULONG_PTR *lpdwCount,
  LPDWORD   lpdwGranularity
);

当 API 检测到任何写入操作时,它会将写入地址附加到您作为 API 参数提供的数组中,直到您的数组已满。