C++ 中的内存扫描

Memory Scan in c++

本文关键字:扫描 内存 C++      更新时间:2023-10-16

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

到目前为止,我编写的代码通过使用Windows函数CreateToolhelp32Snapshot创建整个主内存的快照

然后

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

我想做的是扫描我的整个内存一次,之后我只扫描那些在主内存中新创建的进程。请指导我有什么方法可以仅从内存而不是整个内存中获取新创建的方法

我认为这不能纯粹在用户空间程序中完成。我对Windows API不是很熟悉,但我可以给你一些关于如何做的粗略提示。

  1. 您应该在执行每个程序之前对其进行扫描。
  2. 使以后分配的所有内存都不可执行(NX 位)
  3. 该程序在尝试执行时将触发页面错误,立即扫描!
  4. 将扫描的内存设为只读,然后继续执行它
  5. 一旦程序尝试写入此区域,使其再次不可执行

注意:如果要确保安全性,内存区域永远不能同时变为可执行和可写。

这样,您只需检查正在执行的内存。而且它应该非常有效。