我使用 AVG,它最近检测到病毒。它以前有;)但这是我第一次注意到这一点。
当我进入包含病毒的文件夹时,AVG 立即自动检测到病毒,甚至无需我点击应用程序。因此,即使我什至没有单击(单击)它,它怎么可能知道病毒存在。
唯一可能的答案是它不断检查所有窗口的资源管理器文件夹位置并扫描文件夹中的所有文件。但是它如何查看我正在查看的文件夹?
请(如果可能的话)用一个 C 程序来解释 AVG 曾经做过的事情。
另外:如果有帮助,我会使用 Windows。
当你打开一个文件夹时,会执行一堆文件系统操作(你可以使用类似的工具FileMon
或者ProcMon
看看这个)。您的 AV 软件监控文件访问。有多种方法可以进行这种监控,例如过滤器驱动程序- 您可以在http://www.codeproject.com/Articles/43586/File-System-Filter-Driver-Tutorial找到一个很好的示例
所以当你打开文件夹时,杀毒软件注意到你打开了一个目录,查阅了它自己的数据,并通知你病毒。
我说“查阅自己的数据”,因为 AV 工具通常不会在访问文件时扫描文件——它们会在文件被写入时进行扫描,因为扫描标记为干净的文件没有意义t 自上次扫描后发生变化。
大多数病毒扫描程序都根据API 挂钩/过滤器的原理进行操作。每当 windows 需要处理命令时,例如打开文件夹、单击窗口、执行文件等,它都会生成一个 api 调用以及一些信息,例如单击的窗口坐标或表示文件的字符串。其他程序可以请求一个或多个这些函数的钩子,这些函数基本上是说“不要执行这个函数,先把它发给我,然后我可能会把它发回去”。这是有多少病毒起作用(例如,阻止您删除它们或复制您的击键),有多少游戏/应用程序起作用(键盘、操纵杆、拖放),以及恶意软件检测器和防火墙。
后一组挂钩命令,检查任何传入的命令以查看它们是否在级别上,然后允许它们恢复或阻止它们。在这个例子中,打开文件夹很可能触发了解析目录的系统调用,扫描器也解析了它(例如“实时保护”)。要查看所有可挂钩函数以及正在使用它们的函数,请在 Google 上搜索一个名为“健全性检查”的免费程序(以前称为“rootkit 钩子分析器”)。大多数红色条目将来自 windows 防火墙或 avg,所以不要太担心你会发现什么。