文件过滤驱动加载过程
文件系统过滤驱动
1 引言文件系统过滤概述文件安全性问题已成为当今信息科学领域最重要的课题之一。
目前,解决这个问题的主要技术手段有两种:一是利用应用层HOOK(钩子)技术,对Windows 提供的文件操作函数(API)及由文件操作所触发的Windows消息进行HOOK,经过适当的处理达到预期目的,缺点是效率低、稳定性和一致性差,不适合于大型系统的开发;另一种是开发文件过滤驱动程序,文件过滤驱动作为一种内核态中间层驱动,不需要改变下层驱动或用户程序而增加新的功能,具有效率高、可靠性强、可扩充等特点,成为现阶段信息安全技术研究的热点。
1.1 文件过滤驱动在信息安全领域的应用1 文件加/解密文件过滤驱动程序可以实现对指定文件、目录,甚至整个逻辑盘的加/解密功能。
当文件在写入磁盘的过程中,截获所有对该文件的IRP_MJ_WRITE,在其分发例程中对IRP携带的数据进行加密处理后写入磁盘;文件被从磁盘读取的过程中,截获所有对该文件的IRP_MJ_READ,在其分发例程中对IRP携带的数据进行解密处理后向上层返回。
加密后的文件在磁盘中以密文形式存储,保证了数据存储的安全性。
2 病毒防护应用程序在创建一个新文件或打开一个已存在文件时,文件系统过滤驱动程序截获IRP_MJ_create,判断被打开文件是否存在和病毒特征代码库相匹配的特征,若存在,说明文件感染了病毒,失败掉该IRP,拒绝打开;否则,使IRP继续向下传递,完成正常的打开操作。
3 进程控制为了防止恶意进程的破坏,有时需要规定只允许某些经过安全验证的特定进程对受保护的文件进行访问,其他不在规则范围内的进程不允许访问。
我们可以通过系统提供的PsGetCurrentProcessId、PsGetCurrentThreadId等API函数得到发起I/O请求的进程及线程的相关信息,如:获得发起进程名称,与安全访问规则(进程白名单)中的可信进程相比较,若该进程位于规则中,说明信任其行为是安全的,允许访问受保护文件;否则,拒绝访问。
Windows文件系统过滤驱动开发教程(第二版)
Hale Waihona Puke -1. 改版序大约两年以前我在驱动开发网上发表了一组描述如何开发 Windows 文件系统过滤驱动的文章。非常庆幸这些文章能 给大家带来帮助。
原本的文章中我使用了自己编写的代码。我不打算在这里论述代码风格的优劣并发起一场辩论,无可怀疑的是,读者们 大多喜欢看到类似微软范例的代码。为此我把文章中的代码换成微软标准的文件过滤驱动范例 sfilter 的代码。赠于喜欢此 书的读者和驱动开发的后来者们。
文件系统驱动和设备驱动的区别 以及介绍
文件系统过滤驱动以及设备驱动的区别一、何谓文件系统过滤驱动?文件系统过滤驱动是一种可选的,为文件系统提供具有附加值功能的驱动程序。
文件系统过滤驱动是一种核心模式组件,它作为Windows NT执行体的一部分运行。
文件系统过滤驱动可以过滤一个或多个文件系统或文件系统卷的I/O操作。
按不同的种类划分,文件系统过滤驱动可以分成日志记录、系统监测、数据修改或事件预防几类。
通常,以文件系统过滤驱动为核心的应用程序有防毒软件、加密程序、分级存储管理系统等。
二、文件系统过滤驱动并不是设备驱动设备驱动是用来控制特定硬件I/O设备的软件组件。
例如:DVD存储设备驱动是一个DVD驱动。
相反,文件系统过滤驱动与一个或多个文件系统协同工作来处理文件I/O操作。
这些操作包括:创建、打开、关闭、枚举文件和目录;获取和设置文件、目录、卷的相关信息;向文件中读取或写入数据。
另外,文件系统过滤驱动必须支持文件系统特定的功能,例如缓存、锁定、稀疏文件、磁盘配额、压缩、安全、可恢复性、还原点和卷装载等。
下面两部分详细的阐述了文件系统过滤驱动和设备驱动之间的相似点与不同点。
1、文件系统过滤驱动同设备驱动的相似点:下列部分描述了Windows操作系统中文件系统过滤驱动和设备驱动之间的相似点:(1)、类似的结构类似于设备驱动,文件系统过滤驱动有着属于自己的DriverEntry、Dispatch和I/O组件例程。
文件系统过滤驱动同设备驱动一样调用许多相同的系统核心例程,它们都会过滤发送给它们所关联的设备的I/O请求。
(2)、类似的功能:文件系统过滤驱动和设备驱动都是I/O子系统的组成部分,因此它们都接收和作用于I/O请求包(IRP)。
类似于设备驱动,文件系统过滤驱动同样可以创建它们自己的IRP并将该IRP发送到低层驱动。
这两种驱动均可以通过注册回调函数来接收多种系统事件的通知。
(3)、其它类似点:同设备驱动类似,文件系统过滤驱动可以接收传入的I/O控制码(IOCTLs)。
Windows 文件过滤驱动经验总结
P 后什么都不做,直接调用 IoCompleteRequest() 来返回。 (2) 拿到这个 IRP 后什么都不做,直接传递到底层设备,
使用IoSkipCurrentIrpStackLocation() 后调用 IoCallDriver() 传递。 (3) 使用 IoBui
ldSynchronousFsdRequest() 或 IoBuildDeviceIoControlRequest()来建立 IRP 的。
Windows 文件过滤驱动经验总结 1、获得文件全路径以及判断时机 除在所有 IRP_MJ_XXX 之前自己从头创建 IRP
发送到下层设备查询全路径外,不要尝试在 IRP_MJ_CREATE 以外的地方获得全路径,因为只有在 IRP_MJ_CREATE 中才会使
用 ObCreateObject() 来建立一个有效的 FILE_OBJECT。而 在 IRP_READ IRP_WRITE 中它们是直接操作
TION 等 IRP 不要去管它,因为它只是一个过程。最终读 写还是如上所介绍。至于以上这些 IRP 哪个是由 CC MGR 发送的,哪些是由
I/O MGR 发送和在什么时候发送的,这个已经有很多讨论了,相 信可以找到。
7、举例说明关于 IRP 传递与完成注意事项 只
看 Walter Oney 的那本 《Programming the Microsoft Windows driver model》里介绍的
其是你要达到一些特殊目的,这时候更需要注意,如 IRP_MN_QUERY_DIRECTORY,不同的标志结果有很大的不同。 3、从
头建立 IRP 获取全路径注意点 自己从头建立一个 IRP_MJ_QUERY_INFORMATION 的 IRP 获取全路径时需要注意,不
Windows文件系统的过滤器驱动程序设计
Windows文件系统的过滤器驱动程序设计西安电子科技大学李新摘要:某些应用程序对文件系统的性能有较高要求。
例如媒体播放器需要满足最小数据传输率才能保证视觉上的流畅。
由于Windows文件系统本身没有提供这样的保证,需要编写过滤器驱动程序添加这项功能。
本文首先介绍系统驱动体系和文件系统工作机制,然后分析文件系统过滤器驱动程序的功能特点,最后介绍一种满足此类应用程序传输带宽的总体解决方案(来源于文献1)。
关键词:文件系统过滤器驱动程序设备对象堆栈一.基础知识1.系统组件Windows NT操作系统含有许多功能相互独立的内核模式组件。
如内核I/O管理器、硬件抽象层、存储管理器、配置管理器、对象管理器、运行支持和过程结构等组件。
Windows 2000在此基础上增加了即插即用管理器和电源管理器。
两种系统分别采用不同的驱动模型。
本文整体上以Windows 2000的文档为主。
不过文件系统具有特殊性(非WDM),在两个系统中的运行机制基本相似。
在这些内核组件中,I/O管理器最为关键,它由文件系统、中间层驱动程序和最低层设备驱动程序三部分组成,对所有的核心态驱动程序提供统一的通信接口IRP(I/O请求包方式)。
应用程序的I/O操作都是通过这种方式调用I/O管理器的服务完成的。
主要服务有:配置管理、内存管理、对象管理、安全监视等等。
2.驱动程序驱动程序实质是能被操作系统加载调用,为系统设备实现相应功能的内核模式的动态链接库。
形式上可以看作是一个包含许多例程的容器。
当第一次安装时,由I/O管理器调用驱动程序入口函数DriverEntry,驱动程序在此进行自身初始化,设置其它例程的进入点,使操作系统接下来可以调用这些服务例程。
驱动程序加载时机与它的启动类型和启动组设置有关。
启动类型有五种,通常文件系统及其过滤器驱动程序属于SERVICE_BOOT_START或SERVICE_DEMAND_START。
驱动体系是分层的。
文件系统Minifilter驱动
文件系统Minifilter驱动声明:本系列文章源于WDK,所有权利归原作者所有,翻译的目的只为交流和学习。
除了商用你可以随意地使用这篇译文。
但请不要删除声明。
——by jununfly说明:所有preoperation及postoperation均简写为pre-oper和post-oper所有文件系统过滤驱动均简写为FSFD(文件系统过滤驱动)所有基于IRP的I/O即IRP-based I/O均简写为IRP-I/O版本:20090220Filter管理器和Minifilter驱动架构Filter 管理器是一个内核模式驱动,它遵照legacy文件系统filter模型并具有FSFD必需的功能。
利用这些功能,第三方开发者可以写 minifilter驱动,这样的驱动比legacy(陈旧的) FSFD更易于开发,因此缩短了开发过程同时制造出更高质量、更灵活的驱动。
本章包括:一、Filter管理器概念Filter管理器随Windows一起被安装,但它只在minifilter驱动被加载时才起作用。
Filter管理器被绑定到目标卷的文件系统栈上。
当Minifilter驱动要执行过滤I/O操作时,必须先向filter 管理器注册来间接绑定到文件系统栈上。
Legacy 过滤驱动在文件系统I/O栈中的位置,相对于其他过滤驱动来说是在系统启动时由它的加载顺序组决定的。
例如,一个antivirus过滤驱动在栈中的位置应该高于一个“复制操作”的过滤驱动,因而它能在文件被复制到远程服务器之前探测病毒并消除文件中的病毒。
因此,FSFilter Anti- Virus加载顺序组中的过滤驱动的加载要先于FSFilter Replication组中的过滤驱动。
每一个加载顺序组都有一个相应的系统定义的类和INF文件中要使用的类GUID。
像legacy过滤驱动一样,minifilter驱动的绑定也按照一定的顺序。
不过,绑定顺序是由altitude这个唯一标识符决定。
文件过滤驱动学习笔记1
文件过滤驱动学习笔记1文件系统过滤驱动,是在驱动级别上实现的,对文件系统的一举一动进行检测的一种技术。
这里仅指windows操作系统。
过滤包括文件打开、读写、重命名、删除,目录的操作等。
文件过滤非常有用,大多数实时监控的杀毒软件都会利用到这个技术。
从今天开始,分享在学习过程中的一些心得。
Wdk提供了一个sfile例子,供我们参考。
微软的习惯很好,在抛出一个新的东西之后,它的文档肯定有一个同步的跟进。
并且文档做得非常好,msdn,各种help。
比起google的android,微软的脚步走得更加坚实。
言归正传。
源文件在我电脑的路径是C:\WinDDK\6001.18002\src\filesys\filter\sfilter。
这个目录下有乱七八糟8个文件,而真正的代码只有sfilter.c一个。
让我们开始揭开它神秘的面纱吧。
看代码一般从入口开始看起。
DriverEntry。
sfilter的DriverEntry 做了三件事。
1填充MajorFunction,2填充fastIoDispatch,3注册文件系统变化回调。
1.填充MajorFunction这个不多说了,上层应用程序调用驱动时,就是利用这些接口。
比如CreateFile时候,会调用IRP_MJ_CREATE。
我们要进行过滤,就需要在这些例程中做事情。
2.填充fastIoDispatch这个我至今没看懂啥意思。
不过看雪上的高人都说,这个东西没必要管它,最多只是速度上的损失。
3.注册系统变化回调status = IoRegisterFsRegistrationChange( DriverObject, SfFsNotification );SfFsNotification这个函数是绑定设备控制对象的关键所在。
其重要性就在于,它能探测动态加载的卷设备,包括u盘等。
这里着重说说这个东西。
我们知道,驱动中实现过滤的一般方法就是绑定。
绑定一个我们自己的设备对象到设备栈顶,所有的IRP信息到来后首先到达我们的设备对象,从而可以优先获取系统信息。
WindowsNT内核下文件系统过滤驱动程序开发
收稿日期:2002209203.作者简介:李 凡(19432),男,教授;武汉,华中科技大学计算机科学与技术学院(430074).基金项目:国家高性能计算基金资助项目(00303).WindowsN T 内核下文件系统过滤驱动程序开发李 凡 刘学照 卢 安华中科技大学计算机科学与技术学院谢四江北京电子科技学院科研中心摘要:分析了基于N T 内核的WindowsN T/2000/XP 操作系统下文件系统过滤驱动程序的开发原理、步骤和应用,以实现动态的病毒扫描、透明的文件加密解密、文件保护和系统恢复等功能,保障了文件系统的信息安全.给出了一个实现透明的文件加解密的过滤驱动程序实例.关 键 词:WindowsN T 内核;过滤驱动;文件系统;IRP中图分类号:TP311.5 文献标识码:A 文章编号:167124512(2003)0120019203 在WindowsN T 和基于N T 内核的Windows 2000/XP 操作系统中,通常需要通过开发文件系统过滤驱动程序来保证文件系统的信息安全运行,主要包括动态病毒扫描、透明文件加密解密、文件保护和系统恢复等功能.文件系统驱动程序(File System Driver ,简称FSD )管理文件系统格式.WindowsN T 的文件系统驱动程序是I/O 子系统的一个组件,为用户提供在磁盘或者磁带等非易失性存储介质上存取数据服务.WindowsN T 的文件系统驱动程序和其他的设备驱动程序的一个主要的区别就在于文件系统驱动程序和内存管理器、高速缓存管理器有机的结合在一起,有着密不可分的关系.为了提高系统性能,FSD 通常使用高速缓存(Cache )管理器以高速缓存文件数据.FSD 还和内存管理器结合起来,以使内存映射文件能被正确实现[1].本文首先探讨文件系统过滤驱动程序开发的原理和步骤,然后给出一个实现文件透明加密解密的实例.由于WindowsN T/2000/XP 操作系统的文件系统过滤驱动程序开发有着很类似的方面,下文中如果没有特别说明,则是针对以N T 内核为基础的WindowsN T/2000/XP 操作系统而言的.1 文件系统过滤驱动程序开发 WindowsN T 的I/O 管理器是一个可扩展的结构,通过开发过滤驱动程序可以扩展I/O 子系统的功能.I/O 管理器支持分层驱动程序模型,每个I/O 请求包(IRP )的处理分别经过各层驱动程序,直到某层驱动程序完成这个请求.这样第三方开发的驱动程序就有机会插入到这个层次结构中并获得截获及处理来自上层的操作请求的机会,把这种驱动程序称为过滤驱动程序[2].文件系统过滤驱动程序是针对文件系统而言的.WindowsN T 的I/O 管理器根据用户的文件操作请求构造IRP 发到文件系统驱动程序,文件系统驱动程序把相应于文件系统的操作转换为相应于存储设备驱动程序的操作并通过I/O 管理器来调用存储设备驱动程序[3].I/O 管理器在发送操作请求到目标设备之前会检查是否有其他的设备附着于目标设备对象之上.通过构造附加的设备对象附着在文件系统或者存储设备对象之上,并为该设备对象指定专门的驱动程序,I/O 管理器就会把要发送到目标设备的请求先发到附加的过滤设备,在该设备对应的过滤驱动程序中对原始请求加入附加的处理来实现对文件系统操作的截取、监控甚至替换.文件系统过滤驱动程序可以附着在文件系统驱动程序之上,也可以加入到文件系统驱动程序和存储设备驱动程序之间,如图1所示.具体实现一个过滤驱动程序的基本步骤包括:构造一个设备对象(过滤设备)附着在目标设备上;在这个过滤设备对应的驱动程序(过滤驱动程序)中截取发送到目标设备的操作;在过滤操作中可能需要构造新的IRP 来驱动下层驱动程序,也可能需要为某个IRP 指定对应的完成例程以第31卷第1期 华 中 科 技 大 学 学 报(自然科学版) Vol.31 No.12003年 1月 J.Huazhong Univ.of Sci.&Tech.(Nature Science Edition ) Jan. 2003图1 文件系统过滤驱动程序在系统中的位置便这个IRP被下层驱动程序完成返回后调用;在合适的时候可以断开过滤程序[3].2 文件透明加密解密的过滤器实例 下面给出一个在WindowsN T下进行文件加密解密的过滤器具体实现过程.用户的数据在存储到磁盘上设定的安全区域(例如安全文件夹)之前经过了加密处理,读取时经过解密返回给用户,这个过程对用户来说是透明的.对这个安全区域访问时先要通过认证处理,这样就保证了安全区域里的数据安全.对于现有的Windows N T/ 2000/XP系列操作系统的文件系统本身来说,只是对Windows2000/XP支持的5.0版本以上的N TFS文件系统本身实现了加密文件系统(EFS).对所有文件系统分区的文件实现透明的加密解密并采用特殊的加密算法,就需要通过文件系统过滤驱动程序来实现.在文件系统驱动程序和硬盘驱动程序之间加入过滤驱动程序.当文件系统驱动程序写硬盘的时候,过滤驱动程序首先对数据进行加密然后再调用硬盘驱动程序.当文件系统驱动程序读硬盘的时候,过滤驱动程序先调用硬盘驱动程序读取数据并对从硬盘返回的已加密数据进行解密,然后再返回给文件系统驱动程序.过滤器在系统中位于文件系统驱动程序和磁盘驱动程序之间.要实现这个过滤器,首先需要把过滤器挂接在某个硬盘分区之上,可以在过滤驱动程序的Driver Entry例程或者应用程序中调用DeviceIo2 Control发送一个IOCTL请求驱动程序来挂接到硬盘上.该过程的函数调用过程为:由ZwCreate2 File得到硬盘分区的设备句柄,再用ObRefer2 enceObjectByHandle得到对应的FIL E-OBJ ECT 指针(WindowsN T把每个设备当作一个文件来看待,并有一个对应的FIL E-OBJ ECT结构描述其属性),调用Io G et RelatedDeviceObject得到硬盘分区设备对象指针.然后调用IoCreateDevice来构造代表过滤器的一个设备并为它指定驱动程序也就是过滤驱动程序.最后调用IoAttachDe2 viceByPointer把该设备挂接在硬盘分区设备上.这样文件系统驱动程序发送到这个硬盘分区设备的所有请求都会先经过过滤器.硬盘驱动程序由Driver Entry提供一系列的IRP处理函数供高层驱动程序调用.在过滤驱动程序中实现加密解密是通过截取IRP-MJ-READ和IRP-MJ-WRITE来实现的.在过滤驱动程序的Driver Entry例程中指定处理函数: DriverObject→MajorFunction[IRP-MJ-WRITE]=MyFilterWrite;DriverObject→MajorFunction[IRP-MJ-READ]=MyFilterRead.在IRP-MJ-WRITE的处理函数中如果需要加密处理就在非分页内存中分配一段与待写数据空间大小相同的内存,并把待写数据拷贝到这段内存中,对这段内存数据调用加密处理,建立这段内存的内存描述符MDL,更新IRP结构中的Irp→MdlAddress指向这个新建立的MDL,并记住原先的值.为这个IPR指定一个完成例程,接着调用下层的硬盘驱动程序写入已加密数据.硬盘驱动程序完成这个写操作并返回后,系统会调用指定的这个完成例程.在完成例程中恢复Irp→MdlAddress为原来的值并且释放原先分配的那段内存.在IRP-MJ-READ的处理函数中解密是一个近似相反的过程.先直接调用硬盘驱动程序取得数据,然后在它的完成例程中对读取的数据进行解密返回上层驱动程序.3 主要应用和展望基于文件系统过滤驱动程序可以实现动态的病毒扫描.文件系统针对病毒的安全措施有两种:一种是以杀为主的静态反病毒措施,另一种是以防为主的动态反病毒措施.动态的反病毒措施也就是对病毒实时监控,这个可以通过文件系统过滤驱动程序来实现.基本方法是在文件系统驱动程序上面加入一个过滤驱动程序来过滤被病毒感染的文件.这个过滤驱动程序先于文件系统看到I/O操作请求,在截取到上层传下来的写操作请求时如果侦测到病毒特征就拒绝这个请求,保证02 华 中 科 技 大 学 学 报(自然科学版) 第31卷硬盘数据的安全.另外,利用文件系统过滤驱动程序可以实现分级的存储管理.举例来说,一个系统中有两个存储设备,一个存取速度很快价格很昂贵;另一个存取速度较慢但是价格便宜.可以作一个过滤驱动程序附着在文件系统驱动程序之上来优化系统性能.把不常用的数据放在慢速设备上,当截取到对这些数据的操作请求时先把这些数据转移到快速设备然后再向下传递原来的操作请求到文件系统驱动程序,这样就可以在现有设备不变的情况下获得更好的系统性能.开发文件系统过滤驱动程序的用途在于它可以扩展、修改、甚至替代现有文件系统的操作而不用重新开发新的文件系统驱动程序.随着信息技术的发展和WindowsN T 应用的普及,文件系统过滤驱动程序的开发会有着更广泛的应用.参考文献[1]S olomon D A ,Russinovich M E.Inside microsoft win 2dows 2000,third edition.New Y ork :Microsoft Press ,2001.[2]Chris Cant.Windows WDM 设备驱动程序开发指南.孙 义,马莉波等译.北京:机械工业出版社,2000.[3]Nagar R.Windows N T file system internals.NewY ork :O.Reilly &Associates ,1998.Development of f ilter driver of f ile systeminside Windows NT kernelL i f an L i u X uez hao L u A n Xie S ijiangAbstract :The analysis of the principle ,process and application of the development of File System Filter Driver (FSFD )inside WindowsN T \2000\XP operating system based on WindowsN T kernel were made to achieve dynamic virus scan ,transparent file encryption/decryption ,file protection ,system recovery and ensure the information security of file system.An instance of realizing transparent encryption/decryption of disk file was given.K ey w ords :WindowsN T kernel ;filter diver ;file system ;IRPLi fan Prof.;College of Computer Sci.&Tech.,Huazhong Univ.of Sci.&Tech.,Wuhan 430074,China.韩国材料科学代表团来我校访问2002年12月5日,以中韩联委会委员、浦项科技大学Lee Sung Hak 教授为团长,韩国科学与工程基金会R &D 项目主任Sung Nak Won 教授、釜山国立大学Park Ik Min 教授、浦项科技大学K im Nack Joon 教授和汉阳大学Shin Dong Huuk 教授组成的韩国材料科学代表团一行5人访问我校.王乘副校长会见了来访客人.在化学系、材料学院共同组织的研讨会上,Sung Nak Won 教授介绍了韩国科学与工程基金会的情况,中韩两国的教授们还就新材料、新技术方面的研究进行了热烈交流和讨论.会后,代表团参观了化学系实验室、模具技术国家重点实验室和快速制造中心.12第1期 李 凡等:WindowsN T 内核下文件系统过滤驱动程序开发 。
重定向在文件系统过滤驱动中的实现及其应用
机 械 工 业 出版社 ,2 0 0 0.
[]NgrR iosN i S s m 2 aa 、Wn w T Fe yt d l e Ie a[] e o :0  ̄U n r l 、Nw Yr 、Pi tns M k e y&
Aso it s 1 8. s ca e . 99
I P MJ R
— —
C E E 分发 例 程 中完 成 主要 R AT 的 功 能 ,工作流 程如 图 3所示 。
英特尔硬件辅 助虚拟化 ( T) 术的 V 技 现 和运 用 , 使 同 ・ 物 理 台 同时 运 行 个 多 个 操 作 系统 、每 个 操 作 系统 运 行 一 个 应用程序变为 叮能 ,避免了同 个系统运 行多个应用的瓦相影响。这就需 要应用程 序 与操 作 系统 数 据 的 分 离存 储 ,来 保 证 用程 序 与 操 作 系统 的 动 态组 合 。 町以预 见 ,
基于磁盘过滤驱动的硬盘保护技术
基于磁盘过滤驱动的硬盘保护技术作者:魏希三,董巍来源:《电脑知识与技术》2009年第35期摘要:针对传统利用中断方式的磁盘保护有不少安全隐患,分析了一种基于磁盘过滤驱动的硬盘保护工作机制。
该机制的核心思想是在对上层操作系统透明的情况下,重定向对磁盘操作的I/O请求包,在重启系统后自动清除缓存数据。
由于工作在操作系统内核层增强了保护功能的安全性。
关键词:中断;过滤驱动;硬盘保护;I/ O 请求包中图分类号:TP334文献标识码:A文章编号:1009-3044(2009)35-10106-02The Technology of Hard-disk Protection Method Based on Disk Filter DriverWEI Xi-san1,2, DONG Wei2(puter School of Wuhan University, Wuhan 430072, China; puter Teaching Center, Xiangfan University, Xiangfan 441053, China )Abstract: The traditional method of disk protection using interrupted many security risks, analysis of a filter driver for hard disk-based protection mechanism. The core idea of the mechanism is operating in the upper transparent circumstances, the redirection operation of the disk I/O request packet, in the reboot the system automatically clear the cache data. As a result of the operating system kernel layer of enhanced security protection.Key words: INT; filter driver; hard-disk protection; IRP传统的硬盘保护软/硬件,主要是拦截和接管INT13H中断,比如现有常见的还原卡就是在引导系统前就预先修改中断表,用自己的处理函数替换了正常的INT13H,在上层系统对磁盘进行存取时,进行相应的偏移,这种保护技术几乎兼容所有的操作系统,并且对硬盘上的数据能起到完整的保护作用,但它消耗大量的存储空间(和被保护空间为1:1),不兼容特殊工作的硬盘(如SCSI硬盘),保护空间大小有限制(如DOS兼容模式的2.1G,LBA28位寻址的137G限制),并且容易被破解(找到原始的IHT13H的地址,修改即可)。
Win32汇编语言吐血之作-监视文件系统过滤驱动程序的驱动程序原代码
登记这些函数的目的是为了使WIN32程序能打开我们建立的符号连接。
并通过DeviceIoContrl来控制驱动程序的运行。
3)登记Unload,登记Unload是为了支持动态卸载。
[6]挂接的实现:(有点象病毒在挂文件系统)
ret
DriverEntry@8 endp
4)制作批处理文件m.bat内容如下:
cd asm;
tasm32 /ML WAP32.ASM
cd ..
copy asm\wap32.obj c++\wap32.obj /y
cd c++
build
cd ..
[4]函数引入问题的解决:
调查Tasm生成的OBJ文件是OEF文件格式,与C++的OBJ不符合,幸好C++中的link可以自动转换。
将DKK的C:\NTDDK\freelib\ntoskrnl.lib拿出来观察,发现他的采用的是COFT格式,函数名已经变化
所以引入函数名应该从ntoskrnl.lib中的名字为准,不应该使用ntoskrnl.exe的真实函数名,否则无法连接。
c.调用IoGetRelatedDeviceObject()得到关联文件设备对象
此设备对象可能是Ntfs(C:...),FastFat(A:)...如果你装载了病毒防火墙,就是防火墙驱动程序的名字
例如:金山毒霸的KWatch...
2)从其设备对象中取得驱动程序对象(DRIVER OBJECT)
TARGETPATH=obj
BROWSER_INFO=1
磁盘过滤驱动 原理
磁盘过滤驱动原理
磁盘过滤驱动(Disk Filter Driver)是一种在操作系统内核中
运行的驱动程序,用于对磁盘操作进行拦截、过滤和修改。
其原理可以简单概括为以下几个步骤:
1. 注册:磁盘过滤驱动在加载到系统内核之前需要先进行注册,以便于操作系统在启动时加载该驱动。
2. 拦截:磁盘过滤驱动通过拦截操作系统发出的磁盘相关的系统调用(如读取文件、写入文件等),将这些调用转发给自身处理。
3. 过滤:磁盘过滤驱动根据自身的逻辑对拦截到的磁盘操作进行过滤。
可以根据需求对文件进行加密、解密、压缩、解压缩等操作。
也可以对读取写入的数据进行修改、删除等操作。
4. 转发:磁盘过滤驱动在过滤后,可以将磁盘操作转发给下层的磁盘驱动程序,以完成实际的磁盘读写操作。
或者也可以直接向应用程序返回修改后的数据。
5. 反馈:磁盘过滤驱动可以向操作系统返回对磁盘操作的处理结果,以便操作系统进一步处理或通知相关的应用程序。
总的来说,磁盘过滤驱动通过在操作系统内核中的位置,拦截并过滤磁盘操作,以实现对磁盘数据进行修改、保护或监控的功能。
通过编写磁盘过滤驱动,可以实现诸如数据加密、文件压缩、行为监控等功能。
文件系统过滤驱动技术在网页防篡改中的应用
网页非法篡改 ,可立即保护 网页防止被篡改或者恢复
被非法篡改 的网页。 经过多年 的发展 ,网页防篡改 的技 术也在不断 的 发展和更新 ,它的发展经历了如下历程 :
可能 ,其所 消耗 的内存和C U占用率也远远低于其它技 P
术。
1人工 对 比检 测 。人 工对 比检测 就是人 工监 控 网 . 站 ,一旦发现网站被篡改 ,人工对其进行还原。这种手
2过滤驱动 的概念。开发过滤驱动是为 了在操作系 . 统提供的功能之上提供 附加值。过滤驱动是一种 内核模 式驱动 ,它依靠拦截发往 已存在的内核模式驱动的请求
来提供新的功能。 3 . 过滤驱动实现的基本过 程。实现过滤驱动有 以下 几个基本步骤 :
改技术出现 的时间差距不大 ,而且两种技术常常被结合
非对称加密存放 ,在外来访问时将经过加密验证过 的网
页 ,进行解密对外发布 ;若 网页未经过验证 ,则拒绝对 外发布 ,调用备份 网页进行验证解密后对外发布。通常 要结合事件触发机制对文件 的大小 、页面生成时间等属
7 6 信息系统工程 I 0 2 . 1.2 2 70
驱动服务的各种模块不产生影 响( 即保证所有I P R 都有对 应 的处理例程) 所有工作做好后就可以 向I 管理器 。D. / O
段非常原始 ,其最致命的缺陷在于人工监控不能达到即
时性 。 2时 间轮 巡 技 术 。 时 间轮 巡 技 术 是 利 用 一个 网 页检 .
二 、文件 系统 过滤 驱动研 究
1文件 系统驱 动 的概念 。文件 系统 驱动是 存储 管 . 理子 系 统 的一 个 组 成部 分 。它 向用 户 提供 非 易 失 性 媒介( 盘 、磁带等 ) 磁 信息 的存储 、转 发 。文 件驱 动和
驱动加载原理-概述说明以及解释
驱动加载原理-概述说明以及解释1.引言1.1 概述驱动加载原理是计算机操作系统中一个重要的概念。
驱动程序是指用来控制硬件设备的软件模块,它能够与操作系统进行交互,使得硬件设备能够正常工作。
而驱动加载就是将这些驱动程序加载到操作系统中,以使得硬件设备能够被正确地识别和驱动。
在计算机操作系统中,每个硬件设备都需要对应的驱动程序来进行控制和管理。
这些驱动程序包含了与硬件设备进行通信的代码和相关配置信息。
当我们连接一个新的硬件设备时,操作系统会自动检测到设备的连接并尝试加载与之匹配的驱动程序。
驱动加载的过程主要包括以下几个步骤:首先,操作系统会根据设备的硬件标识信息(如设备的设备ID)来查找对应的驱动程序;然后,系统会将此驱动程序加载到内存中,并将其与操作系统的驱动程序管理模块进行关联;接下来,操作系统会根据驱动程序提供的接口函数来与该设备进行通信和控制。
通过这一系列步骤,驱动程序就成功地加载到了操作系统中,从而使得该硬件设备能够被正常地使用。
驱动加载的原理是基于操作系统的模块化设计和驱动程序的分离管理。
通过将驱动程序与操作系统进行解耦,可以使不同硬件设备的驱动程序能够独立开发和维护,便于扩展和更新。
同时,驱动加载的过程还涉及到设备的初始化、资源配置等操作,确保硬件设备能够在操作系统中得到正确的识别和控制。
总而言之,驱动加载原理是计算机操作系统中一个重要的概念和功能。
通过加载适当的驱动程序,操作系统能够正确地管理和控制硬件设备,保证其正常工作。
了解驱动加载的概念和原理对于深入理解操作系统和硬件设备之间的交互过程具有重要意义。
1.2文章结构文章结构的部分主要介绍了整篇文章的内容组织和展示方式。
在这个部分,我们可以用简洁明了的语言描述整篇文章的结构,并解释每个章节的内容。
以下是对文章结构部分内容的一种可能的描述:在本文中,我们将探讨驱动加载的原理。
本文分为引言、正文和结论三个部分。
引言部分介绍了驱动加载的概述、文章结构以及本文的目的。
文件系统过滤驱动教程
创建一个简易的文件系统过滤驱动
开始之前
要想编译一个驱动,你需要 WDK 或者 IFS 开发包。 你可以从微软的网站获取它们。另外,你 不得不设置一个环境变量%WINDDK%来指向你安装 WDK/IFS 开发包的路径。 注意:每一个小的错误可能导致蓝屏死机或者系统不稳定。
Main.c
Driver entry
这是如何驱动的入口点。我们要做的第一件事是存储到 DriverObject 一个全局变量中(我 们一会儿就要使用它)。
Collapse code snippet Copy Code
//////////////////////////////////////////////////////// // Global data
{ ...
for (;;) { IoEnumerateDeviceObjectList( DriverObject, devList, sizeof(devList), &numDevices);
if (0 == numDevices) { break; }
numDevices = min(numDevices, RTL_NUMBER_OF(devList));
Collapse Copy Code
////////////////////////////////////////////////////////////////////////// // Global data
FAST_IO_DISPATCH g_fastIoDispatch = { sizeof(FAST_IO_DISPATCH), FsFilterFastIoCheckIfPossible, ... }; ////////////////////////////////////////////////////////////////////////// // DriverEntry - Entry point of the driver
Windows文件系统过滤驱动开发教程(2)
Windows⽂件系统过滤驱动开发教程(2)Windows⽂件系统过滤驱动开发教程2.hello world,驱动对象与设备对象这⾥所说的驱动对象是⼀种数据结构,在DDK中名为DRIVER_OBJECT。
任何驱动程序都对应⼀个DRIVER_OBJECT.如何获得本⼈所写的驱动对应的DRIVER_OBJECT呢?驱动程序的⼊⼝函数为DriverEntry,因此,当你写⼀个驱动的开始,你会写下如下的代码:NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ){}这个函数就相当与喜欢c语⾔的你所常⽤的main().IN是⽆意义的宏,仅仅表明后边的参数是⼀种输⼊,⽽对应的OUT则代表这个参数是⼀种返回。
这⾥没有使⽤引⽤,因此如果想在参数中返回结果,⼀律传⼊指针。
DriverObject就是你所写的驱动对应的DRIVER_OBJECT,是系统在加载你的驱动时候所分配的。
RegisteryPath是专⽤于你记录你的驱动相关参数的注册表路径。
DriverObject重要之处,在于它拥有⼀组函数指针,称为dispatch functions.开发驱动的主要任务就是亲⼿撰写这些dispatch functions.当系统⽤到你的驱动,会向你的DO发送IRP(这是windows所有驱动的共同⼯作⽅式)。
你的任务是在dispatch function中处理这些请求。
你可以让irp失败,也可以成功返回,也可以修改这些irp,甚⾄可以⾃⼰发出irp。
设备对象则是指DEVICE_OBJECT.下边简称DO.但是实际上每个irp都是针对DO发出的。
只有针对由该驱动所⽣成的DO的IRP,才会发给该驱动来处理。
当⼀个应⽤程序打开⽂件并读写⽂件的时候,windows系统将这些请求变成irp发送给⽂件系统驱动。
⽂件系统过滤驱动将可以过滤这些irp.这样,你就拥有了捕获和改变⽂件系统操作的能⼒。
初探文件系统过滤驱动
初探文件系统过滤驱动初探文件系统微过滤驱动文/图李旭昇文件系统微过滤驱动(File System Mini-Filter ,简称MiniFilter )是微软为了简化文件过滤驱动开发过程而设计的新一代文件过滤框架。
MiniFilter 通过向过滤管理器(Filter Manager ,简称FltMgr )注册想要过滤的I/O 操作来间接地附加到文件系统设备栈上。
FltMgr 是一个传统的文件过滤驱动,运行在内核模式,向第三方MiniFilter 提供文件过滤驱动的常用功能。
如图1所示是一个简化的I/O 设备栈,其中有一个FltMgr 和三个MiniFilter 。
图1 简化的I/O 设备栈针对每一种I/O 操作,MiniFilter 只需注册预处理回调(pre-operation callback )和后处理回调(post-operation callback )即可。
FltMgr 会恰当的处理IRP 并在I/O 操作的前、后调用上述两个回调。
与传统过滤驱动相比,MiniFilter 优势明显。
首先,MiniFilter 代码十分简洁,开发迅速。
除去一些必要的注册工作,我们只需提供两个回调就可以完成对一种I/O 操作的过滤(甚至可以只提供一个,将另一个设为NULL )。
对于我们不感兴趣的I/O 操作,FltMgr 将完成基本的处理并继续传递。
其次,MiniFilter 是微软文档化的方法,具有良好的稳定性与跨平台性,一份代码不需修改便可以在不同系统上工作。
另外,FltMgr 还提供了许多通用的函数,帮助我们获得文件名等有用的信息。
下面我们动手编写一个MiniFilter 。
DriverEntry 中通过FltRegisterFilter 注册MiniFilter ,再通过FltStartFiltering 开始过滤。
extern "C" NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObject , _In_ PUNICODE_STRING RegistryPath ) {DriverObject ->DriverUnload=Unload;黑客防线 w w w .h a c ke r .c o m .cn转载请注明出处DbgPrint("Load!\n");NTSTATUS status;//注册MiniFilterstatus=FltRegisterFilter(DriverObject ,&FilterRegistration,&F ilte rHandle);if (!NT_SUCCESS (status)) {DbgPrint("Fail to Register.\n");DbgPrint("%d\n",status==STATUS_OBJECT_NAME_NOT_FO UND ); return STATUS_SUCCESS ; }//开始过滤status=FltStartFiltering(FilterHandle); if (!NT_SUCCESS (status)){//启动失败,取消注册,返回FltUnregisterFilter(FilterHandle); DbgPrint("Fail to Start.\n"); return STATUS_SUCCESS ; }DbgPrint("MiniFilter Started\n"); return STATUS_SUCCESS ; } FltRegisterFilter 的原型为: NTSTATUS FltRegisterFilter(_In_ PDRIVER_OBJECT Driver,_In_ const FLT_REGISTRATION *Registration, _Out_ PFLT_FILTER *RetFilter );第一个参数为驱动对象,即DriverEntry 中传入的参数;第二个参数指向FLT_REGISTRATION 结构,我们稍后详细介绍;第三个参数是返回的MiniFilter 句柄,需要保存在全局变量中,因为函数FltStartFiltering 和FltUnregisterFilter 都要用到它。
文件过滤驱动加载过程
文件过滤驱动学习笔记(二)1.概述刚学习文件系统过滤时只是做一些简单的应用也没有深究其中的细节;说起来对文件系统过滤也只是一知半解惭愧的很。
后与人讨论发现很多细节自己很模糊;比如其中涉及的驱动对象之间的区别、卷设备加载对文件过滤驱动的影响等。
自己还是需要仔细研究一下,最近查了一些官方及前辈们的资料似乎有些理解在此记录下来做个笔记。
2.相关对象说明在文件过滤驱动学习中会遇到几种设备对象总是混淆。
最近硬着头皮查阅DDK才有些理解。
2.1.存储设备(Storage Device)存储设备可以理解为一个磁盘、一个CD;它可以物理的也可以是逻辑的,它上边可以有一个或多个卷设备对象。
大多数存储设备是一个PnP设备,它们由PnP管理器加载。
存储设备表现为PnP设备树(PnP Device Tree)上的一个节。
注意:文件系统驱动和文件系统过滤驱动都不是PnP设备驱动。
2.2.存储卷(Storage Volume)存储卷是一个存储设备如固定磁盘,软盘,CD盘,格式化后存储的目录与文件。
一个很的大卷可以被分成一个或多个逻辑卷;每一个卷都会被格式化成指定的一种格式,如NTFS,FA T等。
它通常是一个物理设备对像(PDO)。
它与文件系统卷对象是不同的。
2.3.文件系统卷设备对象(File System VDO)一个存储卷被文件系统加载时就会产生一个文件系统卷设备对像(File System VDO);它总是与指定的逻辑或物理设备相联结(这里我理解应该是说它总是代表了一种数据存储及组织格式,也就是我们常说的FA T和NTFS)。
文件系统过滤驱动就是要附加到这种设备对象上过滤读写相关的操作。
DDK上说文件系统卷设备对象是不需要命名的,因为给它命名会带来安全隐患;这点没有太理解还需要再查阅一些资料。
2.4.文件系统控制设备对象(File System CDO )文件系统控制设备对象是一个文件系统的入口,它不是单个的卷并且它是存储在全局文件系统队列里的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文件过滤驱动学习笔记(二)
1.概述
刚学习文件系统过滤时只是做一些简单的应用也没有深究其中的细节;说起来对文件系统过滤也只是一知半解惭愧的很。
后与人讨论发现很多细节自己很模糊;比如其中涉及的驱动对象之间的区别、卷设备加载对文件过滤驱动的影响等。
自己还是需要仔细研究一下,最近查了一些官方及前辈们的资料似乎有些理解在此记录下来做个笔记。
2.相关对象说明
在文件过滤驱动学习中会遇到几种设备对象总是混淆。
最近硬着头皮查阅DDK才有些理解。
2.1.存储设备(Storage Device)
存储设备可以理解为一个磁盘、一个CD;它可以物理的也可以是逻辑的,它上边可以有一个或多个卷设备对象。
大多数存储设备是一个PnP设备,它们由PnP管理器加载。
存储设备表现为PnP设备树(PnP Device Tree)上的一个节。
注意:文件系统驱动和文件系统过滤驱动都不是PnP设备驱动。
2.2.存储卷(Storage Volume)
存储卷是一个存储设备如固定磁盘,软盘,CD盘,格式化后存储的目录与文件。
一个很的大卷可以被分成一个或多个逻辑卷;每一个卷都会被格式化成指定的一种格式,如NTFS,FA T等。
它通常是一个物理设备对像(PDO)。
它与文件系统卷对象是不同的。
2.3.文件系统卷设备对象(File System VDO)
一个存储卷被文件系统加载时就会产生一个文件系统卷设备对像(File System VDO);它总是与指定的逻辑或物理设备相联结(这里我理解应该是说它总是代表了一种数据存储及组织格式,也就是我们常说的FA T和NTFS)。
文件系统过滤驱动就是要附加到这种设备对象上过滤读写相关的操作。
DDK上说文件系统卷设备对象是不需要命名的,因为给它命名会带来安全隐患;这点没有太理解还需要再查阅一些资料。
2.4.文件系统控制设备对象(File System CDO )
文件系统控制设备对象是一个文件系统的入口,它不是单个的卷并且它是存储在全局文件系统队列里的。
一个文件系统驱动在入口创建一个或多个CDO,例如FastFat就创建两个CDO。
一个是针对固定媒体一个针对可移动媒体。
CDFS只创建一个因为它只有一个移动媒体。
文件系统控制设备对象是文件系统过滤驱动要过滤的另一个重要对象,因为在卷加载时会发一个消息给文件系统驱动,需要知道有新的卷加载安装就需要对这个设备对象进行过滤。
这个对象的作用我理解为是用来管理文件系统卷设备对象的。
3.加载过程
3.1.OS启动时的加载
3.1.1.OS的加载过程中的文件系统
1)在系统的启动(BOOT)期间,操作系统加载boot file system, RA W file system和所有启动类型为SERVICE_BOOT_START的驱动,完成之后把控制权交给系统内核。
当内核得到控制权时这些驱动已经加载到内存了。
驱动的加载顺序是由驱动加载顺序组来分配决定的;在文件系统过滤驱动中,那里新加入文件系统过滤驱动加载组之中的驱动在其它所有过滤驱动之前加载。
2)I/O管理器创建一个四个元素文件系统全局队列,分别是CD-ROM,磁盘,磁带还有网络文件系统。
之会每当新注册一个文件系统,它的控制设备对象就会添加到队列中。
在这时因为没有文件系统注册,所有这个队列是空的。
3)PnP管理器调用RA W file system和所有启动类型为SERVICE_BOOT_START驱动的DriverEntry例程。
如果类型为SERVICE_BOOT_START驱动有依赖的驱动需要启动也这在这时启动。
PnP管理器调用Boot Device Driver的AddDevice例程来启动Boot Device。
如果Boot Device有子设备(child device),它们也将被列举出来;如果它们的驱动是Boot-Start Driver(启动类型为SERVICE_BOOT_START的驱动)那么这些子设备也将被配置和启动。
如果一个设备的驱动不完全是Boot-Start Driver它们将不被启动,PnP 管理器会为它们创建一个DevNode(设备节)。
这个点上,所有Boot Driver和Boot Device 都被加载和启动。
4)PnP管理器遍历PnP Device Tree,定位并加载那个与每个devnode关联但没有运行的设备。
当每一个PnP设备启动的时候,如果他们有子设备则会遍历他们。
PnP管理器配置这些子设备并加载他们的驱动启动设备。
PnP管理器加载每一个设备驱动时并不考虑他们的StartType、LoadOrderGroup、Dependencies属性。
这么一步PnP管理器只配置和启动那些可以枚举到的设备和它们的子设备。
不启动那个不可枚举到的设备,即便能枚举到他们的子设备。
5)PnP管理器初始化那个启动类型为SERVICE_SYSTEM_START的驱动。
注意,文件系统识别器(file system recognizer FsRec)就在这个时候被加载。
别外需要注意是,它虽然在“Boot File System”加载顺序组中但它并不是一个Boot File System。
实际的Boot File System是在BOOT 卷(Boot V olume)被安装(mounted)时被Boot Process加载的。
在后来的SERVICE_SYSTEM_START阶段,文件系统在文件系统加载顺序组被加载,它包括命名管道文件系统、邮槽文件系统。
但它不包括那些基于媒体的文件系统如NTFS,FA T,UDFS,CDFS等等。
网络文件系统及在网络加载顺序组的也在这个时候加载。
6)所有驱动在boot time 被初始化后,I/O管理调用那些驱动的重新初始化例程。
7)服务控制管理器加载所有SERVICE_AUTO_START的服务
3.2.卷挂载的过程
3.2.1.文件系统识别器
在系统启动后,存储设备上的所有卷都加载到了系统,然而并不是所有内建(build-in)加载且也不是所有文件系统卷都会被安装(mount)。
文件系统识别器的功能需要处进IRP_MJ_CREA TE请求,查找访问卷的文件系统是否被安装没有就安装它们。
在ReactOS-0.3.4中可以找到文件系统识别器的相关实现。
XPSP2中FS_REC中FsRecCreateAndRegisterDO是用来注册某一种文件系统的识别器对像的。
可以断下来观察一下。
其中和ReactOS-0.3.4略有差别大体相同。
3.2.2.卷挂载
当我动态插入一个磁盘时,PnP管理器会为我们生成一个存储设备。
并发现请求向Mount
Manager发出请求,Mount Manager收到请求后收集这个存储设备的信息并为他们生成存储卷名。
这时一个磁盘的插入动作完成。
如果我们要对这个磁盘发生读写操作,系统会解析这个路径如J:\,如果相应的卷没有安装文件系统,就给文件系统识别器发一个IRP_FILE_SYSTEM_CONTROL的请求。
文件系统识别器会识别出是什么文件系统并加载它,同时这个请求再会发给真实的文件系统来完成并安装文件系统卷。
这样卷的挂载就完成了。
这也就是我们为什么要注册一个回调去监视文件系统控制对像的激活并绑定它。
同时也去过滤每一个文件系统控制设备对象的IRP_FILE_SYSTEM_CONTROL请求。