硬盘主引导扇区结构与功能全面分析

[复制链接]
  • TA的每日心情
    开心
    2014-4-2 21:30
  • 签到天数: 3 天

    [LV.2]九品芝麻官

    534

    主题

    400

    回帖

    7740

    积分

    Intohard Team

    Rank: 7Rank: 7Rank: 7

    积分
    7740
    发表于 2007-7-26 18:51:02 | 显示全部楼层 |阅读模式
      很多朋友对于硬盘的主引导扇区里的MBR(Main Boot Record)和DPT(Disk Partition Table)的区别有些分不太清。于是我想把它写个简短的介绍,希望能对这些朋友有点帮助。
      引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的第一物理扇区。它由两个部分组成:即主引导记录MBR和硬盘分区表DPT。在总共512字节的主引导分区里其中MBR占446个字节(偏移0--偏移1BDH),DPT占64个字节(偏移1BEH--偏移1FDH),最后两个字节“55,AA”(偏移1FEH偏移1FFH)是分区的结束标志。大致的结构如下图:

    图一:主引导扇区结构图

    图一:主引导扇区结构图
      
      主引导记录中包含了硬盘的一系列参数和一段引导程序。引导程序主要是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统。它执行到最后的是一条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”是分区表的结束标志,如果这两个标志被修改(有些病毒就会修改这两个标志),则系统引导时将报告找不到有效的分区表。
      由上面的所列出的结构可以大致地了解主引导扇区的结构和用途。下面,有一些关于主引导扇区的常见问题:

    Q1、fdisk/mbr 会不会把硬盘的分区表破坏呀?
      A: 从上面的土一我们可以看到fdisk/mbr是不会影响到DPT的。fdisk/
      mbr只是把主引导分区里的MBR部分重新写过,而不会对DPT有任何破坏。
    Q2、在Linux里有一种方法可以恢复MBR是用如下的命令:
      dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1
      其中bs(buffer size)是指重写的字节数。
    Q3为什么不是512呢?主引导扇区是一个扇区(512字节呀)?
      A: 答案是因为我们用上面的命令是为了修复可能被病毒修改了的主引导记录MBR,或者想把LILO卸载掉,而不是恢复整个主引导扇区。所以我们只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇区。
      boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把512个字节全部写入主引导扇区就可能会把安装了Linux后改变了的硬盘DPT表也破坏掉。那就坏事了。 :-)
      linuxrat补充一些:=)...
      MBR-> Main/Master Boot Record, 有些书上是写成Master的.我认为可以分成三个部分吧, MBR+DPT+MagicNumber(446+64+2=512)这也就是为什么进行MBR备份的时候要指定bs=512 或者 bs=1k, count=1的原因.然后恢复时经常看到HOWTO里面是bs=446 count=1. 这个446就是指令部分的恢复。

    该用户从未签到

    0

    主题

    110

    回帖

    73

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    73
    发表于 2007-7-27 06:03:24 | 显示全部楼层
    非常感谢,好好看看。

    该用户从未签到

    3

    主题

    1085

    回帖

    1422

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1422
    发表于 2007-7-27 12:35:38 | 显示全部楼层
    谢谢了, [s:205]

    该用户从未签到

    0

    主题

    110

    回帖

    73

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    73
    发表于 2007-7-27 17:09:37 | 显示全部楼层
    Thank you very much!!!

    该用户从未签到

    6

    主题

    97

    回帖

    174

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    174
    发表于 2007-7-30 19:17:12 | 显示全部楼层
    非常感谢,好好看看

    该用户从未签到

    1

    主题

    662

    回帖

    952

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    952
    发表于 2007-7-31 11:16:35 | 显示全部楼层
    基础知识!好东西!顶!!!! [s:209]

    该用户从未签到

    0

    主题

    9

    回帖

    15

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    15
    发表于 2007-8-1 22:59:13 | 显示全部楼层
    非常的个感谢,谢谢

    该用户从未签到

    6

    主题

    42

    回帖

    40

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    40
    发表于 2007-8-7 11:33:54 | 显示全部楼层
    这个帖子应该是某个论坛上某位大虾的帖子的一部分 我给忘了 我当时把它讲的全都复制下来了 这位仁兄只贴一段 不够意思 应该是 DOIT 论坛吧
    大家可以去看看 讲的不错 好像是个济南人
      应该是置顶的精华帖

    该用户从未签到

    0

    主题

    48

    回帖

    205

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    205
    发表于 2007-8-8 21:10:49 | 显示全部楼层
    谢谢大侠无私奉献

    该用户从未签到

    0

    主题

    17

    回帖

    15

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    15
    发表于 2007-8-27 19:29:25 | 显示全部楼层
    非常感谢,好好看看。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表