关于MBR介绍,网上已经有很多了这里分享下自己xp的mbr分析笔记
什么是MBR?
也叫主引导记录(Master Boot Record,简称MBR) MBR位于整个硬盘的0柱面0磁头1扇区的位置处
主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区Master Boot Sector
它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)
MBR组成
MBR可以分为五个部分(512字节)
1、引导程序(440字节)
2、Windows磁盘签名(4个字节)
3、保留位(2个字节)
4、硬盘分区表(Disk Partition Table 简称DPT) 64个字节
5、结束标志 (2个字节)
也可以分成3部分(1.引导程序 2.分区表 3.结束标志)
一个分区表项为0x10大小字节,所以存在4个分区表项
当然,也就只能有四个主分区或者3个主分区+1个扩展分区,但是平时看到有的电脑分成CDEFGH等盘,这是为什么呢?
因为此时,一般只有C盘是主分区,DEFGH盘一般是扩展分区细分出来的逻辑分区。也就是说扩展分区只能有一个,然后可以再细分为多个逻辑分区。
扩展分区也是主分区的一种,但它与主分区的不同在于理论上可以划分为无数个逻辑分区。
调试之前先要了解windows系统启动过程
1、开机
2、BIOS加点自检(Power On Self Test,即POST),此时电源稳定后,CPU从内存地址0fff:0000处开始执行
3、将硬盘第一个扇区(0磁头0柱面1扇区)读取内存地址0000:7c00处
4、检测(WORD)0000:7dfe是否等于0xaa55,若不等于则转去尝试其他启动介质,如果没有其他启动介质则显示”No ROM BASIC”
5、跳转到0000:7c00处执行MBR中的程序
6、MBR首先将自己复制到0000:0600处,然后继续执行
7、在主分区表中搜索标志为活动的分区。如果发现没有活动分区或有不止一个活动分区,则显示“Invalid partiton table”
8、将活动分区的第一个扇区读入内存地址0000:7c00处
9、检测(WORD)000:7dfe是否等于0xaa55,若不等于则显示”Miss Operating System”,然后停止,或尝试软盘启动
10、跳转到0000:7c00处继续执行DBR
11、启动系统
以上步骤中2,3,4,5步由BIOS的引导程序完成,6、7、8、9、10步由MBR中的引导程序完成。
知道了过程,调试就简单多了,所以过程是分析一个很关键的步骤。
关于MBR的调试看willJ大大的文章吧~
最好先用IDA动态跟下自己的mbr,接着静态分析(每个系统的mbr都不会是一模一样的)。
IDA静态分析代码
seg000:7C00 seg000 segment byte public 'CODE' use16[/size]
seg000:7C00 assume cs:seg000
seg000:7C00 ;org 7C00h
seg000:7C00 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
seg000:7C00 xor ax, ax ; ax = 0
seg000:7C02 mov ss, ax ; ss = 0
seg000:7C04 mov sp, 7C00h ; sp = 0x7c00
seg000:7C07 sti ; 开起段中断
seg000:7C08 push ax
seg000:7C09 pop es ; es = 0
seg000:7C0A push ax
seg000:7C0B pop ds ; ds = 0
seg000:7C0C cld ; 关闭段中断
seg000:7C0D push ax
seg000:7C0E mov si, 7C00h
seg000:7C11 mov di, 600h
seg000:7C14 mov cx, 200h ; 循环次数,512次,也就是mbr的大小
seg000:7C17 rep movsb ; rep movsb将ds:si拷贝到es:di处,长度为cx
seg000:7C17 ; 即将mbr从0x7c00拷贝到0x600处
seg000:7C19 mov di, 61Eh
seg000:7C1C push di
seg000:7C1D retf ; jmp到0x61E
seg000:7C1D ; 也就是继续执行下一条指令(可以用IDA动态调试看)
s