我正在 Visual Studio 2010 中处理一个 WIN32 项目。我正在尝试通过 ClamAV(开源防病毒)引擎扫描我的主内存,以在主内存中搜索恶意/受感染的文件。
到目前为止,我编写的代码通过使用 Windows 函数 CreateToolhelp32Snapshot 创建了整个主内存的快照
然后我从快照中打开一个特定的进程,并将其传递给 ClamAV 引擎,然后由引擎判断它是否是恶意的。我每 10 秒重复一次整个机制。但我认为这不是一种有效的方式,
我想做的是扫描我的整个内存一次,然后我只扫描那些在主内存中新创建的进程。请指导我有没有办法只从内存而不是整个内存中获取新创建的方法
最佳答案
我认为不能纯粹在用户空间程序中完成。 我对 Windows API 不是很熟悉,但我可以给你一些关于如何操作的粗略提示。
- 您应该在每个程序执行之前扫描它。
- 使所有内存成为以后分配的程序不可执行(NX位)
- 程序在尝试执行时会触发页面错误,现在扫描它!!
- 将扫描的内存设为只读,然后继续执行
- 一旦程序试图写入此区域,再次使其不可执行。
注意:如果要确保安全,一个内存区域永远不能同时变为可执行和可写。
这样你只需要检查那些正在执行的内存。而且它应该非常有效。
关于c++ - C++中的内存扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18778497/