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

时间:2009-10-07 13:54:50

标签: windows antivirus

主题说明了一切。普通的防病毒软件必须拦截所有文件访问,扫描文件,然后可选地拒绝访问文件(甚至可能向用户显示提示)。怎么办呢?

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

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

6 个答案:

答案 0 :(得分:29)

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

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

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

答案 1 :(得分:10)

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

你可以看看(已广泛讨论过的)winpooch,它已经进行了API挂钩, 但是这个软件存在一些重大缺陷。 Sourceforge of Winpooch

还有一篇关于API挂钩的Codeproject的文章,提供了一些库 做“三层”挂钩。尽管如此,Dll Injection有点难 图片。 CodeProject: EasyHook, reinvention of API Hooking

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

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

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

Link may be found here in Sysinternals forum

答案 2 :(得分:6)

通过File System Filter Driver。但是,实施这些驱动程序非常复杂且“脆弱”。

答案 3 :(得分:4)

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

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

我们公司提供{{3}}产品,该产品提供即用型驱动程序,并允许您在用户模式下编写与过滤相关的业务逻辑。

答案 4 :(得分:3)

您可以从microsoft阅读the detours library并免费试用 - 它允许您在c#中编写用户模式挂钩。你无需了解司机:]

然而 - 对于内核模式钩子 - 你需要知道c并玩DDK - 至少afaik:[

大多数现代防病毒软件都会拦截相当多的调用 - 注册表api,线程和进程apis等 - 而不仅仅是文件系统api。再次 - afaik。

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

答案 5 :(得分:3)

通常,这些产品会拦截函数以获取OpenProcess或NtOpenProcess等流程的HANDLE。它们还在远程进程中挂钩CreateRemoteThread函数和内存分配:VirtualAlloc和VirtualProcect。 一些AV还挂钩SetWindowsHookEx函数来检测全局钩子以避免键盘记录器。

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

您可以使用HookShark查看每个AV产品截获的用户模式功能。

要创建自己的用户挂钩,可以使用detours库,但必须开发代理来运行进程内挂钩,然后与代理服务器通信。 您还可以使用Deviare API Hook这是一个框架,它可以使所有复杂的工作人员使用任何编程语言在您自己的流程中编写钩子。