这个主题说明了一切。正常的杀毒软件必须拦截所有文件访问,扫描文件,然后有选择地拒绝对文件的访问(甚至可能向用户显示提示)。如何做到这一点?
我知道有一种叫做API hooking的方法,但这是一个非常肮脏的未经记录的黑客攻击--因此并不是真正可靠。做这件事的“官方”方式是什么?
或者,我会对拦截可执行模块(.DLL、.EXE等)的加载感兴趣,而不仅仅是任意文件读取。
发布于 2009-10-07 13:59:49
在windows的最新版本(至少是XP以上)中,有“筛选器”的概念,可以使用MS筛选器管理器(命令提示符中的fltmc.exe)查看它。
这提供了一个低级I/O钩子,AV程序可以访问该钩子并自动注册,以便将所有I/O请求传递给文件系统。这是一个工具包,您可以获得驱动程序,并为其开发自己的过滤器。
http://www.microsoft.com/whdc/driver/filterdrv/default.mspx是获取深度信息的起点。
发布于 2012-06-19 04:53:33
正如您已经注意到的,挂钩是具有“实时”保护的现成反病毒软件的关键。
你可以看看(被广泛讨论的) winpooch,它已经做了API钩子,但是这个软件有一些主要的缺陷。Sourceforge of Winpooch
还有一篇关于API hooking的Codeproject文章,提供了一些“三层”钩子的库。正如你所想象的,Dll注入有些困难。CodeProject: EasyHook, reinvention of API Hooking
由于您可能对防病毒策略感兴趣,我还建议您看看ClamAV或WinClam,它是开源的(在GPL下) ClamAV for windows。
但我必须承认,我不知道如何用C#来做API钩子。在C/ C++中,这(相当)容易...
ADD ON你可能会对FileMon的源代码感兴趣,这是一个广为人知的FileSystem监视器,曾经是SysInternals的,现在是微软的:它使用了微软的驱动程序过滤器API,这至少是众所周知的脆弱。
Link may be found here in Sysinternals forum
发布于 2009-10-07 13:58:04
然而,实现这样的驱动程序是相当复杂和“脆弱的”。
https://stackoverflow.com/questions/1531800
复制相似问题