要知道FSDHook原理,首先我们必须了解什么是FSD,也就是FileSystem。我们电脑上的文件系统ntfs.sys,他有个设备\FileSystem\Ntfs,这个设备是用IoCreateDevice创建,跟我们写驱动的时候一样,那么我们可以通过这个设备,来对ntfs做一些操作,跟ntfs驱动进行一些通信。我们来看IDA分析:

//这个就是我们以前的代码,创建一个通信设备

RtlInitUnicodeString(&DestinationString, L"\\Ntfs");

result = IoCreateDevice(DriverObject, 0, &DestinationString, 8u, 0, 0, &DeviceObject);

是不是跟我们的驱动代码一样,而我们这里说的文件系统,其实是我们在读写文件的时候,都会通过通信,经过ntfs.sys的各个历程,

DriverObject->MajorFunction[IRP_MJ_CREATE]

= (PDRIVER_DISPATCH)NtfsFsdCreate;

createfile

比如我们创建打开文件就会经过IRP_MJ_CREATE这个例程,读文件就会经过 IRP_MJ_READ这个例程。那么我们想象下,其实ntfs文件系统,我们从编程角度理解,每一个文件的操作,都会经过它的例程,就跟我们自己的驱动一样。

1:我们不要管他是不是一个文件系统,我们只关注,他也是一个驱动本身

2:他作为一个普通的驱动,那么就具备各种例程。

然后对文件操作的时候,系统就会访问文件系统,那么我们可以通过对文件系统做手脚,就可以改变文件操作的结果。这就是我们要hook的目的。

那么从我们应用层调用CreateFile开始,会是怎么样的一个流程呢:

CreateFile--->ntdll!zwcreatefile---->ntos!SSDT!zwcreatefile--->ntos!主体!ntcreatefile

----->IoCreateFile-----》IopCreateFile---》后面还有经过各种各样的函数之后,进入到ntfs!IRP_MJ_CRREATE

这个函数主体,其实也是一个封装函数:

kd> u ntcreatefile l 50

nt!NtCreateFile:

8056f2fc 8bff mov edi,edi

8056f2fe 55 push ebp

8056f2ff 8bec mov ebp,esp

8056f301 33c0 xor eax,eax

8056f303 50 push eax

8056f304 50 push eax

8056f305 50 push eax

8056f306 ff7530 push dword ptr [ebp+30h]

8056f309 ff752c push dword ptr [ebp+2Ch]

8056f30c ff7528 push dword ptr [ebp+28h]

8056f30f ff7524 push dword ptr [ebp+24h]

8056f312 ff7520 push dword ptr [ebp+20h]

8056f315 ff751c push dword ptr [ebp+1Ch]

8056f318 ff7518 push dword ptr [ebp+18h]

8056f31b ff7514 push dword ptr [ebp+14h]

8056f31e ff7510 push dword ptr [ebp+10h]

8056f321 ff750c push dword ptr [ebp+0Ch]

8056f324 ff7508 push dword ptr [ebp+8]

8056f327 e860d8ffff call nt!IoCreateFile (8056cb8c)

8056f32c 5d pop ebp

8056f32d c22c00 ret 2Ch

可见文件操作还是会经过很多流程。那么我们的FSD Hook到底是在哪个流程中呢?

DriverObject->MajorFunction[0]

我们从C语言的角度来看,其实MajorFunction这个成员就是一个数组。

我们前面的课程,SSDT 是数组,shadowSSDT也是数组。

在windows下,只要是数组都可以hook,比如 SSDT ShadowSSDT,MajorFunction(FSDHook这个名称的由来),EAT,IAT。都是数组。 只要是由汇编代码的都可以hook(inline Hook),比如 只要是变量都可以hook 比如 猥琐的变量patch

Tp双机调试这节课,就是用到了邪恶变量patch,tp的debugobject权值,我们也可以用到邪恶的变量patch。

Windows是一个充满hook世界的地方,那么我们这节课的hook,是属于数组hook呢,还是属于汇编代码的hook呢?

//原始

DriverObject->MajorFunction[0] = (PDRIVER_DISPATCH)NtfsFsdCreate;

//hook

DriverObject->MajorFunction[0] = (PDRIVER_DISPATCH)NewNtfsCreate;

欢迎关注 windows驱动编程微信公众号,微信号:driverdevelop

