文件系统fsd hook (一)原理

文件系统fsd hook (一)原理

要知道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;

时间: 2024-08-02 15:10:57

文件系统fsd hook (一)原理的相关文章

CentOS 6.5 分布式文件系统之MogileFS工作原理及实现过程

   MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上.MogileFS由3个部分组成:    第1个部分:是server端,包括mogilefsd和mogstored两个程序.前者即是mogilefsd的tracker,它将一些全局信息保存在数据库里,例如站点domain,class,host等.后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份

分布式文件系统之MogileFS工作原理及实现过程

MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上.MogileFS由3个部分组成:   第1个部分:是server端,包括mogilefsd和mogstored两个程序.前者即是mogilefsd的tracker,它将一些全局信息保存在数据库里,例如站点domain,class,host等.后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份请求.在

大数据 --> 分布式文件系统HDFS的工作原理

分布式文件系统HDFS的工作原理 Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.要理解HDFS的内部工作原理,首先要理解什么是分布式文件系统. 1.分布式文件系统 多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样解决某种问题,这样的系统我们称之为分布式系统. 分布式文件系统是分布式系统的一个子集,它们解决的问题就是数据存储.换句

【转载】Hadoop分布式文件系统HDFS的工作原理详述

转载请注明来自36大数据(36dsj.com):36大数据 » Hadoop分布式文件系统HDFS的工作原理详述 转注:读了这篇文章以后,觉得内容比较易懂,所以分享过来支持一下. Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的 机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.要理解HDFS的内部工作原理,首先要理解什么是分布式文件系统. 1.分布式文件系统 多台计算机联网协同工作(有时也

Android Hook Dexposed原理小析

dexposed是阿里巴巴在xposed框架上面开发的hotpatch一套框架 当然hotpatch的方式有很多,这里先介绍下dexposed原理 Demo中有个test函数, 在调用hook之前正常返回”11111”; 调用hook之后, 却返回”newTestMethod”, 被我们给修改了 public class Demo { String TAG = "===[hookdemo]==="; public static String staticTest(String para

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

Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.要理解HDFS的内部工作原理,首先要理解什么是分布式文件系统. 1.分布式文件系统 多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样解决某种问题,这样的系统我们称之为分布式系统. 分布式文件系统是分布式系统的一个子集,它们解决的问题就是数据存储.换句话说,它们是横跨在多台计算机上的存

Hadoop分布式文件系统HDFS的工作原理

Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.要理解HDFS的内部工作原理,首先要理解什么是分布式文件系统. 1 .分布式文件系统 多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样解决某种问题,这样的系统我们称之为分布式系统. 分布式文件系统是分布式系统的一个子集,它们解决的问题就是数据存储. 换句话说,它们是横跨在多台计算机上

21.文件系统——yum的工作原理以及如何建立yum仓库

一.yum的工作原理 yum是一个RPM包的前端管理工具,在rpm包的依赖关系已经被建成数据库的前提下,它能够实现自动查找相互依赖的rpm包,并从repository中下载互相依赖的rpm包到本地. 二.如何建立yum的仓库repository 如果yum和repository不在同一台主机上,那么能够为yum提供repository仓库服务的远程服务器协议通常有两类:(1)ftp://(2)http:// 如果yum和repository在同一台主机上,那么yum就可以直接到某个目录中提取rp

WordPress HOOK机制原理及代码分析

WordPress强大的插件机制让我们可以自由扩展功能.网上对插件的使用以及开发方法都有大量资料可以查询. 今天我们就分析一下四个主要函数的代码,包括: add_action.do_action.add_filter.apply_action. 一.add_action和add_filter 为什么把这两个函数放在一起讲呢?其实我们看看add_action函数的定义(图一)就可以知道,其实跟add_filter是同一个函数,执行的是相同的操作.只是把action和filter区分开,让开发者能更