首页
社区
课程
招聘
[求助]ntfs文件系统中,找到了$mft如何再解析出文件来,网上资料太少,求大家指点下!!
发表于: 2009-2-10 20:57 24232

[求助]ntfs文件系统中,找到了$mft如何再解析出文件来,网上资料太少,求大家指点下!!

2009-2-10 20:57
24232
收藏
免费 0
支持
分享
最新回复 (31)
雪    币: 224
活跃值: (15)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
从LINUX上找.
2009-2-10 21:12
0
雪    币: 1337
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
http://forum.eviloctal.com/thread-33513-1-1.html
2009-2-11 11:28
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
http://forum.eviloctal.com/thread-33513-1-1.html

这个已经看过了,看到获取$mft再往下就看不明白了,且里面有此数据结构感觉不太对, 不知是不是我RP问题 我就想知道具体的步骤,从$mft再去找哪里直到找到文件??

SageNdis大哥给个地址我去学习学习

感谢大家关注继续等。
2009-2-11 16:30
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
5
在mft里通过b+ tree来找file record,从而找到文件,

如果想偷懒可以使用FSCTL_GET_NTFS_FILE_RECORD这个 CTL CODE
2009-2-11 16:35
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
在mft里通过b+ tree来找file record,从而找到文件,

如果想偷懒可以使用FSCTL_GET_NTFS_FILE_RECORD这个 CTL CODE

看见360大牛回复我就激动 这个b+ tree是什么样的结构如何获取?
2009-2-11 16:42
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
数据结构没学好看见“树”就吐血,
2009-2-11 17:25
0
雪    币: 115
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你是不是要自己通过自己读取扇区内容,根据ntfs文件系统结构,查找某一文件内容?上午看你帖的时候还以为你要恢复$MFT这个文件的内容

