返回列表 发帖

[转载]自己动手备份主引导区

自己动手备份主引导区
风般的男人

主引导扇区,也就是们常说的MBR(MASTER BOOT SECTOR),硬盘的第一个扇区,
位于硬盘的0柱0面1扇,是PC机在系统引导时最先读取的扇区,这个扇包含了两个部
分,一小段装入程序和一个硬盘分区表,其中装入程序的作用是用来将可启动的操作
系统分区的第一个扇区(记住:是操作系统的第一个扇区,不是硬盘的第一个扇区!)
,也就是我们常说的引导区(很多人分不清引导区和主引导区的不同),装入内存,
并将控制权交给引导程序,从而实现操作系统的引导。装入程序一旦被病毒或恶意程序
破坏,硬盘将不能用于引导。硬盘分区表大家可能比较熟悉,其中是硬盘的分区信息,
一旦遭到破坏,其后果是硬盘找不到分区,硬盘数据丢失。可见MBR区是多么的重要,正
因为它的重要,才有许多病毒或是恶意代码才把苗头指向了它,一不留神,你可能就要
和你的数据说“886”了,如果你的硬盘有重要数据的话,你可能可以通过重建分区的办
法找回一些或是全部的文件,记得几年前,我们单位的一台机器被CIH感染并发作了,我
花了一整天的时间才将分区表重建好,我当时在就在想,要是我早备份了主引导区就好,
于是我就动手写了两个小程序,用于备份硬盘的主引导区,在这我加上详细的注释把源
程序贴了出来,给大家看看,有兴趣的朋友可以自己编译、链接,之后你就可以用来备
份你的分区表了,记住有备无患、防范未然啊!
其中MBR1.ASM通过编译、链接后生成MBR1.EXE,用来将主引导区备份到软区。MBR2.ASM
编译、链接后生成MBR2.EXE,万一主引导区遭到破坏,用于将MBR1.EXE备份的主引导区写回
硬盘。
MBR1.ASM的源程序如下:
;MBR1.ASM
;本程序用于备份硬盘的主引导区
DATA SEGMENT
D1 DB "本程序用于将硬盘的主引导区备份到A:\BOOT.DAT中。",0dh,0ah
db " 作者:风般的男人",0dh,0ah
db " E-MAIL:tyhhyf@hotmail.com",0dh,0ah
db " OICQ:86633320",0dh,0ah,"$"
D2 DB 'A:\BOOT.DAT',00H
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOVAH,09H
MOVDX,OFFSET D1
INT21H ;显示字符串D1
MOVAX,0201H
MOVBX,0700H
MOVCX,0001H
MOVDX,0080H
INT13H ;读MBR区到内存
MOVCX,0020H
MOVDX, OFFSET D2
MOVAH,3CH
INT21H ;建立文件A:\BOOT.DAT
MOVAL,01H
MOVDX, OFFSET D2
MOVAH,3DH
INT21H ;打开文件A:\BOOT.DAT(用于写)
MOVBX,AX
MOVDX,0700H
MOVCX,0200H
MOVAH,40H
INT21H ;将内存中的MBR区写入文件中
MOV AH,4CH
INT 21H ;退出程序
CODE ENDS
END START


MBR2.ASM的源程序如下:

;MBR2.ASM
;本程序用于将MBR1.EXE程序在本机硬盘备份的主引导区恢复到本机硬盘的主引导区
DATA SEGMENT
d1 db " #主引导区安装程序#",0dh,0ah
db " 作者:风般的男人",0dh,0ah
db " E-MAIL:tyhhyf@hotmail.com",0dh,0ah
db " OICQ:86633320"0dh,0ah,"$"
d2 db " !!!警告!!!",0dh,0ah
db " 本程序仅用于将MBR1.EXE程序在本机硬盘备份的主引导区A:\BOOT.DAT"
db "文件(该文件必须在A盘根目录上)恢复到本机硬盘的主引导区,否则硬盘分区"
db "会丢失,不听警告,后果自负!"0dh,0ah
db " 确认要执行么?(Y/N)",0dh,0ah,"$"
d3 db " A:\BOOT.DAT文件没找到!",0dh,0ah,"$"
d4 db "A:\BOOT.DAT",00H
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:

MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOVAH,09H
MOVDX,OFFSET D1
INT21H ;显示字符串d1
MOVAH,00H
INT16H ;等待用户按任意键键继续
MOVAH,07H
MOVAL,00H
MOVBH,0A4h
MOVCX,0000H
MOVDX,184FH
INT10H ;设置显示方式(背景绿,前景红)
MOVAH,09H
MOVDX,OFFSET D2
INT21H ;显示字符串d2(因为此程序有一定的危险性,所以
;警告一定要显眼)
READ_KEYBOARD:
MOVAH,00H
INT16H
ORAL,20H
CMPAL,79H
JZWRITE ;是Y/y的话就跳转到写MBR区处
CMPAL,6EH
JZEXIT ;是N/n的话跳转到退出处
JMPREAD_KEYBOARD ;是其他键就重新读键

EXIT:
MOVAH,07H
MOVAL,00H
MOVBH,07H
MOVCX,0000H
MOVDX,184FH
INT10H ;清屏
MOVAH,4CH
INT21H ;退出程序

WRITE:
MOVAH,3DH
MOVDX,OFFSET D4;
MOVAL,00H
INT21H ;打开A:\BOOT.DAT
JBERROR
PUSHAX
MOVAH,3FH
MOVDX,7000H
MOVCX,0200H
POPBX
INT21H ;将A:\BOOT.DAT读入内存
MOVAH,03H
MOVAL,01H
MOVBX,7000H
MOVCX,0001H
MOVDX,0080H
INT13H ;写入硬盘MBR区
JMPEXIT ;跳转到退出程序处

ERROR:
MOVAH,09H
MOVDX,OFFSET D3 ;显示出错信息
INT21H
MOVAH,4CH
INT21H ;退出程序
CODE ENDS
END START

当然,你也可以用一些其他的工具对分区表进行操作,比如KV300,但是你要是和
我一样穷买不起正版又和我一样尊重知识产权的话,你就照我的去做吧:)
本文来自: 华夏黑客同盟论坛 本文详细地址:http://bbs.77169.com/read.php?tid=4411
白痴人才。

我在顶一下
白痴人才。

TOP

我在顶一下
白痴人才。

TOP

这个老了。有更好的方法。现在才发到
白痴人才。

TOP

这个老了。有更好的方法。现在才发到
白痴人才。

TOP

返回列表