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

主题说了这一切。 正常的防病毒必须拦截所有的文件访问,扫描文件,然后可能拒绝访问文件(甚至可能显示提示给用户)。 如何才能做到这一点?

我知道一个叫API挂钩的方法,但这是一个非常脏的无证黑客 – 因此并不是真的可靠。 什么是这样做的“官方”方式?

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

在最近版本的Windows(至lessXP以上)中,有一个概念“filter”,可以使用MSfilterpipe理器来查看(fltmc.exe从命令提示符)

这提供了AV程序可以访问的低级I / O挂钩,并自动注册以将所有I / O请求传递给文件系统。 这是一个工具包,你可以得到驱动程序开发自己的filter。

http://www.microsoft.com/whdc/driver/filterdrv/default.mspx是深入了解信息的起点。;

正如您已经注意到的那样,挂接是“实时”保护所具有的现成AV软件的关键。

你可以看一下(广泛讨论的)winpooch,它已经做了API Hooking,但是这个软件有一些主要的缺陷。 Winpooch的Sourceforge

另外还有一篇关于API hooking的Codeproject的文章,提供了一些库来做“三层”挂钩。 Dll注入有点困难,因为你可以形象。 CodeProject:EasyHook,重新创buildAPI挂钩

因为您可能对防病毒策略感兴趣,所以我也build议看看ClamAV或WinClam,它是开源(在GPL下) ClamAV for windows

但我不知道如何做API与C#钩,我不得不承认。 在C / C + +这是(相当)容易…

添加您可能对FileMon是一个广为人知的文件系统监视器的来源感兴趣,这个文件系统监视器曾经由SysInternals和Microsoft现在使用过:它使用Microsoft提供的驱动程序过滤API,至less称为“脆弱”。

链接可以在这里findSysinternals论坛

通过文件系统filter驱动程序 。 然而,实施这样的司机是相当复杂和“脆弱”的。

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

您可以自己创build一个微filter,但是对内核模式代码的维护和支持可能不是微不足道的,尤其是没有内核模式的开发经验。 其中一个问题是各种filter之间的冲突。

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

一般来说,这些产品拦截函数来获得一个像OpenProcess或NtOpenProcess这样的进程的HANDLE。 他们还在远程进程中挂钩了CreateRemoteThread函数和内存分配:VirtualAlloc和VirtualProcect。 一些AV也钩住SetWindowsHookEx函数来检测全局钩子以避免键盘logging器。

挂钩这些API,他们可以控制哪些模块(或dll)可以访问远程进程,并只允许用户知道他们在做什么。

您可以使用HookShark查看每个AV产品截取的用户模式function。

为了让你自己的用户挂钩,你可以使用弯路库,但是你必须开发一个代理来运行你的进程内钩子,然后与代理服务器通信。 您也可以使用Deviare API Hook ,这是一个使所有复杂的工作人员都可以使用任何编程语言在您自己的过程中编写钩子的框架。

你可以阅读关于从微软的弯曲库 ,并免费试用 – 它允许你写在用户模式钩子在C#中。 不需要你了解驱动程序:]

然而 – 对于内核模式的钩子 – 你需要知道c和DDK – atleast afaik:[

而且大多数现代反病毒软件拦截了不less的调用 – registryAPI,线程和进程API等 – 而不仅仅是文件系统API。 再次 – afaik。

编辑:也有一些开源的rootkit – 谷歌他们,看看他们如何执行他们的挂钩,这将是教育,我想。