本节书摘来自异步社区《NTFS文件系统扇区存储探秘》一书中的第1章,第1.1节,作者:宋群生 , 宋亚琼著,更多章节内容可以访问云栖社区“异步社区”公众号查看
第1章 FAT文件系统的数据结构
NTFS文件系统扇区存储探秘
硬盘在分区以后,其每一个逻辑驱动器都必须建立起完整的数据结构,才能正常使用。FAT文件系统和NTFS文件系统的数据结构大部分都不相同,只在存储系统分区数据的扇区上,有某些相同或相似的地方。
FAT文件系统的数据结构由6部分组成,分别是主引导记录、主分区表或分区链表、分区引导记录、文件分配表、文件目录表和数据区。这里需要说明的是,主引导记录和主分区表都只有一个,共同存储在一个扇区中。如果使用CHS(柱面数、磁头数、扇区数)寻址方式,这个扇区是0柱面0磁头1扇区;如果使用线性寻址方式,这个扇区是0号扇区。从硬盘分区后的区域结构上划分的话,该扇区可以认为是属于第1个逻辑驱动器,也就是通常所说的C盘。而其他的逻辑驱动器就没有主引导记录和主分区表了,在这些逻辑驱动器所属的第1个系统隐藏扇区上,只有分区链表。
NTFS文件系统的数据结构中,用于系统引导的部分基本与FAT文件系统相同,如主引导记录、主分区表或分区链表、分区引导记录这3部分。不过在这3部分中,很多字段的数据所表示的内容是完全不同的,只是都有相同的称呼罢了。
FAT文件系统的另外3部分,即文件分配表、文件目录表和数据区,在NTFS文件系统中则不存在。NTFS文件系统使用的是“磁盘上的任何事物都为文件”的存储模式,甚至连系统使用的引导文件数据,都作为文件存储在磁盘上。
了解文件系统的数据结构和扇区存储规律,是对物理硬盘扇区进行读写操作的基础,也是将扇区读写技术应用于系统修复和文件恢复的先决条件。因为一个硬盘上有很多逻辑驱动器,这些逻辑驱动器可能使用不同的文件系统,而对于不同的文件系统,读写与分析扇区数据的方法是完全不相同的。
本章先介绍FAT文件系统的数据结构。
1.1 主引导记录
NTFS文件系统扇区存储探秘
硬盘的主引导记录也称MBR,存储在0柱面0磁头1扇区。如果读写扇区时采用线性寻址方式,则该扇区的编号为“0”。在本书后面的章节里,扇区地址全部使用线性寻址方式来表示。该扇区的512字节有3部分内容,除了主引导记录外,还有分区表和结束标志55 AA。
主引导记录的作用非常重要,它是硬盘启动时最先加载的扇区数据。下面通过分析硬盘的启动过程,来说明它的重要性。
(1)计算机系统接通电源以后,主板BIOS加电进行自检。自检的内容很多,是一个很复杂的过程,这里只介绍与硬盘有关的部分。
(2)将硬盘第1个扇区,也就是0柱面0磁头1扇区(线性寻址时是0号扇区)的内容
读入内存。
(3)检查结束标志,也就是扇区最后两个字节的值是否等于“aa55H”(存储顺序是低字节在前,高字节在后)。若不等则打印屏幕提示,然后死机。
(4)执行主引导记录中的程序,将控制权转交给主引导程序。
(5)主引导程序首先将自己读入内存,然后查找在分区表中是否有活动分区。找到活动分区以后,将分区引导记录读入内存。
(6)检查结束标志是否等于“aa55H”,然后执行分区引导记录中的启动程序,将控制权交给操作系统。
(7)操作系统加载系统文件,计算机启动。
通过对以上过程的分析可以看出,如果主引导记录不正常,后面所有的启动过程都不可能正常执行。
有一种特殊情况,使计算机启动过程的前两步与上面介绍的不一样。如果硬盘上安装了多系统引导软件,如Partition Magician分区软件,则该软件将主引导记录替换成自己的一段程序。这段程序将BIOS引向软件设置的专用分区,然后根据操作者的选择激活某一个分区,再进入正常的启动过程。类似Partition Magician这样的分区软件还有很多,它们各有自己的特点,这些第三方软件都不在本书的讨论范围之内。通常情况下,一块硬盘上只有一个主引导记录。
现在用“读硬盘扇区数据.EXE”程序将一块硬盘的主引导记录读出,程序运行界面如图1-1所示。“读硬盘扇区数据.EXE”程序将在《工具篇》中介绍,现在先使用该程序的运行结果。
图1-1所示的左图是程序运行的主窗口。在主窗口的编辑框中显示了数值“10084”,这是主引导记录所在扇区中,全部字节的累加算术和。为什么要取这个数值的原因将在《工具篇》中详细说明。
图1-1所示的右图是程序运行后弹出的对话框。该对话框中显示了512字节的十六进制值,每行显示16字节,共显示32行。
在图1-1中,位移从00H到1bdH就是主引导记录。如果用扇区内的字节编号来表示某一字节,设起始号为1,就是从第1到第446字节。为什么要使用位移和扇区内编号这两种计算方式呢?因为在今后分析扇区数据时,或者是手工编制扇区中的字节数据时,某些场合用编号计算是比较方便的。
譬如在《工具篇》中介绍的“修改扇区文件数据.EXE”程序,可以将每个扇区的512字节,按照每行16字节,一共32行的格式显示在屏幕上。如果从1开始编号,则感觉很有对称性,容易查找某一字节。如果用位移值计算,就感觉不太方便。
字节位移是从0开始计数,而字节编号是从1开始编号,所以对同一字节来说,字节编号的值要比字节位移的值大1。
位移从1beH到1fdH是分区表,字节编号为447到510。有关分区表的内容在下一节讨论。
最后两字节是结束标志“55 AA”。因为两字节组成一个字,写入磁盘的顺序是低字节在前,高字节在后,所以“55 AA”写成十六进制应为“aa55H”。
结束标志“55 AA”是查找系统数据扇区的标志,据此对扇区进行搜索,可用于寻找主引导记录、主分区表或分区链表所在的扇区地址,也可以具此查找分区引导记录的扇区地址。
主引导记录扇区所在的磁道,通常称为0磁道,它属于隐藏磁道,这个磁道的63个扇区属于隐藏扇区。操作系统的所有命令,除了FDISK以外都不能访问它们。就连格式化程序FORMAT,对这些隐藏扇区也无能为力。
主引导记录和主分区表的数据,只占用了0磁道的第1个扇区,系统对其他的62个扇区弃之不用。正因为如此,0磁道的剩余62个扇区就成了一些病毒程序代码、操作系统的引导代码、应用软件用于自我保护的识别标记、BIOS功能扩展程序代码的栖息之地。
经常监测并分析0磁道的扇区数据变化,就能发现很多不为人知的秘密,作者举一例来说明这个问题。
美国的MACROMEDIA公司堪称网页制作软件的鼻祖,该公司的三大软件颇具影响力。这三款软件是:网页制作软件DREAMWEAVER MX、图象处理软件FIREWORKS MX和动画制作软件FLASH MX。
这三款软件有试用版,从操作者安装使用开始,时间限制为30天。超过试用期后,软件就不能运行了。即使重新安装操作系统和这三款软件,甚至将硬盘格式化或重新分区,也无济于事。
那么这三款软件采用了什么保护机制呢?作者通过对0磁道扇区数据的监测,发现了这三款软件的一个秘密。
这三款软件中的每一款软件安装以后,都会向0磁道的第32扇区写入一部分识别代码。当操作者对逻辑盘进行格式化,或是对整个硬盘重新分区时,所运行的程序都不会访问第32扇区,所以软件的时间限制仍然有效。
作者用扇区清零程序将32扇区的数据清掉,然后再安装这三款软件的试用版,则可以继续使用了。
采取这种保护方式的软件还有很多,只要经常监测0磁道并用心去分析,就能发现许多不为人知的秘密。
下面用作者使用的两块硬盘运行“监视0磁道变化.EXE”程序,将两块硬盘的0磁道63个扇区的数据分别读出,然后进行比较。所使用的工具程序在《工具篇》中再详细介绍。
先看一块新硬盘的显示数据,如图1-2所示。
图1-2所示的扇区编号没有使用线性寻址的表示方法,而是使用了1~63的编号方式,这是为了强调在硬盘的结构中,每磁道有63个扇区的虚拟物理概念。
从图1-2所示的扇区字节算术和可以看出,只有第1扇区写有数据,其他62个扇区全部为0。这是因为该硬盘使用不久,还没有写入其他程序的垃圾代码。
再看一块老硬盘的显示数据,如图1-3所示。
如图1-3所示,除了第1扇区写有系统引导数据以外,还有很多扇区也写有数据。与第1扇区字节算术和相同的,如第6扇区,是作者备份的系统数据,目的是日后出现引导故障时修复硬盘。与第1扇区字节算术和不相同的扇区,就是硬盘使用三年多来,各种应用软件写入的垃圾代码。