首页
社区
课程
招聘
[原创]NTFS文件系统底层挖掘
发表于: 2009-5-2 23:37 51215

[原创]NTFS文件系统底层挖掘

2009-5-2 23:37
51215
收藏
免费 10
支持
分享
最新回复 (48)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
严重学习,完全不懂
2009-5-7 17:12
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
多谢,学习中
2009-5-8 07:58
0
雪    币: 306
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
大米的文档一向华丽,非常耐人寻味
2009-5-8 10:51
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
太強了

真高手!
2009-5-8 10:55
0
雪    币: 4
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
严重支持~~
2009-5-9 12:37
0
雪    币: 267
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
这个要支持一下
2009-5-9 22:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
三花什么什么~~~~~~顶!!!!!!!!!
2009-5-10 00:21
0
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
haha   sudami  我刚在邪八看了这个文章  又跑这里来发啦  哈哈  被我逮住啦   写的不错  你说的那本书已经翻译了   在驱网卖呢 正~~~
2009-5-10 01:55
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
34
严重学习,完全不懂
2009-5-10 02:58
0
雪    币: 578
活跃值: (788)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
vista下测试无效
2009-5-10 12:52
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
36
XP NTFS分区下有效.

我没有VISTA的环境,暂时没有跟过,不清楚了,呵呵
2009-5-10 13:42
0
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
搞不懂~只能收藏一下了~很想知道,这些东西楼主是从哪里知道的?~
2009-5-10 14:07
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
学习了
尽管好多内容都不太明白
2009-5-10 14:09
0
雪    币: 4
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
1初始化自定义的链表结构,每个节点是要hook用到的context,节点结构为:
typedef struct _funcContext{
PCHAR functionName;//函数名
PVOID originFunctionAddress;//原始地址
PVOID hookFunctionAddress;//hook函数地址,hook函数与原函数接受参数不一样,采用的call形式
PVOID callBeforeAddress;//上层函数调用本函数的call前地址
BOOL isHooked;//是否已经hook过
pfuncContext nextEntry;//单向链表指向下一个节点
PKSPIN_LOCK lock;//锁
}funcContext,*pfuncContext;
2ZwCreatFile打开要保护的文件,ObReferenceObjectByHandle得到文件对象,从而得到fscontext(scb)->fcb->mft号
3将函数ExAllocatePoolWithTag对应的插入链表结构中(MmGetSystemRoutineAddress得到ExAllocatePoolWithTag地址),然后对链表中节点对应的函数进行hook,再开启一个系统线程,并等待。
其中ExAllocatePoolWithTag对应的hook函数HookExAllocatePoolWithTag中
        (1)判断参数1==10h&&参数2==20h&&参数3=7346744Eh即判断是否为NtfsCreateFcb所调用的,利用栈回溯分别得到NtfsCreateFcb和NtfsOpenFile的地址,将其放入全局变量中以备后来判断所用。
        (2)得到NtfsCheckValidAttributeAccess的地址。方法是把NtfsOpenFile中call NtfsCreateFcb前的地址-70h,这样大概能保证该地址再调用NtfsCheckValidAttributeAccess之前,然后进行特征搜索得到NtfsCheckValidAttributeAccess地址,并建立相应节点,加入链表,hook函数为hookNtfsCheckValidAttributeAccess。
        (3)将NtfsCreateFcb建立节点加入链表,hook函数为hookNtfsCreateFcb,设置事件激活系统线程。
4此时该线程结束等待,摘除ExAllocatePoolWithTag钩子,然后进行hook NtfsCheckValidAttributeAccess。
在hookNtfsCheckValidAttributeAccess中,因为几个函数都调用NtfsCheckValidAttributeAccess,所以利用栈回溯得到上一个函数的地址,并和开始保存在全局变量中的NtfsOpenFile的地址进行比较,如果是则与NtfsOpenFile参数中mft号比较,看是不是自己要保护的文件,若是将参数中的fcb的cleanupCount=1,将FcbState中的FCB_STATE_PAGING_FILE清0.若上一个函数不是NtfsOpenFile,同样判断mtf号是否为要保护的文件,是则进行重定位到\\Test\1.txt
        相应的同步操作和参数判断都没有提到~ps:我是菜逼,如有错误请指教~~
2009-5-10 22:35
0
雪    币: 86
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
初看好象不懂啊

学习之
2009-5-11 09:43
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
佩服佩服,看完后真是惭愧啊,自己还懂得太少!
2009-9-27 11:00
0
雪    币: 466
活跃值: (165)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
42
打个标签。以备学习。
2009-9-27 18:49
0
雪    币: 351
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
必须学习。。。
2009-9-27 20:00
0
雪    币: 74
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
已收藏,谢谢
2009-9-27 21:51
0
雪    币: 768
活跃值: (515)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
45
人咋这么牛呢?
请问是什么环境什么条件练就的这样神功??
可否学习一下学习过程??
2009-9-28 10:11
0
雪    币: 7
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
标记下好东西,谢谢了。
2010-5-24 16:51
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
好东西啊,还有视频。 顶啊!
2010-5-24 17:03
0
雪    币: 1681
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
itf
48
楼主的探索精神值得学习~~~~~~~谢谢了
2010-5-24 17:14
0
雪    币: 851
活跃值: (1178)
能力值: ( LV7,RANK:101 )
在线值:
发帖
回帖
粉丝
49
大米师傅能分享一下win10的ntfs系统的FCB结构体吗,最近在做毕设遇到了这个问题。
2021-4-6 17:11
0
游客
登录 | 注册 方可回帖
返回
//