首页
社区
课程
招聘
[原创]win10 1909逆向----探寻文件体系1
发表于: 2020-9-27 03:37 8297

[原创]win10 1909逆向----探寻文件体系1

2020-9-27 03:37
8297

         

        本来是想学一下MiniFilter,后面觉得没什么意思,就顺道将文件这一块逆了几天,越逆越觉得有意思,特将过程记录下来,从最开始CreateFile C盘开始,卷设备、NTFS文件系统、缓存管理、IO管理、到15个重要的元文件($MFT、$BOOT等),因为文件系统较复杂和繁琐,并且是以逆向为主,所以只记录关键流程,并争取简单明了,如果有错误还请指出,借此抛砖引玉。(参考书籍:windows内核原理与实现   windows内核设计思想)



         

我们在0环中断下来,知道内核NtCreateFile的第三个参数放的就是我们要打开的对象名:"\??\C:",至于这里是怎么转过来的,可以自已去三环跟一下,没什么难度。

在解释"\??\"是个什么玩意的时候,得先初步了解一下对象管理的一些知识。

windows内部维护了一个对象层次目录(即系统全局名字空间)。

如下图:根目录:“\”(用全局变量ObpRootDirectoryObject来定义),下面的ArcName、Device、Driver等都是子目录。

对象管理器在第1阶段初始化时,会先创建"\"根目录,在第一阶段完成后根目录对象会插入以下对象。

这里Name里面并没有显示??,但实际上,是已经创建了??这个目录,并且还创建了DosDevices这个符号链接来指向它,它的创建过程:

ObInitSystem---->ObpInitializeRootNamespace---->ObpCreateDosDevicesDirectory,感兴趣的同学可以逆。


1。对象管理器在遇到“\??\”字符串时,会进入到EPROCESS的DeviceMAP(设备表)里,找到他需要的目录来解析:

DosDevicesDirectory:指向局部空间的目录。          "\??"

GlobalDosDevicesDirectory:指向全局空间的目录。"\GLOBAL??"

注:先找局部空间目录,如果局部空间目录没找到,则进入全局空间目录查找。



2。 解析DosDevicesDirectory这个对象,找到ParseProcedure或者ParseProcedureEx的值,判断是否为NULL,如果为NULL为目录,再通过剩余的名字来解析。(后面会多次需要得到ParseProcedure,具体过程这里会详细一点,后面直接略过)

1>得到Object_Header的TypeIndex.


2>Object_Header右移8位,得到低2字节。

3>得到ObHeaderCookie(我把他理解为随机值)

4>取他们的异或0xC0 ^ 0x1D ^ 0xDE = 0x3;


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 9
支持
分享
最新回复 (21)
雪    币: 1420
活跃值: (2151)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
豆总牛逼
2020-9-27 07:49
0
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
3
写的挺好
2020-9-27 08:22
0
雪    币: 312
活跃值: (371)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
写的挺好
2020-9-27 08:24
0
雪    币: 10749
活跃值: (3262)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
5
写得挺好
2020-9-27 09:53
0
雪    币: 4709
活跃值: (1575)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
6
整挺好
2020-9-27 10:39
0
雪    币: 6314
活跃值: (952)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
写的挺好
2020-9-27 13:53
0
雪    币: 62
活跃值: (662)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看懂看不懂无所谓,先赞着再说
2020-9-27 14:59
0
雪    币: 889
活跃值: (4118)
能力值: ( LV6,RANK:98 )
在线值:
发帖
回帖
粉丝
9
豆总牛逼
2020-9-27 15:18
0
雪    币: 1613
活跃值: (2827)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
学习一下
2020-9-27 15:48
0
雪    币: 198
活跃值: (8548)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
11
争取一周一章!
2020-9-27 17:03
0
雪    币: 6157
活跃值: (4907)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
12
奥利给
2020-9-27 18:08
0
雪    币: 3736
活跃值: (3867)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
感谢分享!
2020-9-27 19:50
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
14
666
2020-9-28 04:06
0
雪    币: 85
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
豆总 6666
2020-9-28 09:00
0
雪    币: 1319
活跃值: (1945)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
......可以看下文件操作系统ntfs这类管理,把每个相关irp例程详细说一遍就好了。
2020-9-28 09:49
0
雪    币: 73
活跃值: (3090)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
17
豆总666
2020-9-28 09:52
0
雪    币: 1829
活跃值: (1372)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
18
写的挺好
2020-9-28 16:04
0
雪    币: 198
活跃值: (8548)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
19
库尔 ......可以看下文件操作系统ntfs这类管理,把每个相关irp例程详细说一遍就好了。
看时间允不允许吧,但NtfsMountVolume流程我估计是会写的,一般这个你会了,别的一般不难了~
2020-9-29 17:17
0
雪    币: 246
活跃值: (4427)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
20

okok了

最后于 2021-4-19 22:46 被ookkaa编辑 ,原因:
2021-4-19 20:13
0
雪    币: 246
活跃值: (4427)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
21

。。。

最后于 2021-4-19 21:05 被ookkaa编辑 ,原因:
2021-4-19 20:31
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
WIN10 NtCreateFile R3层代码都变了
2021-4-20 01:21
0
游客
登录 | 注册 方可回帖
返回
//