找某一个文件的内容(如要读取文件F:\WINDOWS\SYSTEM32\abc.exe,具体步骤如下:
(1)读取分区表/分区链表信息,找到磁盘F的起始扇区。
(2)读取F盘的第一个扇区(分区的BOOTSETOR)取得分区的每簇大小,MFT表起始簇号等信息。
(3)读取MFT表的第五个记录(根目录)找到目录索引所在簇号。
(4)读取根目录索引,查找WINDOWS目录所在的MFT记录号
(5)读取WINDOWS目录的MFT记录,找到目录索引所在簇号。
(6)读取WINDOWS目录的索引,查找SYTEM32目录所在MFT记录号
(7)读取SYTEM32目录的MFT记录,找到目录索引所在簇号。
(8)读取SYTEM32目录的索引,查找abc.exe所在MFT记录号
(9)读取abc.exe文件的MFT记录,找到它的DATA属性。
(10)根据DATA属性中指定的文件数据存放位置读取出abc.exe文件的数据。

推荐参考书:《数据安全与编程技术》 涂彦晖,戴士剑
2009-2-11 18:27
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
9
又见Userinit.exe~~
2009-2-11 19:56
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你是不是要自己通过自己读取扇区内容,根据ntfs文件系统结构,查找某一文件内容?上午看你帖的时候还以为你要恢复$MFT这个文件的内容

找某一个文件的内容(如要读取文件F:\WINDOWS\SYSTEM32\abc.exe,具体步骤如下:
(1)读取分区表/分区链表信息,找到磁盘F的起始扇区。
(2)读取F盘的第一个扇区(分区的BOOTSETOR)取得分区的每簇大小,MFT表起始簇号等信息。
(3)读取MFT表的第五个记录(根目录)找到目录索引所在簇号。
(4)读取根目录索引,查找WINDOWS目录所在的MFT记录号
(5)读取WINDOWS目录的MFT记录,找到目录索引所在簇号。
(6)读取WINDOWS目录的索引,查找SYTEM32目录所在MFT记录号
(7)读取SYTEM32目录的MFT记录,找到目录索引所在簇号。
(8)读取SYTEM32目录的索引,查找USERINIT.EXE所在MFT记录号
(9)读取USERINIT.EXE文件的MFT记录,找到它的DATA属性。
(10)根据DATA属性中指定的文件数据存放位置读取出abc.exe文件的数据。

推荐参考书:《数据安全与编程技术》 涂彦晖,戴士剑

感谢hust白客大哥的详细指导,在这里有还几个地方不太明白:

1.“(3)读取MFT表的第五个记录(根目录)找到目录索引所在簇号。”这里的根目录在MFT第五个记录是固定的吗?始终在第五个?这个记录是根据哪个结构来找到的?

2.“(8)读取SYTEM32目录的索引,查找USERINIT.EXE所在MFT记录号
(9)读取USERINIT.EXE文件的MFT记录,找到它的DATA属性。”

这里的userinit.exe是不是应该为abc.exe??
2009-2-11 20:13
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
11
是的,那位仁兄把它搞窜了~
2009-2-11 20:17
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
是机器狗太嚣张的原因
2009-2-11 20:21
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
13
可在sourceforge上找linux下解析fat32/ntfs的源码.
2009-2-11 21:27
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
14
给你个好玩的东西吧。你看了应该会高兴。
上传的附件:
2009-2-12 01:16
0
雪    币: 247
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
15
给你个好玩的东西吧。你看了应该会高兴。
上传的附件
Windows系统文件操作.rar (2009-02-12 01:16, 253.1 KB, 7 次下载)


瞻仰weolar大侠的好东东~~~
thx
2009-2-12 09:49
0
雪    币: 115
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
[QUOTE=astrayfish;576637].(3)读取MFT表的第五个记录(根目录)找到目录索引所在簇号。”这里的根目录在MFT第五个记录是固定的吗?始终在第五个?这个记录是根据哪个结构来找到的?QUOTE]

NTFS元数据文件列表
序号        元数据文件        功能
0         $MFT        主控文件表本身
1        $MFTMirr        主控文件表的部分镜像
2        $LogFile        日志文件       
3        $Volume        卷文件
4        $AttrDef        属性定义列表文件
5        $Root        根目录
6        $Birmap        位图文件,记录了卷中簇的分配情况
7        $Boot        引导文件,记录了系统用于引导的数据情况
8        $BadClus        卷的坏簇列表文件
9        $Secure        安全文件
10        $UpCase        大小写字符转换表文件
11        $Extended metadata directory        扩展元数据目录
12        $Extend\$Reparse        重解析点文件
13        $Extend\$UsnJrnl        加密日志文件
14        $Extend\$Quota        配额管理文件
15        $Extend\$ObjID        对象ID文件
16~23                为以后扩展而保留
23~                用户文件和目录

NTFS重要元数据文件说明如下:
(1)MFT中的第0个记录就是MFT自身。
(2)由于MFT文件本身的重要性,为确保文件系统结构的可靠性,系统专门为它准备了一个镜像文件($MFTMirr),也就是MFT中的第1个记录。
(3)第5个记录是根目录($\),其中保存了存放于该卷根目录下所有文件和目录的索引。
2009-2-12 10:28
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
可在sourceforge上找linux下解析fat32/ntfs的源码.

感谢sudami指点,你发的http://forum.eviloctal.com/thread-33513-1-1.html开始还行,越往后越看不明白了

weolar大侠的“windows系统文件操作.rar”我看了的确很高兴,同样感谢hust白客大侠
2009-2-12 10:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
MFT中的文件记录对应各个文件,与FAT32不同NTFS文件系统将文件的所有信息都放入属性中,如果想查看的话,可以使用NTFS_Explorer工具,那个工具就是用来解析NTFS文件系统的。
2009-2-12 14:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
1.“(3)读取MFT表的第五个记录(根目录)找到目录索引所在簇号。”这里的根目录在MFT第五个记录是固定的吗?始终在第五个?这个记录是根据哪个结构来找到的?
根目录固定是第六个(第一个编号是0),应该根据$MFT本身的运行列表来找,而不是固定在mft位置按下排(中间可能是不连续的,不过几乎不可能碰到,但理论上存在),另外mft 及indx结构的大小最好是自己获取,而不是取固定的1024及4096,解析的时候,别忘了0X20属性,读取任何其他属性前,请先查看0X20属性是否存在

NTFS的资料还是看linux那的比较全,可以打印出来参考。
http://forum.eviloctal.com/thread-33513-1-1.html这里介绍的太少
2009-2-13 22:06
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
太感谢了...顶上去吧...
2009-3-26 13:49
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
DATARUN后面为非零的情况就错了
2009-9-18 14:30
0
雪    币: 266
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
谢谢那个发代码的NB人
2009-9-19 14:08
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
二楼说的不错,不过太难了,一大堆。
2009-9-24 00:03
0
雪    币: 233
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
大三的时候倒是用C在unix实现过读取NTFS分区的文件的功能,不过现在毕业一年多了,忘得都差不多了,具体实现应该跟上面那些大牛说的差不多,不过具体实现中还会有很多小问题的,
每个文件属性很多,每个属性的意义和字节数都不同
你可以参考一下http://data.linux-ntfs.org/ntfsdoc.pdf
2009-9-24 13:00
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
下了是要回帖的。。
2009-10-27 16:32
0
游客
登录 | 注册 方可回帖
返回
//