【计算机网络病毒二】硬盘结构
硬盘结构
1、硬盘的物理结构
核心:磁盘片被密封、固定并且不停的高速旋转,磁头悬浮于盘片上方沿磁盘径向移动,并且不和片接触。
两部分:
①磁头-盘片组件(HDA),其中包括读写磁头、磁头驱动机构、磁盘片、盘片驱动电机等。
②印制电路板组件(PCBA),其中包括电阻、电容、半导体集成电路等元器件组成的控制电路,负责对各种信号进行处理。
磁盘存储数据是根据电、磁转换原理实现的。
必须对磁盘片表面的磁介质进行某些有序的磁化处理,使这些磁介质符合进行数据存储的要求。对磁介质的处理分为三个过程,就是通常所说的低级格式化、分区和高级格式化。

2、低级格式化
目的:将空白的磁盘划分出柱面和磁道,再将磁道划分为若干个扇区,每个扇区又划分出标识部分ID、间隔区GAP和数据区DATA等。
低级格式化只能针对一块硬盘而不能支持单独的某一个分区。每块硬盘在出厂时,已由硬盘生产商进行低级格式化,因此通常使用者无需再进行低级格式化操作。其实,我们对一张软盘进行的全面格式化就是一种低级格式化。
需要指出的是,低级格式化是一种损耗性操作,其对硬盘寿命有一定的负面影响。
磁盘的基本参数
硬盘由很多盘片组成,每个盘的每个面都有一个读写磁头。如果有N个盘片,就有2N个面,对应2N个磁头,从0、1、2开始编号。
每个盘片的每个面都有一个读写磁头(Head),从0、1、2...编号。
每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的),每个盘片的半径均为固定值R的同心圆在逻辑上形成了一个以电机主轴为轴的柱面(Cylinder),从0开始编号,柱面从外向内编号为0,1,2......。
每个盘片上的每个磁道又被划分为若干个扇区(Sector),通常容量是512B。
老硬盘3D参数:老硬盘采用与软盘类似的结构生产
硬盘:硬盘盘片的每一条磁道都具有相同的扇区数。
磁头数最大值为255,柱面最大值为1023,扇区数最大为63,每个扇区一般是512字节,老硬盘最大容量为:
255× 1023× 63× 512/10148576=8024MB
255× 1023× 63× 512/10000000=8414MB
基本INT 13H调用
BIOS Int 13H 调用是 BIOS 提供的磁盘基本输入输出中断调用。
它可以完成磁盘(包括硬盘和软盘)的复位, 读写, 校验, 定位, 诊断, 格式化等功能。
它使用的就是 CHS 寻址方式, 因此最大识能访问 8 GB 左右的硬盘。
扩展 Int 13H 简介
- 虽然现代硬盘都已经采用了线性寻址, 但是由于基本 Int 13H 的制约, 使用 BIOS Int 13H 接口的程序, 如 DOS 等还只能访问 8 G 以内的硬盘空间。
- 为了打破这一限制, Microsoft 等几家公司制定了扩展 Int 13H 标准(Extended Int13H), 采用线性寻址方式存取硬盘, 所以突破了 8 G 的限制,而且还加入了对可拆卸介质 (如活动硬盘) 的支持。
分区与高级格式化
划分好的每一个区域都称作一个分区,最多可以划分4个主分区
分区过程中,分区程序向0柱面0磁头1扇区写入主引导记录(Master Boot Record, MBR)和分区记录表(Disk Partition Table,DPT)
硬盘的分区格式有很多种,由操作系统决定。常见的有:FAT16,FAT32,NTFS等。
硬盘分区后还需要通过高级格式化在分区内建立完整的存储系统后才能正常使用。
高级格式化的目的是在分区内建立分区引导记录(DOS Boot Record, DBR)、文件分配表(File Allocation Table,FAT)、文件目录表(File Directory Table,FDT)和数据区(DATA)
3、硬盘的数据结构
硬盘的结构体系由6个部分组成:主引导区、主分区表和分区链表、分区引导记录、文件分配表、文件目录表以及数据区。
主引导扇区的组成
主引导扇区也就是硬盘的第一个扇区(0柱面0磁头1扇区),它由主引导记录MBR、主分区表即磁盘分区表DPT和引导扇区标记(Boot Record ID)三部分组成,是完成系统BIOS像操作系统交接的重要入口。
该扇区所在磁道属于隐藏磁道,其上63个扇区属于隐藏扇区,除FDisk可访问外,其他程序一般不能访问该区域。
为病毒程序代码提供了栖身之地。
①主引导记录(MBR)占用主引导扇区的前446个字节,存放系统主引导程序(它负责从活动分区中装载并运行系统引导程序)。MBR不随操作系统的不同而不同,即不同的操作系统可能会存在相同的 MBR。MBR不夹带操作系统的性质,具有公共引导的特性。通常情况下,一块硬盘只有一个主引导记录
②主分区表(DPT)占用64个字节,记录了磁盘的基本分区信息。主分区表分为4个分区表项,每项16个字节,分别记录了每个主分区的信息,因此最多可以有4个主分区。
③引导区标记占用两个字节,对于合法引导区,它等于OxAA55(磁盘中超过1个字节的数据都以实际数据显示,就是按高位到低位的方式显示,按低位到高位的方式存储),这是判别引导区是否合法的标志。(结束标志55AA)
硬盘主分区表结构简介
主分区表由4个分区表项构成,每一项的结构相同,各占16个字节。图2.4是用WinHex 读取的MBR中主分区表部分(用工具软件划分出3个主分区,第3个主分区的类型为0x0F,即用于扩展,扩展成两个逻辑驱动器,参见图),其中主分区表的第一个主分区表项(用虚线标志部分)的内容解释如表所示。
扩展分区与扩展MBR简介
通过主引导记录定义的硬盘分区表,最多只能描述4个分区,如果要多余4个分区,就要突破主引导记录中的分区描述方法。

