迷域寻踪——分区表、文件分配表探秘


1、分区表

硬盘只有经过物理格式化、分区、逻辑格式化后才能使用,在进行分区时,FDISK会在硬盘的0柱面0磁头1扇区建一个64字节的分区表,在分区表的前面是主引导记录(MBR),后面是两个字节的有效标志55h、AAh(h表示16进制)。此扇区被称为主引导扇区,也是病毒最爱侵袭的地方,它由主引导记录+分区表+有效标志组成。

分区表对于系统自举十分重要,它规定着系统有几个分区;每个分区的起始及终止扇区、大小以及是否为活动分区等重要信息。分区表由4个表项组成,每个表项16个字节,各字节含义如表1:

表1

 字节       含  义

第0字节 是否为活动分区,是则为80h,否则为00h

第1字节 该分区起始磁头号

第2字节 该分区起始扇区号(低6位)和起始柱面

号(高2位)

第3字节 该分区起始柱面号的低8位

第4字节 系统标志,00h表该分区未使用,06h表高

版本DOS系统,05h扩展DOS分区、65h表

Netware分区

第5字节 该分区结束磁头号

第6字节 该分区结束扇区号(低6位)和结束柱面号

(高2位)

第7字节 该分区结束柱面号的低8位

第8~11字节 相对扇区号、该分区起始的相对逻辑扇区

号,高位在后低位在前

第12~15字节 该分区所用扇区数,高位在后、低位在前

注意:

1分区表有四个表项,表示硬盘最多只能容纳四个分区。

2磁盘的各个面称为磁头,软盘只有两个磁头,而硬盘往往有多个。各个磁头相同半径的磁道合称为柱面。

3高位在后,低位在前是一种存储数字方式,读出时应对其进行调整,如两字节12h、34h,应调整为3412h。

现在举例说明,有如下一分区表(16进制):



00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01

01 00 06 0B 23 9B 23 00 00 00 CD FF 00 00 00 00

01 9C 05 0B E3 DB F0 FF 00 00 00 55 05 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA

此分区表两个表项已被使用,说明此硬盘上存在两个分区(DOS主引导分区和扩展DOS分区),还有两个表项未用,最后是2个字节的有效标志。现以第一个表项为例说明各字节作用。

第0字节80h表明此分区为活动分区,系统启动时将从此分区读取系统文件,当硬盘上存在一个以上分区时,只能有一个是活动的。

第1字节01h表明此分区起始于第1磁道。

第2个字节01h用二进制表示为00000001,低6位为000001,合十进制为1,表此分区起始扇区为1。

第3字节00h,用二进制表示为00000000,加上第2个字节的高2位00作为高位,表示为0000000000,合十进制0,表此分区起始柱面为0。

第4字节06h表此分区为基本DOS分区。

第5字节0Bh表示该分区结束在第11磁头。

第6字节23h合二进制00100011,低6位100011合十进制35,此分区结束扇区则为35。

第7字节9Bh合二进制10011011,加上第6字节的高2位00作为高位,表示为0010011011,合十进制155,表此分区结束在第155柱面。

第8~11字节为23h,表此分区从相对逻辑35扇区开始。

第12~15字节为FFCDh,表此分区共有65985个扇区。综上所述,此分区为活动的基本DOS分区,分区从0柱面1磁头1扇区开始,即相对逻辑35扇区,终之于155柱面11磁头35扇区。

硬盘自举时,先将主引导扇区的主引导记录读入内存,主引导记录将检查结束标志是否为55AAh,并在分区表中找到唯一的一个活动分区,并根据该分区表项记载的起始扇区地址读入引导文件,完成启动过程。

要注意用PCTOOLS等一般软件无法访问主引导记录,因为它的磁盘编辑功能只能访问到逻辑0扇区,即BOOT扇区。但我们可以通过KV300或Norton的主引记录导出功能,观察自己的磁盘的分区表。也可对它进行修改,实现在不破坏原有数据的情况下增加分区、对某个分区加锁等功能,但用户最好谨慎行事,分区表可是“军事禁区”。

二、文件分配表

当一个磁盘Format后,在其逻辑0扇区(即BOOT扇区)后面的几个扇区中存在着一个重要的数据表——文件分配表(FAT),文件分配表一式两份,占据扇区的多少凭磁盘类型大小而定。顾名思义,文件分配表是用来表示磁盘文件的空间分配信息的。它不对引导区、文件目录表的信息进行表示,也不真正存储文件内容。

我们知道磁盘是由一个一个扇区组成的,若干个扇区合为一个簇,文件存取是以簇为单位的,哪怕这个文件只有1个字节。每个簇在文件分配表中都有对应的表项,簇号即为表项号,每个表项占15个字节(磁盘空间在10MB以下)或2个字节(磁盘空间在10MB以上)。为了方便起见,以后所说的表项都是指2个字节的。

文件分配表结构如表2(h表示16进制)。

注意:

1不要把表项内的数字误认为表示当前簇号,而应是该文件的下一个簇的簇号。

2高字节在后,低字节在前是存储数字的一种方式,读出时应进行调整,如两字节12h,34h,实际应为3412h。

文件分配表与文件目录表(FDT)相配合,可以统一管理整个磁盘的文件。它告诉系统磁盘上哪些簇是坏的或已被使用,哪些簇可以用,并存储每个文件所使用的簇号。它是文件的“总调度师”。

当DOS写文件时,首先在文件目录表中检查是否有相同文件名,若无则使用一个文件目录表项,然后依次检测FAT中的每个表项,找到第一个为0000h的表项后,将文件写入与该表项相对应的簇中,同时将该簇号写入文件目录表项的第26-27字节,如文件长度不止一簇,则继续向后寻找可用簇,找到后将其簇号写入上一次找到的表项中,如此直到文件结束,在最后一簇的表项里填上FFF8h,形成一个单向链表。

DOS删除文件时只是把文件目录表中的该文件的表项第0个字节改为E5h,表此表项已被删除,并在文件分配表中把该文件占用各簇的表项清0,以释放空间。其实文件的内容仍在盘上,并没有被真正删除,这就是undelete.exe、unerase.exe等一类恢复删除工具能起作用的原因。

文件分配表在系统中的地位十分重要,用户最好不要去修改它,以免误操作带来严重的后果。

表2

字 节 含 义

第0字节 表头,表磁盘类型。

FFh 双面软盘 每磁道8扇区

FEh 单面软盘 每磁道8扇区

FDh 双面软盘 每磁道9扇区

FCCh 单面软盘 每磁道9扇区

FC8h 硬盘

第1~2字节(表项号1) 表示第一簇状态,因第一簇已被系统占据,

 故此两字节为FFFFh

第3~4字节(表项号2) 表示第二簇状态,若为FFFTh表此簇为坏

 的,DOS已标记为不能用;0000h表示此簇

 为空,可以用;FFF8h表示该簇为文件的最

 后一簇;其余数字表示文件的下一个簇号,

 注意高字节在后,低字节在前

第5~6字节(表项号3) 表示第三簇状态,同上