ame类似于Delete
Rename是向FSD发送IRP_MJ_SET_INFORMATION的IRP
把IrpSp>
ParametersSetFileFileInformationClass设置为FileRenameInformation
填充buffer为FILE_RENAME_INFORMATION结构
综上
于是我们可以在驱动里面通过发送IRP来直接访问文件系统了
绕过了nativeAPI和win
API层次
绕过文件系统过滤驱动和钩子有了以上的内容
我们目前可以直接给FSD发送请求操作文件
但是这还不够
因为有很多的杀毒软件或者监视工具使用FSDFilterDriver或者FSDHook的办法来监控文件操作对付文件系统过滤驱动文件系统过滤驱动Attach在正常的文件系统之上
监视和过滤我们的文件访问
文件系统驱动栈就是由这一连串的Attach起来的过滤驱动组成
我们可以用IoGetRelatedDeviceObject这个函数来获得一个FileObject对应的最底层的那个功能驱动对象FDO)
但是这样虽然绕过了那些过滤驱动
却同时也绕过了正常的FSD如NtfsFastfat
因为正常的FSD也是作为一个过滤驱动存在的
磁盘文件对象的对应的最底层的FDO是Ftdisksys
它已经因为过于底层而不能处理我们投递的IRP请求winxp原版下载
其实正常的FSD信息存储在一个Vpb结构中
我们可以使用IoGetBaseFileSystemDeviceObject这个未公开的内核函数来得到它
它就是我们发送IRP的目标了
对付替换DispatchRoutine的FSDHook这是一种常用的FSDHook方式
我们需要得到原本的DispatchRoutine
向原本的DispatchRoutine发送我们的IRP
这里提供一个思路
我们可以读取原本FSD驱动的INIT段或者TEXT段
查找其DriverEntry函数
在它的DriverEntry函数中肯定设置了自己的DriverObject的各个DispatchRoutine
在这个函数中我们就能找到我们想要的DispatchRoutine的地址
只需要使用特征码搜索的方法就可以搜索到这个值
对付InlineHookDispatchRoutine函数本身的FSDHook这种Hook方法比较狠毒
但不是非常常见于安全产品中
一般应用在木马和rootkit上
比如我自己写的rootkit
它没有更改DriverObject里面的DispatchRoutine的函数指针
而是向函数开头写入汇编指令的JMP来跳转函数
对付它的基本思路就是读取存在磁盘上的FSD的文件
加载到内存一份干净的备份
察看我们要调用的DispatchRoutine开头