扩展分区大小定义
扩展分区表项中的相对扇区数字段所显示的是从扩展分区开始到逻辑驱动器中第一个扇区的位移的字节数。
总扇区数字段中的数是指组成该逻辑驱动器的扇区数目。总扇区数字段的值等于从扩展分区表项所定义的引导扇区到逻辑驱动器末尾的扇区数。
磁盘分区表示例

序号 | 偏移位置 | 大小 | |
---|---|---|---|
1 | 00 00 08 00 | 00 40 00 00 | 2G |
2 | 00 40 08 00 | 00 40 00 00 | 2G |
3 | 00 80 08 00 | 00 80 00 00 | 4G |
4 | 01 00 08 00 | 02 A2 68 00 | 21G |
扩展分区1

物理位置:01 00 08 00
本扩展分区位置:00 00 08 00,大小:00 80 00 4G
后续扩展分区位置:00 80 08 00,大小:00 80 08 00
后续扩展分区物理位置=扩展分区物理位置+偏移地址:01000800+00800800=01 80 10 00
扩展分区2

物理位置: 01 80 10 00
本扩展分区位置:00 00 08 00,大小:00 80 00 4G
后续扩展分区位置:01 00 10 00,大小:00 40 08 00
后续扩展分区物理位置:01 00 08 00+01 00 10 00 =02 00 18 00
扩展分区3

物理位置:02 00 18 00
本扩展分区位置:00 00 08 00,大小:00 40 00 00
后续扩展分区位置:01 40 18 00,大小:01 62 50 00
后续扩展分区物理位置:01 00 08 00+01 40 18 00 =02 40 20 00
扩展分区4

物理位置:02 40 20 00
本扩展分区位置:00 00 08 00,大小:01 62 48 00
后续扩展分区位置:00 00 00 00,大小:00 00 00 00 00
扩展分区结束
4、GPT分区结构

①保护MBR
保护MBR位于GPT磁盘的第一个扇区,也就是0号扇区,由磁盘签名、MBR磁盘分区表和结束标志组成。

在保护MBR扇区中没有引导程序,分区表内只有一个表项,这个表项描述一个类型为0xEE的分区,分区起始地址是1号扇区,大小为四个字节所能存储的最大值(FF FF FF FF)。
该分区的存在可以使计算机认为这个磁盘是合法的,并且已被使用,从而不再去试图对其进行分区、格式化等操作,而EFI根本不使用这个分区表。
②GPT头
GPT头位于GPT磁盘的第二个扇区,该扇区是在创建GPT磁盘时生成的。
GPT头会定义分区表的起始位置、分区表的结束位置、每个分区表项的大小、分区表项的个数及分区表的校验和等信息。


