引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的
第一物理扇区。它由两个部分组成:即主引导记录MBR和硬盘分区表DPT。 在总共512字节的主引导分区里其中MBR占446个字节(偏移0--偏移1BDH),DPT占64个字节(偏移1BEH--偏移1FDH),最后两个字节“55,AA”(偏移1FEH偏移1FFH)是分区的结束标志。大致的结构如下图:
0000 |------------------------------------------------|
| |
| |
| Main Boot Record |
| |
| |
| 主引导记录(446字节) |
| |
| |
| |
01BD | |
01BE |------------------------------------------------|
| |
01CD | 分区信息 1(16字节) |
01CE |------------------------------------------------|
| |
01DD | 分区信息 2(16字节) |
01DE |------------------------------------------------|
| |
01ED | 分区信息 3(16字节) |
01EE |------------------------------------------------|
| |
01FD | 分区信息 4(16字节) |
|------------------------------------------------|
| 01FE | 01FF |
| 55 | AA |
|------------------------------------------------|
主引导记录中包含了硬盘的一系列参数和一段引导程序。引导程序主要是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统。它执行到最后的是一条JMP指令跳到操作系统的引导程序去。这里往往是引导型病毒的注入点,也是各种多系统引导程序的注入点。但是由于引导程序本身完成的功能比较简单,所以我们可以完全地判断该引导程序的合法性(看JMP指令的合法性),因而也易于修复。象命令fdisk/mbr可以修复MBR和KV300这类软件可以查杀任意类型的引导型病毒,就是这个原因。
往下来是硬盘的分区表,由4个16字节的分区信息表组成。每个信息表的
结构如下:
偏移 长度 所表达的意义
0 字节 分区状态: 如0-->非活动分区
80--> 活动分区
1 字节 该分区起始头(HEAD)
2 字 该分区起始扇区和起始柱面
4 字节 该分区类型:如82--> Linux Native分区
83--> Linux Swap 分区
5 字节 该分区终止头(HEAD)
6 字 该分区终止扇区和终止柱面
8 双字 该分区起始绝对分区
C 双字 该分区扇区数
最后的两个标志“55 AA”是分区表的结束标志,如果这两个标志被修改
(有些病毒就会修改这两个标志),则系统引导时将报告找不到有效的分区表。
Master Boot Record (MBR)
硬盘的主引导山区。
Fdisk是我们在硬盘分区时最常用的命令,但有的读者可能还不知道,Fdisk命令还有一个未公开参数/MBR,如果在DOS提示符下使用Fdisk /?不会发现此参数,但是这个参数却有很重要的作用,MBR是主引导记录(Master Boot Record)的缩写。那么,Fdisk /MBR是如何工作的呢?下面和各位读者共同学习一下。
先来看看主引导扇区,硬盘的零柱面零磁道的第一个扇区,被称为主引导扇区,(当然是512个字节喽),主引导扇区由主引导记录(MBR)、硬盘分区表(DPT ,Disk Partition Table)和结束标志三部分组成,各部分的大小和偏移量可参考下表,主引导记录中包含了硬盘的一系列参数和一段引导程序,引导程序主要是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统。它执行到最后的是一条JMP指令跳到操作系统的引导程序去,所以这里往往是一些引导型病毒和一些多系统引导程序的切入点。此部分还包括启动出错时的提示信息Invalid partition table、 Error loading operating system、Missing operating system和一些保留信息。硬盘分区表的64个字节记录了分区的大小、类型,哪个是活动分区等等(具体结构请参考相关资料)。主引导扇区最后的两个标志“55AA”是主引导扇区的结束标志,有些病毒就会修改这两个标志,结果系统引导时将报告找不到有效的分区表。主引导扇区的数据可以用一些工具或者自己写一段汇编来查看。
使用Fdisk /MBR时,会把前446个字节(如果你在Linux下用dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1命令恢复过MBR就知道为什么这个数字是446了)清零后重新“安装”引导程序,但并不会破坏硬盘分区表。安装一些安全保护软件或者新的操作系统往往引导程序会被更改,一部分引导扇区病毒也可能占领这块地盘,达到获得系统的控制权的目的。在上述情况下,如果由于操作不慎或其它原因,系统无法正常启动时可以使用没被病毒感染的启动盘启动系统,然后使用Fdisk /MBR,各位注意,使用时一定要对症下药,下面讲述一下我经历的几个例子:
1.我的一个同学曾经用过一个叫超级保镖的软件,有开机密码的功能,可是密码被他忘记了(做茧自缚),他从软盘启动,并且把软件删除了,可是在开机的时候还是要求他输入密码。根据他说的,提示输入密码的时机是硬件自检完成以后,Windows刚启动的时候,我推测是主引导扇区被修改了,建议他用Windows 98的启动盘重新启动后使用此命令,结果把开机密码去掉了。
2.同事的电脑被引导区病毒感染,金山毒霸检测到以后,他用金山毒霸做的启动盘启动杀毒,可是重新启动以后还是检测到有此病毒,我不知道他做的软盘本身是否“干净”,我拿买品牌机时附送的Windows 98启动盘,让他重新启动后,用Fdisk /MBR,再次重新启动计算机,发现病毒已经被清除。
3.为了体验Windows 2000,本人把公司的另一个小硬盘跳线变成Slave后连到我的电脑的IDE1上,把Windows 2000安装到小硬盘里,可以进行Windows 98和Windows 2000双启动,后来硬盘被拿走,再次启动系统时,发现启动不起来了,我拿Windows 98的启动盘启动后,使用Fdisk /MBR命令,还是不行,呵呵,拿出我的最后一招,SYS C:,再次启动,成功!
4.随着Linux的流行,很多朋友都想在一个电脑上实现双启动(甚至多启动),安装Linux,可能会把Lilo安装在主引导扇区,如果想卸载Linux,而且用Linux的分区命令把Linux的分区删除;以后如果想恢复到原来的系统,用此命令把lilo清除即可,一般不会丢失原来系统上的数据。
最后必须提醒大家的是,Fdisk一般不会影响硬盘的分区结构和数据,但有些病毒正是利用Fdisk /MBR的原理,修改计算机正常的引导和文件结构,如果你再强行使用Fdisk /MBR可能使系统变得更糟,甚至也可能把硬盘中所有的数据清除。所以最好不要随便使用此命令,只在受病毒或一些磁盘管理工具的影响使系统无法正常启动时才使用此命令,如果你想试验一下呢,你应该先备份好你的所有数据,并且用Debug命令保存你的主引导记录。想一想,微软为何不公开此命令参数呢?因为它是一个危险的命令!
chameleon 于 2006-12-19 08:01:22发表:
只知道用fdisk /mbr命令,呵呵
fzjfight 于 2006-12-18 21:59:57发表:
非常感谢,支持一下!!!
snqyss 于 2006-10-23 16:42:12发表:
目前的水平看着有点晕,先收藏了,以后等看的书多了再回忆这文章了,多谢楼主提供