Windows防病毒如何挂钩到文件访问过程?

Vil*_*lx- 28 windows antivirus

主题说明了一切.普通的防病毒软件必须拦截所有文件访问,扫描文件,然后可选地拒绝访问文件(甚至可能向用户显示提示).如何才能做到这一点?

我知道一个名为API挂钩的方法,但这是一个非常脏的无证件黑客 - 因此并不是真的可靠.这样做的"官方"方式是什么?

或者,我会感兴趣拦截可执行模块(.DLL,.EXE等)的加载,而不仅仅是任意文件读取.

And*_*rew 30

在最近的Windows版本中(至少从XP开始),可以使用MS Filter Manager查看"过滤器"概念,(命令提示符下的fltmc.exe)

这提供了一个低级I/O挂钩,AV程序可以访问并自动注册以将所有I/O请求传递给文件系统.这是一个套件,您可以获得驱动程序,以开发自己的过滤器.

http://www.microsoft.com/whdc/driver/filterdrv/default.mspx是获取深度信息的起点.


Mar*_*tus 10

正如您已经指出的那样,挂钩是具有"实时"保护功能的现成AV软件的关键.

您可以查看(已广泛讨论过的)winpooch,它已经进行了API挂钩,但该软件存在一些主要缺陷.Winpooch的Sourceforge

关于API挂钩的Codeproject还有一篇文章,提供了一些"三层"挂钩的库.Dll Injection有点难,因为你可以成像.CodeProject:EasyHook,重新发明API挂钩

由于您可能对防病毒策略感兴趣,我还建议您看看ClamAV或WinClam,它是开源(在GPL下)ClamAV for windows

但我不知道如何用C#进行API挂钩,我不得不承认.在C/C++中,这非常容易......

ADD ON 您可能对FileMon的来源感兴趣,FileMon是一个广为人知的文件系统监视器,曾经由SysInternals和现在由Microsoft发布:它使用Microsoft的Driver-Filter API,至少称为脆弱.

链接可以在Sysinternals论坛中找到


Luc*_*ero 6

通过文件系统筛选器驱动程序.然而,实现这样的驱动程序非常复杂且"脆弱".


Eug*_*its 5

使用文件系统过滤器驱动程序监视文件访问,该驱动程序在内核模式下工作。过滤器驱动程序不仅可以收到有关文件系统操作的通知,还可以更改通过过滤器传递的数据或拒绝文件系统请求。

您可以自己创建微过滤器,但内核模式代码的维护和支持可能并非易事,尤其是没有内核模式开发经验的情况下。问题之一是各种过滤器之间的冲突。

我们公司提供CallbackFilter产品,它提供了一个即用型驱动程序,允许您在用户模式下编写与过滤相关的业务逻辑。