转载于:https://www.cnblogs.com/xujinping/p/4912387.html

文件系统fsd hook (一)原理相关推荐

  1. FSD HOOK与SSDT HOOK恢复简单思路

    FSD 解释: File System Driver文件系统驱动程序,分为本地FSD和远程FSD. (1) 本地FSD:允许用户访问本地计算机上的数据 --本地FSD负责向I/O管理器注册自己,当开始 ...

  2. Hook API 原理 解析

    1 什么是Hook API 简单的说,一个应用程序要调用一个API函数,例如CreateFileW,那么应用程序必须要知道函数的地址,才能调用它,我对Hook API的理解是,把这个函数地址替换为另一 ...

  3. FastDFS文件系统简介与架构原理

    FastDFS分布式文件系统概述 概述 FastDFS是一个轻量级的开源分布式文件系统 FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡 FastDFS实现了软件方 ...

  4. Hadoop分布式文件系统HDFS的工作原理详述

    Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...

  5. D3D9 HOOK [透视原理]

    最近研究了下FPS游戏透视方法,市面上透视大概分为两种,一种是方框透视 就是在游戏角色模型上画一个框,另外一种就是Z缓冲区透视,这种透视原理是对指定模型(一般是人物模型)禁用Z缓冲进行深度测试,当然这 ...

  6. 企业级别应用--GFS分布式文件系统(GlusterFS工作原理、弹性 HASH 算法 、GlusterFS卷的类型、 部署GlusterFS)

    文章目录 一. GlusterFS 概述 1.1 GlusterFS 简介 与传统分布式相比的优点 1.2 GlusterFS 的特点 扩展性和高性能 高可用性 全局统一命名空间 弹性卷管理 基于标准 ...

  7. 分布式文件系统HDFS实践及原理详解part3

    HDFS原理 说明:3.5开头目录是因为和上篇文章内容同属一章,所以开头使用了3.5 3.5 HDFS核心设计 3.5.1 心跳机制 1. Hadoop 是 Master/Slave 结构,Maste ...

  8. 【docker知识】联合文件系统(unionFS)原理

    一.说明 Docker CLI 操作起来比较简单--您只需掌握Create.Run.InspPull和Push容器和图像,但是谁想过Docker 背后的内部机制是如何工作的?在这个简单的表象背后隐藏着 ...

  9. 分布式文件系统:HDFS 核心原理

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据真好 ...

最新文章

  1. 在SpringBoot项目中使用redis简单用法(一)
  2. 手机虚拟摄像头_没键盘也能打字?三星展示最新虚拟键盘Selfie Type:是真的
  3. java字符串格式化:String.format()方法的使用
  4. 长方形与圆最近连线LISP_编写一个AutoLISP程序,画出一个边长为A的正方形,以及该正方形的内切圆,正方形的底边与正X轴的夹角为ANG...
  5. [SQL Server]重命名数据库【转】
  6. 响应式编程优点 有效_什么是响应式编程?
  7. linux内存管理之RSS和VSZ的区别
  8. 狂神说Java学习笔记 Java基础
  9. idea新建xml文件
  10. 狗头金一般什么地方有?
  11. 图像质量评价(Image Quality Assessment,IQA)
  12. aix 在线软件包安装 字符集 mysql安装
  13. 小小c#算法题 - 1 - 找出数组中满足条件的两个数
  14. RPA - 前置机虚拟化U盾识别方案
  15. 教你快速录制gif动图
  16. 求助,关于MFC中的 Secur32.lib问题
  17. 对大学计算机课程的认识 感想,大学计算机基础学习感想复习课程.pdf
  18. 2020-11-12杂谈
  19. linux原生运行微信客户端,巧用 Docker 在 Linux 下 运行微信 PC 客户端
  20. 因果推理(五):随机试验和可识别

热门文章

  1. 有效降低传导辐射干扰的小技巧
  2. zoj3557 插板法卢卡斯求组合数取模
  3. matlab 暂停命令(pause和input)
  4. HOG特征向量的代码 源代码改
  5. 图像上添加噪声 并滤波
  6. LCD编程_LCD控制器
  7. ActiveMQ(为什么要使用消息中间件,JMS传输模型)
  8. 修改anaconda3 jupyter notebook 默认路径
  9. (原创)cocos2dx-lua TableView官方demo分析
  10. DIV遮罩层--数据缓冲效果的实现