|
[原创首发]实用F9一键启动隐藏分区的引导程序及注释文本——应用篇
原帖丢了实在可惜!百度来的(如有错误请斧正)。另望蛙哥保重!
二楼中文提示一键F9程序的注释文本已更新,与发布的1jf9中文提示版.rar程序内容同步注释,给试图开发、改造和利用本程序的朋友提供了便利,至此,本帖算是真正完成了。
最后整合了一下两个版本,程序没做修改,帮助文本作了少许改动,然后分类打包存放,便于网友下载和归类,本程序到此就算完成了,感谢网友们的关心和支持,特别鸣谢紫狐、NETWINXP两位版主的大力支持!NETWINXP版主提供了新的延时程序代码,坛友19951001提供的DSPTW.EXE程序和Wang6610提供的安装批处理,为本套程序起到了为虎添翼的作用,使用批处理是阿非提议并起草的,在此都一并表示衷心的感谢!今后如无重大问题,我也就此撒手不管了,谢谢大家!
欢迎大家下载使用,请将使用中遇到的问题以及改进意见反馈上来!
应SECOWU的要求增加了英文提示功能,已在本人实机上测试通过,欢迎大家下载测试!
1JF9ze V3.14中英文提示全功能版(圆周率版)
1JF9ze V3.14.rar (26.94 KB)(2009.03.14 10:18上传)
[功能见使用说明]
i
1JF9e V3.14英文提示全功能版(圆周率版)
1JF9e V3.14.rar (26.19 KB)(2009.03.14 10:18上传)
[功能见使用说明]
1jf9中文提示版.rar (应lee88889999反映的问题,在安装和设置批处理中,增加了文件完整性识别和只读媒介识别功能)
1jf9中文提示版.rar (28.21 KB)(2008.12.29 20:55 上传)
[1jf9中文提示版具有:热键修改、延时设定、提示开/关和直接启动进入隐藏分区等四项设置功能]
1JF9英文提示版.rar (应sck和jyssysz要求,修改了安装文件,以适应Vista磁盘签名的要求)
1JF9英文提示版.rar (27.12 KB)(2009.03.02 14:10 上传)
[1jf9英文提示版具有:密码设定功能]
热键修改DOS版.rar(仅支持中文提示版引导程序的热键修改)
热键修改DOS版.rar (20.95 KB) (2008.09.19 10:05 上传)
实用F9激活隐藏分区的引导程序注释文本 [原创首发]
编程及撰文:Lvyanan(井底蛙)
本人撰写此文的目的是想通过发表这个引导程序(程序附后)的注解,使大家在应用该程序时,可以更好的理解程序引导的工作原理,并能根据自身特点,修改其中的指令代码,以适应自己的实际需要。下面我将对有关引导的相关知识以及本引导程序的流程原理作出讲解,如有不正确的地方请网友们批评指正。
讲解前的一些预备知识
在此讲解的程序是一个精练、紧凑、设计合理且兼容性好的F9一键激活隐藏分区的引导程序,该程序共占用两个硬盘扇区,能以中文提示按F9键的方式,选择启动隐藏分区上的操作系统,利用隐藏分区上的操作系统和工具软件,可以很方便地实现对主机上其它操作系统的维护、备份以及恢复等操作,程序构造的EISA隐藏分区,在盘上Windows XP系统中是不能被访问和破坏的,具有较好的自我保护能力,该程序已在VPC虚拟机和DELL PE4600服务器RAID1上运行通过。
注:该程序本身并不具有系统启动、备份和恢复的功能,只是提供了对隐藏分区里PE或XP的启动支持,隐藏分区的建立和系统的安装仍需网友们自行解决,网友们可以利用事先保存在隐藏分区里的工具软件,对常规分区操作系统进行手工备份、恢复以及维护等操作。
该程序是作为引导程序放置在从硬盘主引导扇开始的连续两个扇区里,第一扇区是由硬盘主引导程序(MBR)、主引导扇分区表(DPT)以及扇区结束标志55H、AAH(系统签名)三部分构成。从0000:0600H开始到0000:07BDH是硬盘主引导程序的驻留空间(其中07B8H—07BBH四个字节是硬盘签名);主引导扇分区表位于0000:07BEH偏移开始的地方(见三楼:驻留主引导扇程序的内存映像)从0000:07BEH开始,每16个字节(即每种颜色)为一个分区表项,共四个分区表项64个字节;0000:07FEH处的55H、AAH标志(系统签名)是引导扇的有效标志,少了它硬盘将不被BIOS和操作系统所认可,会出现操作系统不认此硬盘的现象,因此这个标志还是很重要的,有时我们遇到硬盘不能被系统识别,就有可能是少了这个标志的缘故,用FDISK /MBR命令可以解决此问题。主引导扇后的第二个扇区的内容,是F9一键启动隐藏分区提示字符的点阵码区。
硬盘引导程序开始工作之前,先是由BIOS程序完成硬件系统自检,并在基本内存最低的1K内存中填入最初始的BIOS中断向量表,紧接其后建立一个512字节的系统低址数据区,这两项都是BIOS程序为以后启动操作系统准备的非常重要的系统资源,共占用了0000:0600H之前的1.5K内存空间,准备好这些数据结构后,BIOS程序开始为启动操作系统作准备,以硬盘启动为例,BIOS程序首先会把位于硬盘主引导扇的整个扇区的二进制映像,全部装入内存0000:7C00H处,并检查硬盘主引导扇最后的55H、AAH标志,如具有该标志,就把控制权移交给装入到0000:7C00H处的硬盘主引导程序代码,也就是交由硬盘主引导程序来接着完成启动过程,这是BIOS程序启动时的一个定式,此后就是硬盘主引导程序所要做的系统引导工作了。如果没有找到55H、AAH标志,BIOS程序会显示报错信息或根据设置去查找其它的启动设备。
中文提示F9一键激活隐藏分区程序的反汇编代码注释文本(2009.1.8更新文本)
1JF9_e.com(英文提示)的注释文本发表在344、345楼
中文提示F9一键激活隐藏分区程序的反汇编代码注释文本.rar (16.54 KB)(2009.01.10)
注:本注释是在Debug反汇编代码的基础上实施的,制作仓促,难免有错,仅作为参考。
中文提示F9一键激活隐藏分区程序的反汇编代码注释文本
Lvyanan(井底蛙)
中文提示一键F9激活隐藏分区程序,是在19951001网友的DSPTW.EXE程序支持下,用批处理来安装的,安装原理是将1JF9z_0.BIN复制到硬盘的第一个扇区上,将1JF9z_1.BIN复制到硬盘的第二个扇区,将原来的主引导扇备份到硬盘的第三个扇区,将1JF9z_3.BIN复制到硬盘的第四个扇区,系统重启后,BIOS会将位于主引导扇上的1JF9z_0.BIN初始化程序装入内存0:7C00处执行,该初始化程序将对第四扇区1JF9z_3.BIN一键F9引导程序进行分区表装配,提取主系统分区表项和隐藏分区表项的偏移指针,保存到一键F9引导程序的61CH和61EH,并且判断隐藏分区存在与否,存在就完成初始化,不存在就恢复原来的主引导程序。
一键F9初始化程序注释文本(原文件:1JF9z_0.BIN)
初始化各段寄存器和堆栈指针
0:7C00 FA CLI ;关中断
0:7C01 31C0 XOR AX,AX ;AX=0
0:7C03 8EC0 MOV ES,AX ;扩展段ES=0
0:7C05 8ED8 MOV DS,AX ;数据段DS=0
0:7C07 8ED0 MOV SS,AX ;栈段SS=0
0:7C09 BC007C MOV SP,7C00 ;栈指针SP=7C00H
0:7C0C FB STI ;开中断
装入第四扇区上的1JF9z_3.BIN映像
0:7C0D B80102 MOV AX,0201 ;设读1个扇区的功能
0:7C10 BB0006 MOV BX,0600 ;设数据缓冲区偏移址BX=600H
0:7C13 B90400 MOV CX,0004 ;设指向0柱面4扇区的操作参数
0:7C16 E8F300 CALL 7D0C ;调用7D0CH装入第4扇区上的1JF9z_3映像
装入第三扇区上保存的原引导扇映像
0:7C19 B80102 MOV AX,0201 ;设读1个扇区的功能
0:7C1C BB0008 MOV BX,0800 ;设数据缓冲区偏移址BX=800H
0:7C1F B90300 MOV CX,0003 ;设指向0柱面3扇区的操作参数
0:7C22 E8E700 CALL 7D0C ;调用7D0CH装入第3扇区上的原引导扇映像
把原引导扇的磁盘签名+分区表+系统签名复制到1JF9z_3的映像中
0:7C25 BEB809 MOV SI,09B8 ;数据传输源指针指向9B8H
0:7C28 BFB807 MOV DI,07B8 ;数据传输目的指针指向7B8H
0:7C2B B94800 MOV CX,0048 ;数据传输计数值=48H
0:7C2E F3 REPZ ;重复传输数据,从地址0:9B8H到0:7B8H
0:7C2F A4 MOVSB ;按字节传送(48H=72字节)
分区属性识别和整形
0:7C30 BEBE07 MOV SI,07BE ;源指针指向7BEH(指向分区表首字节)
0:7C33 BF0400 MOV DI,0004 ;设置分区表项计数值DI=04H
0:7C36 807C0405 CMP BYTE PTR [SI+04],05 ;分区表项属性是05H?(扩展分区属性)
0:7C3A 7455 JZ 7C91 ;是扩展分区转7C91H
0:7C3C 807C040F CMP BYTE PTR [SI+04],0F ;分区表项属性是0FH?(扩展分区属性)
0:7C40 744F JZ 7C91 ;是扩展分区转7C91H
0:7C42 57 PUSH DI ;当前DI入栈
0:7C43 56 PUSH SI ;当前SI入栈
0:7C44 E8CB00 CALL 7D12 ;装入当前分区表项指向的分区引导扇
0:7C47 BE707D MOV SI,7D70 ;源指针指向“NTFS”字符串
0:7C4A BF030A MOV DI,0A03 ;目的指针指向分区引导扇的A03H
0:7C4D E8AD00 CALL 7CFD ;调用标志比较子过程进行比较
0:7C50 7439 JZ 7C8B ;相等则当前为NTFS分区,转7C8BH
0:7C52 BE757D MOV SI,7D75 ;源指针指向“FAT32”字符串
0:7C55 BF520A MOV DI,0A52 ;目的指针指向分区引导扇的A52H
0:7C58 E8A200 CALL 7CFD ;调用标志比较子过程进行比较
0:7C5B 741A JZ 7C77 ;相等则当前为FAT32分区,转7C77H
0:7C5D BE7B7D MOV SI,7D7B ;源指针指向“FAT16”字符串
0:7C60 BF360A MOV DI,0A36 ;目的指针指向分区引导扇的A36H
0:7C63 E89700 CALL 7CFD ;调用标志比较子过程进行比较
0:7C66 5E POP SI ;SI出栈
0:7C67 7408 JZ 7C71 ;相等则当前为大于504M的FAT16分区,转7C71H
0:7C69 A1110A MOV AX,[0A11] ;无标志则取BPB表根目录记录数来判断
0:7C6C 3D0002 CMP AX,0200 ;根目录记录数是否等于200H(FAT16的值)
0:7C6F 751F JNZ 7C90 ;不相等则非FAT16分区转7C90H
0:7C71 C644040E MOV BYTE PTR [SI+04],0E ;给当前分区表项赋予FAT16属性标志
0:7C75 EB19 JMP 7C90 ;转7C90H
0:7C77 5E POP SI ;SI出栈
0:7C78 817C0AFA00 CMP WORD PTR [SI+0A],00FA ;判断分区起始位置是否大于等于8G
0:7C7D 7306 JNB 7C85 ;不大于8G转7C85H
0:7C7F C644040B MOV BYTE PTR [SI+04],0B ;小于8G的FAT32分区赋予0BH属性标志
0:7C83 EB0B JMP 7C90 ;转7C90H
0:7C85 C644040C MOV BYTE PTR [SI+04],0C ;大于8G的FAT32分区赋予0CH属性标志
0:7C89 EB05 JMP 7C90 ;转7C90H
0:7C8B 5E POP SI ;SI出栈
0:7C8C C6440407 MOV BYTE PTR [SI+04],07 ;给当前分区表项赋予NTFS属性标志
0:7C90 5F POP DI ;DI出栈
0:7C91 83C610 ADD SI,+10 ;SI=SI+10H指向下一分区表项
0:7C94 4F DEC DI ;分区表项计数器DI=DI-1
0:7C95 759F JNZ 7C36 ;DI不为0转7C36H继续
识别和记录主系统分区和隐藏分区表项指针
0:7C97 BEBE07 MOV SI,07BE ;源指针指向7BEH(指向分区表首字节)
0:7C9A BF0400 MOV DI,0004 ;设置分区表项计数值DI=04H
0:7C9D C60400 MOV BYTE PTR [SI],00 ;清除当前分区表项的活动标志
0:7CA0 8A5C04 MOV BL,[SI+04] ;取前分区表项的属性标志
0:7CA3 80FB07 CMP BL,07 ;判断是否为NTFS分区
0:7CA6 740F JZ 7CB7 ;是则转7CB7H
0:7CA8 80FB0B CMP BL,0B ;判断是否为小于8G的FAT32分区
0:7CAB 740A JZ 7CB7 ;是则转7CB7H
0:7CAD 80FB0C CMP BL,0C ;判断是否为大于8G的FAT32分区
0:7CB0 7405 JZ 7CB7 ;是则转7CB7H
0:7CB2 80FB0E CMP BL,0E ;判断是否为FAT16分区
0:7CB5 7516 JNZ 7CCD ;不是则转7CCDH
0:7CB7 803E1C0600 CMP BYTE PTR [061C],00 ;判断是否已获得主系统分区指针
0:7CBC 7507 JNZ 7CC5 ;已获得主系统分区指针转7CC5H
0:7CBE C60480 MOV BYTE PTR [SI],80 ;为第一主分区加上激活标志
0:7CC1 89361C06 MOV [061C],SI ;将当前的主分区指针保存在061CH
0:7CC5 881ED606 MOV [06D6],BL ;将当前的主分区属性保存在06D6H
0:7CC9 89361E06 MOV [061E],SI ;将当前的主分区指针保存在061EH
0:7CCD 83C610 ADD SI,+10 ;SI=SI+10H指向下一分区表项
0:7CD0 4F DEC DI ;分区表项计数器DI=DI-1
0:7CD1 75CA JNZ 7C9D ;DI非0转7C9DH
隐藏分区判断
0:7CD3 8B361C06 MOV SI,[061C] ;将保存的主系统分区指针赋予SI
0:7CD7 8B3E1E06 MOV DI,[061E] ;将保存的隐藏分区指针赋予DI
0:7CDB 39FE CMP SI,DI ;将SI与DI比较,若相等则无隐藏分区
0:7CDD 7308 JNB 7CE7 ;无隐藏分区转7CE7H
存在隐藏分区就把控制权移交给1JF9z_3引导程序
0:7CDF E82100 CALL 7D03 ;将1JF9z_3引导程序写入主引导扇
0:7CE2 EA31060000 JMP 0000:0631 ;把控制权移交给1JF9z_3引导程序
隐藏分区不存在恢复原主引导程序并移交控制权
0:7CE7 BB0008 MOV BX,0800 ;设数据缓冲区指针BX=800H
0:7CEA E81900 CALL 7D06 ;将保存的原主引导扇写回主引导扇
0:7CED BE0008 MOV SI,0800 ;源指针指向800H
0:7CF0 BF007C MOV DI,7C00 ;目的指针指向7C00H
0:7CF3 B90002 MOV CX,0200 ;设数据传输计数值=200H
0:7CF6 F3 REPZ ;重复传输数据,从地址0:800H到0:7C00H
0:7CF7 A4 MOVSB ;按200H字节传送
0:7CF8 EA007C0000 JMP 0000:7C00 ;将控制权移交给7C00H处的原主引导程序
分区引导扇标志比较子过程:
0:7CFD B90400 MOV CX,0004 ;设重复比较计数值CX=04H
0:7D00 F3 REPZ ;按CX=04H的值重复执行
0:7D01 A6 CMPSB ;依次将SI和DI指针指向的字节进行比较
0:7D02 C3 RET ;返回调用程序
1JF9z_3引导程序写入主引导扇子过程:
0:7D03 BB0006 MOV BX,0600 ;设数据缓冲区指针BX=600H
0:7D06 B80103 MOV AX,0301 ;设INT13H写1个扇区的功能参数
0:7D09 B90100 MOV CX,0001 ;设指向0柱面1扇区的操作参数
0:7D0C BA8000 MOV DX,0080 ;设指向第一硬盘及0磁头的操作参数
0:7D0F CD13 INT 13 ;调用常规INT13H中断服务
0:7D11 C3 RET ;返回调用程序
分区引导扇装入子过程:
0:7D12 89F3 MOV BX,SI ;将分区表项指针送入BX
0:7D14 BE607D MOV SI,7D60 ;SI指向INT13H扩展功能调用服务包
0:7D17 B8000A MOV AX,0A00 ;将缓冲区偏移量送入AX
0:7D1A 894404 MOV [SI+04],AX ;将缓冲区偏移量送入INT13H服务包
0:7D1D 8C5C06 MOV [SI+06],DS ;将缓冲区段址送入INT13H服务包
0:7D20 8B4708 MOV AX,[BX+08] ;取分区表项保留扇区数低字送到AX
0:7D23 894408 MOV [SI+08],AX ;将分区表项保留扇区数低字送入INT13H服务包
0:7D26 8B470A MOV AX,[BX+0A] ;取分区表项保留扇区数高字送到AX
0:7D29 89440A MOV [SI+0A],AX ;将分区表项保留扇区数高字送入INT13H服务包
0:7D2C B280 MOV DL,80 ;设操作设备号指向第一硬盘
0:7D2E BBAA55 MOV BX,55AA ;设BX=55AA
0:7D31 B80042 MOV AX,4200 ;设INT13H扩展读扇区功能号
0:7D34 CD13 INT 13 ;调用INT13H扩展功能
0:7D36 C3 RET ;返回调用程序
一键F9引导程序注释文本(原文件:1JF9z_3.BIN)
寄存器初始化及程序转
0:0600 FA CLI ;关中断
0:0601 33C0 XOR AX,AX ;AX=0
0:0603 8EC0 MOV ES,AX ;扩展段ES=0
0:0605 8ED8 MOV DS,AX ;数据段DS=0
0:0607 8ED0 MOV SS,AX ;栈段SS=0
0:0609 BC007C MOV SP,7C00 ;栈指针SP=7C00H
0:060C 8BF4 MOV SI,SP ;数据传输源指针指向7C00H
0:060E FC CLD ;设数据传输正方向
0:060F BF0006 MOV DI,0600 ;数据传输目的指针指向600H
0:0612 B90001 MOV CX,0100 ;数据传输计数值=100H
0:0615 F3 REPZ ;重复传输数据,从地址0:7C00H到0:600H
0:0616 A5 MOVSW ;按字传送(2X256=512字节)
0:0617 EA30060000 JMP 0000:0630 ;程序转移到0:0630H处继续执行
主系统分区表项指针
0:061C 0000 ADD [BX+SI],AL ;保存主系统分区表项指针
隐藏系统分区表项指针
0:061E 0000 ADD [BX+SI],AL ;保存隐藏系统分区表项指针
INT13H扩展功能调用服务包
0:0620 1000 ADC [BX+SI],AL ;服务包长度┓
0:0622 0100 ADD [BX+SI],AX ;操作扇区数┃
0:0624 0000 ADD [BX+SI],AL ;缓冲区偏移┃
0:0626 0000 ADD [BX+SI],AL ;缓冲区段址┃INT13H扩展功能调用服务包
0:0628 0000 ADD [BX+SI],AL ;操作扇区号┃
0:062A 0000 ADD [BX+SI],AL ; . ┃
0:062C 0000 ADD [BX+SI],AL ; . ┃
0:062E 0000 ADD [BX+SI],AL ; . ┛
判断是否绝对转移到隐藏分区启动
0:0630 FB STI ;开中断
0:0631 803EBC06EB CMP BYTE PTR [06BC],EB ;比较06BCH处是否为EB代码
0:0636 7479 JZ 06B1 ;是则转移到06B1H作隐藏分区启动处理
装入显示F9汉字提示点阵码扇区
0:0638 BB0008 MOV BX,0800 ;设数据缓冲区偏移址BX=800H
0:063B B90200 MOV CX,0002 ;设指向0柱面2扇区的操作参数
0:063E B80102 MOV AX,0201 ;设读1个扇区的功能
0:0641 E8D500 CALL 0719 ;调用0719H子过程装入汉字点阵码扇区
校验F9汉字提示点阵码扇区
0:0644 89DE MOV SI,BX ;源指针寄存器SI=BX=800H指向装入的点阵码扇区
0:0646 B90001 MOV CX,0100 ;设计数器CX=100H
0:0649 31DB XOR BX,BX ;BX寄存器清0
0:064B AD LODSW ;将DS:SI指向的字送入AX并使SI加2指向下一个字
0:064C 03D8 ADD BX,AX ;累加AX中的值
0:064E E2FB LOOP 064B ;使CX=CX-1若CX不为0则转64BH继续
0:0650 83FBFF CMP BX,-01 ;比较BX中的累加和是不是等于FFFFH
0:0653 755C JNZ 06B1 ;不相等即非匹配的汉字点阵扇区转6B1H启动主系统分区
显示中文按键提示
0:0655 B80006 MOV AX,0600 ;设INT10H的06H号功能向上滚动行数为0
0:0658 B707 MOV BH,07 ;设空白底行所使用的属性参数为07H(设黑底白字)
0:065A 31C9 XOR CX,CX ;设滚动的行列为0行0列
0:065C BA4F18 MOV DX,184F ;设滚动的底行为18H,滚动的右边列为4FH
0:065F CD10 INT 10 ;调用INT10H实现指定屏幕区域的向上滚动
0:0661 B91500 MOV CX,0015 ;设定要显示的字符数=15H
0:0664 BAC100 MOV DX,00C1 ;设定字符号=C1H
0:0667 BB0010 MOV BX,1000 ;设定每字符16个字节,字节页为0
0:066A B80011 MOV AX,1100 ;设定字符生成器的用户字体装入功能
0:066D BD0008 MOV BP,0800 ;设定ES:BP指向用户点阵字模的指针
0:0670 CD10 INT 10 ;调用INT10H显示功能
0:0672 B700 MOV BH,00 ;BH置0
0:0674 8D36E009 LEA SI,[09E0] ;取显示字符点阵颜色设置字串的偏移指针送入SI
0:0678 BA0101 MOV DX,0101 ;设置DH=1行,DL=1列(设显示起始行、列位置)
0:067B B0C0 MOV AL,C0 ;AL=C0H
0:067D 50 PUSH AX ;AX入栈
0:067E B402 MOV AH,02 ;使AH=02H设置INT10H置光标功能
0:0680 FEC2 INC DL ;设置光标从当前行列递增1列显示
0:0682 CD10 INT 10 ;调用INT10H更新光标位置
0:0684 8A1C MOV BL,[SI] ;将DS:[SI]指向的字节装入BL
0:0686 B90100 MOV CX,0001 ;CX=0001H因调用INT10H的09H号功能时CX必须为1
0:0689 58 POP AX ;AX出栈
0:068A FEC0 INC AL ;AL=AL+1用AL计数
0:068C 50 PUSH AX ;AX入栈
0:068D B409 MOV AH,09 ;AH=09H设置INT10H写字符和属性功能
0:068F CD10 INT 10 ;调用INT10H在光标处写入字符及属性
0:0691 58 POP AX ;AX出栈
0:0692 46 INC SI ;使SI=SI+1指向下一个字符
0:0693 3CD5 CMP AL,D5 ;比较计数值AL是否=D5H即字符串结束
0:0695 75E6 JNZ 067D ;不是则转06E0H处继续显示字符
按键捕捉及延时
0:0697 8B166C04 MOV DX,[046C] ;从0:046CH地址数据区取时钟基准值到DX
0:069B B411 MOV AH,11 ;设检查扩展键盘状态功能号
0:069D CD16 INT 16 ;调用INT16H键盘功能取键盘状态
0:069F 7406 JZ 06A7 ;Z标志=1即未按键则跳转6A7H处继续
0:06A1 B410 MOV AH,10 ;设读取扩展键盘输入功能号
0:06A3 CD16 INT 16 ;调用INT16H键盘功能读键入的键值
0:06A5 EB0A JMP 06B1 ;绝对跳转到06B1H处进入启动过程
0:06A7 A16C04 MOV AX,[046C] ;从0:046CH地址数据区取当前时钟值到AX
0:06AA 29D0 SUB AX,DX ;将AX中的当前时钟值与DX中的基准时钟值相减
0:06AC 3D3600 CMP AX,0036 ;比较时钟差值是否大于等于036H
0:06AF 72EA JB 069B ;小于则转069BH处继续循环等待按键
获取启动分区和隐藏分区表指针
0:06B1 8B361C06 MOV SI,[061C] ;取061CH处的主系统分区表项指针送SI寄存器
0:06B5 8B3E1E06 MOV DI,[061E] ;取061EH处的隐藏分区表项指针送DI寄存器
F9按键判断及处理
0:06B9 3D0043 CMP AX,4300 ;比较AX寄存器中的按键值是否为F9的键码
0:06BC 7415 JZ 06D3 ;是则转6D3H处进行隐藏分区启动预处理
主系统分区启动预处理
0:06BE 807D0412 CMP BYTE PTR [DI+04],12 ;比较隐藏分区属性ID是不是12H隐藏标志
0:06C2 741E JZ 06E2 ;是则转6E2H开始常规活动分区的启动过程
0:06C4 C6450412 MOV BYTE PTR [DI+04],12 ;为隐藏分区表项加上12H隐藏ID
0:06C8 C60500 MOV BYTE PTR [DI],00 ;除隐藏分区表项的活动分区标志
0:06CB C60480 MOV BYTE PTR [SI],80 ;为主系统分区表项加上活动标志
0:06CE E83A00 CALL 070B ;调用70BH子过程回写修改过的主引导扇
0:06D1 EB0F JMP 06E2 ;转到6E2H开始主系统分区的启动过程
隐藏分区启动预处理
0:06D3 C645040C MOV BYTE PTR [DI+04],0C ;将真实的分区属性ID值送隐藏分区表项ID字节处
0:06D7 C60580 MOV BYTE PTR [DI],80 ;为隐藏分区表项加上活动分区标志
0:06DA C60400 MOV BYTE PTR [SI],00 ;清除主系统分区表项的活动标志
0:06DD E82B00 CALL 070B ;调用70BH子过程回写修改过的主引导扇
0:06E0 89FE MOV SI,DI ;将隐藏分区指针DI转换成分区启动时的装入指针
启动分区引导扇装入并执行
0:06E2 89F3 MOV BX,SI ;将启动分区指针送BX寄存器
0:06E4 BE2006 MOV SI,0620 ;SI=0620H指向INT13H扩展功能服务包
0:06E7 B8007C MOV AX,7C00 ;AX=7C00H指向分区引导扇装入的偏移址
0:06EA 894404 MOV [SI+04],AX ;设INT13H扩展功能服务包缓冲区偏移址
0:06ED 8C5C06 MOV [SI+06],DS ;设INT13H扩展功能服务包缓冲区段址
0:06F0 8B4708 MOV AX,[BX+08] ;取启动分区表项的隐含扇区低字送到AX
0:06F3 894408 MOV [SI+08],AX ;设INT13H扩展功能服务包分区引导扇扇区号低字
0:06F6 8B470A MOV AX,[BX+0A] ;取启动分区表项的隐含扇区高字送到A
0:06F9 89440A MOV [SI+0A],AX ;设INT13H扩展功能服务包分区引导扇扇区号高字
0:06FC B280 MOV DL,80 ;设置INT13H扩展功能调用指向第一硬盘
0:06FE BBAA55 MOV BX,55AA ;设置INT13H扩展功能调用的BX寄存器参数
0:0701 B80042 MOV AX,4200 ;设置INT13H扩展功能调用的读盘功能
0:0704 CD13 INT 13 ;调用INT13H扩展功能
0:0706 EA007C0000 JMP 0000:7C00 ;将控制权移交到分区引导程序(主引导结束)
主引导程序回写子过程
0:070B C606BC0674 MOV BYTE PTR [06BC],74 ;恢复6BCH处的代码
0:0710 BB0006 MOV BX,0600 ;设INT13H调用的数据缓冲区指针
0:0713 B90100 MOV CX,0001 ;设INT13H操作指向0柱面1扇区
0:0716 B80103 MOV AX,0301 ;设INT13H写一个扇区的功能
0:0719 BA8000 MOV DX,0080 ;设INT13H操作指向第一硬盘0磁头
0:071C CD13 INT 13 ;调用常规INT13H功能
0:071E C3 RET ;返回调用程序
中文提示一键F9激活隐藏分区程序的内存映像
一键F9初始化程序的内存映像(原文件:1JF9z_0.BIN)
0:7C00 FA 31 C0 8E C0 8E D8 8E-D0 BC 00 7C FB B8 01 02 .1.........|....
0:7C10 BB 00 06 B9 04 00 E8 F3-00 B8 01 02 BB 00 08 B9 ................
0:7C20 03 00 E8 E7 00 BE B8 09-BF B8 07 B9 48 00 F3 A4 ............H...
0:7C30 BE BE 07 BF 04 00 80 7C-04 05 74 55 80 7C 04 0F .......|..tU.|..
0:7C40 74 4F 57 56 E8 CB 00 BE-70 7D BF 03 0A E8 AD 00 tOWV....p}......
0:7C50 74 39 BE 75 7D BF 52 0A-E8 A2 00 74 1A BE 7B 7D t9.u}.R....t..{}
0:7C60 BF 36 0A E8 97 00 5E 74-08 A1 11 0A 3D 00 02 75 .6....^t....=..u
0:7C70 1F C6 44 04 0E EB 19 5E-81 7C 0A FA 00 73 06 C6 ..D....^.|...s..
0:7C80 44 04 0B EB 0B C6 44 04-0C EB 05 5E C6 44 04 07 D.....D....^.D..
0:7C90 5F 83 C6 10 4F 75 9F BE-BE 07 BF 04 00 C6 04 00 _...Ou..........
0:7CA0 8A 5C 04 80 FB 07 74 0F-80 FB 0B 74 0A 80 FB 0C .\....t....t....
0:7CB0 74 05 80 FB 0E 75 16 80-3E 1C 06 00 75 07 C6 04 t....u..>...u...
0:7CC0 80 89 36 1C 06 88 1E D6-06 89 36 1E 06 83 C6 10 ..6.......6.....
0:7CD0 4F 75 CA 8B 36 1C 06 8B-3E 1E 06 39 FE 73 08 E8 Ou..6...>..9.s..
0:7CE0 21 00 EA 31 06 00 00 BB-00 08 E8 19 00 BE 00 08 !..1............
0:7CF0 BF 00 7C B9 00 02 F3 A4-EA 00 7C 00 00 B9 04 00 ..|.......|.....
0:7D00 F3 A6 C3 BB 00 06 B8 01-03 B9 01 00 BA 80 00 CD ................
0:7D10 13 C3 89 F3 BE 60 7D B8-00 0A 89 44 04 8C 5C 06 .....`}....D..\.
0:7D20 8B 47 08 89 44 08 8B 47-0A 89 44 0A B2 80 BB AA .G..D..G..D.....
0:7D30 55 B8 00 42 CD 13 C3 00-00 00 00 00 00 00 00 00 U..B............
0:7D40 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:7D50 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:7D60 10 00 01 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:7D70 4E 54 46 53 20 46 41 54-33 32 20 46 41 54 31 36 NTFS FAT32 FAT16
0:7D80 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:7D90 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:7DA0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:7DB0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:7DC0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:7DD0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:7DE0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:7DF0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.
一键F9引导程序的内存映像(原文件:1JF9z_3.BIN)
0:0600 FA 33 C0 8E C0 8E D8 8E-D0 BC 00 7C 8B F4 FC BF .3.........|....
0:0610 00 06 B9 00 01 F3 A5 EA-30 06 00 00 00 00 00 00 ........0.......
0:0620 10 00 01 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0630 FB 80 3E BC 06 EB 74 79-BB 00 08 B9 02 00 B8 01 ..>...ty........
0:0640 02 E8 D5 00 89 DE B9 00-01 31 DB AD 03 D8 E2 FB .........1......
0:0650 83 FB FF 75 5C B8 00 06-B7 07 31 C9 BA 4F 18 CD ...u\.....1..O..
0:0660 10 B9 15 00 BA C1 00 BB-00 10 B8 00 11 BD 00 08 ................
0:0670 CD 10 B7 00 8D 36 E0 09-BA 01 01 B0 C0 50 B4 02 .....6.......P..
0:0680 FE C2 CD 10 8A 1C B9 01-00 58 FE C0 50 B4 09 CD .........X..P...
0:0690 10 58 46 3C D5 75 E6 8B-16 6C 04 B4 11 CD 16 74 .XF<.u...l.....t
0:06A0 06 B4 10 CD 16 EB 0A A1-6C 04 29 D0 3D 36 00 72 ........l.).=6.r
0:06B0 EA 8B 36 1C 06 8B 3E 1E-06 3D 00 43 74 15 80 7D ..6...>..=.Ct..}
0:06C0 04 12 74 1E C6 45 04 12-C6 05 00 C6 04 80 E8 3A ..t..E.........:
0:06D0 00 EB 0F C6 45 04 0C C6-05 80 C6 04 00 E8 2B 00 ....E.........+.
0:06E0 89 FE 89 F3 BE 20 06 B8-00 7C 89 44 04 8C 5C 06 ..... ...|.D..\.
0:06F0 8B 47 08 89 44 08 8B 47-0A 89 44 0A B2 80 BB AA .G..D..G..D.....
0:0700 55 B8 00 42 CD 13 EA 00-7C 00 00 C6 06 BC 06 74 U..B....|......t
0:0710 BB 00 06 B9 01 00 B8 01-03 BA 80 00 CD 13 C3 00 ................
0:0720 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0730 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0740 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0750 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0760 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0770 4E 54 46 53 20 46 41 54-33 32 20 46 41 54 31 36 NTFS FAT32 FAT16
0:0780 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0790 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:07A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:07B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:07C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:07D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:07E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:07F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.
注:粉红是磁盘签名;大红是系统签名;蓝、棕、绿、橙分别代表4个分区表项,此处分区表
项都是空的,这是留给初始化程序装配分区表的空间,实际上初始化程序是将目标磁盘的磁
盘签名+分区表+系统签名,复制到这个相应的位置上。
一键F9汉字点阵扇区映像(原文件:1JF9z_1.BIN)
0:0800 0F 10 3F 40 80 81 80 80-83 80 80 87 80 40 3F 00 ..?@.........@?.
0:0810 80 40 FE 01 01 FE 10 10-E0 20 20 C0 40 40 80 00 .@....... .@@..
0:0820 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0830 10 10 10 13 FE 10 14 1B-30 D1 11 10 10 11 56 20 ........0.....V
0:0840 40 20 20 FE 04 40 40 FE-88 10 90 60 58 8E 04 00 @ ..aa....`X...
0:0850 00 FF 60 60 60 60 61 7F-61 60 60 60 60 60 F0 00 ..````a.a`````..
0:0860 00 87 88 10 10 10 10 08-07 00 00 10 10 08 07 00 ................
0:0870 00 00 80 40 40 40 40 C0-40 40 40 40 40 80 00 00 ...@@@@.@@@@@...
0:0880 01 41 21 37 21 01 01 F7-11 11 12 12 14 28 47 00 .A!7!........(G.
0:0890 10 10 10 FC 10 10 10 FE-10 10 10 10 10 00 FE 00 ................
0:08A0 0C 06 02 01 03 02 02 04-04 08 08 10 20 40 80 00 ............ @..
0:08B0 00 00 00 00 00 80 80 40-20 20 10 08 0E 04 00 00 .......@ ......
0:08C0 21 21 21 37 A9 A9 A2 23-22 24 24 28 30 23 2C 20 !!!7...#"$$(0#,
0:08D0 00 00 00 FE 40 40 48 48-D0 60 60 90 88 0E 04 00 ....aaHH.``.....
0:08E0 08 0F 10 2F 48 0F 08 0F-04 07 0C 12 21 06 18 60 .../H.......!..`
0:08F0 00 FC 00 F8 08 F8 08 F8-00 F8 10 60 80 60 1E 04 ...........`.`..
0:0900 00 3F 02 04 08 1F 03 0C-3F 10 04 08 10 20 42 01 .?......?.... B.
0:0910 7C 80 20 20 40 80 20 10-F8 8C A0 90 88 84 84 00 |. @. .........
0:0920 10 10 23 20 44 F8 09 13-20 7C 00 00 1D E1 02 04 ..# D... |......
0:0930 40 20 FE 40 40 88 04 FE-94 90 90 90 12 12 0E 00 @ .@@...........
0:0940 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0950 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0960 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0970 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0980 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:0990 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:09A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:09B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:09C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0:09D0 4C 76 79 61 6E 61 6E 00-00 00 00 00 00 00 13 1B Lvyanan.........
0:09E0 0B 0B 0C 0C 0C 0A 0A 0A-0C 0C 0C 0C 0C 0C 0C 0C ................
0:09F0 0C 0C 0C 0C 07 07 07 07-07 07 07 07 07 07 55 AA ..............U.
[ 本帖最后由 CF6896 于 2011-7-7 15:07 编辑 ] |
|