分析NTFS系统,得到特定文件内容
首先使用InsDisk创建一个10G空间的硬盘
站内下载:下载
加载硬盘
进入磁盘管理,进行初始化硬盘,最后格式化
创建E:\dir\enjoy\test.txt
test.txt里面的内容是1234567890
打开WinHex
从图中可以看到启动扇区从0扇区开始,共计63个扇区,属于隐藏扇区
第一个分区从63扇区开始,总共62914496个扇区,每个扇区512字节,每个簇4096个字节,共计7864312个簇,$MFT所在簇号为786432,(柱面391;磁头160,扇区25)
第二个扇区起始扇区号为62914560,总计扇区20971520,每个扇区大小为512字节,每个簇4096个字节,总共2621439簇,MFT所在扇区为786432(柱面:4307,磁头:223,扇区:13)
注:第一和第二分区之间还有一个扇区,我不知道是干嘛的
最后从83875365扇区开始,是剩余扇区,共计10715个扇区
当然,通过软件,我们很容易得到磁盘的信息,但是,本文要做的,是手动查找这些信息,让我们对磁盘有更深刻的认识,首先了解一下磁盘的基本结构
硬盘的主引导记录也称MBR,位于0柱面0磁头1扇区,主引导记录扇区所在的磁道,通常称其为0磁道,它属于隐藏磁道,这个磁道的63个扇区属于隐藏扇区。操作系统的所有命令,除了FDISK以外都不能访问它们,格式化程序FORMAT,对此也无能为力。所以分区软件也无法将这些扇区分配给别的分区了,只能从63号扇区开始分配给第一个分区。
一个四分区的基本磁盘结构如下
扩展分区中的每个逻辑驱动器都存在一个类似于MBR的扩展引导记录(Extended Boot Record,EBR),也有人称之为虚拟mbr或扩展mbr,意思是一样的。扩展引导记录包括一个扩展分区表和该扇区的标签。扩展引导记录将记录只包含扩展分区中每个逻辑驱动器的第一个柱面的第一面的信息。一个逻辑驱动器中的引导扇区一般位于相对扇区32或63。但是,如果磁盘上没有扩展分区,那么就不会有扩展引导记录和逻辑驱动器。第一个逻辑驱动器的扩展分区表中的第一项指向它自身的引导扇区。第二项指向下一个逻辑驱动器的EBR。如果不存在进一步的逻辑驱动器,第二项就不会使用,而且被记录成一系列零。如果有附加的逻辑驱动器,那么第二个逻辑驱动器的扩展分区表的第一项会指向它本身的引导扇区。第二个逻辑驱动器的扩展分区表的第二项指向下一个逻辑驱动器的EBR。扩展分区表的第三项和第四项永远都不会被使用。
MBR基本结构
硬盘分区结构信息
存贮字节位 | 内容及含义 |
---|---|
第1字节 | 引导标志,若值为80H表示活动分区,若值为00H表示非活动分区。 |
第2\3\4字节 | 本分区的起始磁头号、扇区号、柱面号。其中: 磁头号–第2字节; 扇区号–第3字节的低6位; 柱面号–第3字节高2位+第4字节8位。 |
第5字节 | 分区类型符; 00H–表示该分区未用(即没有指定); 06H–FAT16基本分区; 0BH–FAT32基本分区; 05H–扩展分区; 07H–NTFS分区; 0FH–(LBA模式)扩展分区(83H–Linux分区等) |
第6\7\8字节 | 本分区的结束磁头号、扇区号、柱面号。其中: 磁头号–第6字节; 扇区号–第7字节的低6位; 柱面号–第7字节高2位+第8字节8位。 |
第9\10\11\12字节 | 本分区之前已用了的扇区数(分区起始扇区)。 |
第13\14\15\16字节 | 本分区的总扇区数 |
基本知识介绍完,现在我们来查看一下
第一个分区
偏移(offset) | 描述 |
---|---|
80 | 活动分区 |
01 01 00 | 起始扇区:磁头号1,扇区号1,柱面号0 |
07 | NTFS分区 |
FE FF FF | 结束扇区:? |
3F 00 00 00 | 起始扇区 3F(63) |
C1 FF BF 03 | 本分区扇区总数3BFFFC1H=62914497(估计加上了第一分区和第二分区之间那个分区) |
第二个分区
偏移(offset) | 描述 |
---|---|
00 | 非活动分区 |
FE FF FF | 起始扇区? |
07 | NTFS分区 |
FE FF FF | 结束扇区:? |
00 00 C0 03 | 起始扇区 3C00000(62914560) |
00 00 40 01 | 本分区扇区总数 1400000(20971520) |
除了,起始(结束)磁头号扇区号,柱面号出了点问题(柱面号10位不够),其他的与软件测出来的一致
因为我们要找的文件在E盘,属于第二个分区,所以我们找到第62914560个扇区
通过前面一片博客的介绍,我们从图中得知这个分区每个扇区大小为512(200H)字节,每个簇占8个扇区(4096字节,进行了4K对齐),这是块硬盘(F8),每个磁道63(003F)个扇区,每个柱面255(00FF)个磁头,总计20971519(0000013FFFFF)个扇区,
M
F
T
开始簇号
C
0000
所以我们找到
MFT开始簇号C0000 所以我们找到
MFT开始簇号C0000 所以我们找到MFT所在扇区,3C00000+C00008=69206016,然后找到第五个文件记录,69206016+25=69206026
我们发现,90属性里没啥有用的资料,于是再往下看0AH(索引分配)的属性,发现08位上的值为1,说明这是非常驻属性,从偏移为20位置的值48得知Data Run的偏移地址,Data Run的值是31 01 A3 3D 14 00,所以索引地址在起始簇号为143DA3处,占一个簇.扇区号:3C00000+143DA3*8=73526552
通过8H位上的值来划分索引项,找到我们需要找的文件夹dir所在项,得到文件的MFT参考号1D(偏移0H处,只取前面四位?这个我还不太清楚,看到大多版本是8位,但是4位才能得到),扇区号:3C00000+C00008+1D2=69206074,$MFT下第1D个文件记录
可以通过dir的文件属性90H找到enjoy目录的索引根的MFT参考号1E,同时这里也可以看到enjoy的父目录dir的MFT参考号1D,扇区号:3C00000+C00008+1E2=69206076
可以通过enjoy的文件属性90H找到enjoy.txt的文件索引根的MFT参考号1F,扇区号:3C00000+C00008+21F=69206078
通过enjoy.txt的文件属性80H得到文件enjoy.txt的内容1234567890
至此,我们成功手动从yingpan中找到我们想要找到的文件所在位置,以及文件内容.
很多时候我算地址,前面用的16进制,后面用的10进制,这点需要注意!!!