用c ++进行内存扫描

时间:2013-09-13 04:47:31

标签: c++ winapi visual-c++ memory

我正在 Visual Studio 2010中 WIN32项目 。我正在尝试通过ClamAV(开源防病毒)引擎扫描我的主内存,以搜索主内存中的恶意/受感染文件。

我到目前为止编写的代码通过使用windows函数 CreateToolhelp32Snapshot

创建整个主内存的快照

然后我从快照中打开一个特定的进程,并将其传递给ClamAV引擎,然后引擎决定它是否是恶意的。并且我每隔10秒重复一次整个机制。但我认为这不是一种有效的方式,

我想要做的是扫描整个内存一次,之后我只扫描主内存中新创建的进程。请指导我有没有办法从内存中获取新创建的方法,而不是整个内存

1 个答案:

答案 0 :(得分:1)

我认为它不能完全在用户空间程序中完成。 我对Windows API不是很熟悉,但我可以给你一些粗略的提示。

  1. 您应该扫描每个程序之前执行它。
  2. 使所有内存成为稍后分配的程序不可执行(NX位)
  3. 程序在尝试执行时会触发页面错误,现在扫描!!
  4. 使扫描内存只读,然后继续执行
  5. 程序尝试编写此区域后,再次将其设置为不可执行
  6. 注意:如果您想确保安全性,内存区域 NEVER 可以同时变为可执行和可写。

    通过这种方式,您只需要检查正在执行的内存。它应该非常有效。