18H~1FH。长度为8字节,表示GPT头所在扇区号,通常为1号扇区,也就是GPT磁盘的第二个扇区。
20H~27H。长度为8字节,是GPT头备份的所在扇区号,也就是GPT磁盘的最后一个扇区,当前值为2 503 871。
28H~2FH。长度为8字节,是GPT分区区域的起始扇区号,当前值为34,GPT分区区域通常都是起始于GPT磁盘的34号扇区。
30H~37H。长度为8字节,是GPT分区区域的结束扇区号,当前值为2 503 838。
48H~4FH。长度为8字节,表示GPT分区表的起始扇区号,当前值为2,GPT分区表通常都是起始于GPT磁盘的2号扇区。
50H~53H。长度为4字节,表示分区表项的个数。Windows系统限定GPT分区个数为128,每个分区占用一个分区表项,所以该值为128。
54H~57H。长度为4字节,每个分区表项占用字节数,该值固定为128。
58H~5BH。长度为4字节,是分区表的CRC校验和。
5CH~1FFH。长度为420字节,保留不用。
③GPT分区表
分区表位于GPT磁盘的2~33号扇区,一共占用32个扇区,能够容纳128个分区表项,每个分区表项大小为128字节。
因为每个分区表项管理一个分区,所以Windows系统允许GPT磁盘创建128个分区。
每个分区表项中记录着分区的起始和结束地址、分区类型的GUID、分区名字、分区属性和分区GUID。

00H~0FH。长度为16字节,用来描述分区类型,其类型可以是前面提到过的EFI系统分区(ESP)、微软保留分区(MSR)、LDM元数据分区、LDM数据分区、OEM分区、主分区。


微软公司为GPT分区定义的类型
Intel公司为GPT分区定义的类型

10H~1FH。长度为16字节,是分区表的GUID,这个GUID对于分区来讲是唯一的。
20H~27H。长度为8字节,是分区的起始地址,用LBA地址表示,在分区表项1中该值为34,说明第一个分区开始于GPT磁盘的34号扇区。
28H~2FH。长度为8字节,是分区的结束地址,用LBA地址表示,在分区表项1中该值为65 569,说明第一个分区结束于GPT磁盘的65 569号扇区
30H~37H。长度为8字节,是分区的属性。
38H~7FH。长度为72字节,是分区的名称,用Unicode码表示。例如,在第一个分区表项中分区名为“Microsoft reserved partition”,说明这是一个微软保留分区;第二个分区表项中分区名为“Basic data partition”,说明这是一个基本数据分区,也就是主分区。
④分区区域
GPT分区区域通常都是起始于GPT磁盘的34号扇区,是整个GPT磁盘中最大的区域,由多个具体分区组成,如EFI系统分区(ESP)、微软保留分区(MSR)、LDM元数据分区、LDM数据分区、OEM分区、主分区等。分区区域的起始地址和结束地址由GPT头定义。
⑤GPT头备份
GPT头有一个备份,放在GPT磁盘的最后一个扇区,但这个GPT头备份并不是GPT头的简单复制,它们的结构虽然一样,但其中的参数却有一些区别。
00H~07H。长度为8字节,是GPT头的签名,十六进制为“45 46 49 20 50 41 52 54”,ASCII码为“EFI PART”。
08H~0BH。长度为4字节,表示版本号。

0CH~0FH。长度为4字节,是GPT头备份的总字节数。当前值为92,说明GPT头备份占用92字节。
10H~13H。长度为4字节,是GPT头备份的CRC校验和。
14H~17H。长度为4字节,保留不用。
18H~1FH。长度为8字节,表示GPT头备份所在扇区号,当前值为2 503 871号扇区,也就是GPT磁盘的最后一个扇区。
20H~27H。长度为8字节,是GPT头的所在扇区号,当前值为1号扇区,也就是GPT磁盘的第二个扇区。
28H~2FH。长度为8字节,是GPT分区区域的起始扇区号,当前值为34,GPT分区区域通常都是起始于GPT磁盘的34号扇区。
30H~37H。长度为8字节,是GPT分区区域的结束扇区号,当前值为2 503 838。
38H~47H。长度为16字节,是GPT磁盘的GUID。
⑥GPT分区表备份
分区区域结束后,紧跟着就是分区表的备份,其地址在GPT头备份扇区中有描述。
分区表备份是对分区表32个扇区的完整备份。如果分区表被破坏,系统会自动读取分区表备份,也就能够保证正常地识别分区。