找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3959|回复: 0

[原]VisualC++信息安全编程(3)内联汇编实现主引导区备份

[复制链接]
发表于 2012-3-7 00:08:18 | 显示全部楼层 |阅读模式
硬盘的第一个扇区被保留为主引导扇区,它位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。至于分区表,很多人都知道,以80H或00H为开始标志,以55AAH为结束标志,共64字节,位于本扇区的最末端。

= 硬盘主引导记录(MBR) + 硬盘分区表(DPT)

  用FDISK 进行硬盘分区时产生的, 它属于整个硬盘而不属于某个独立的DOS 分区, 是硬盘正确引导和使用的必要条件.

  物理位置:0柱面0磁头1扇区(Cylinder 0, Head 0, Sector 1)

  系统扇区(System Sectors): 0C-0H-2S,0C-0H-63S, 共 62 Sectors

  大小:512字节

  其中:MBR 446字节(0000--01BD),DPT 64字节(01BE--01FD),结束标志2字节(55 AA)

  功能:MBR通过检查DPT分区信息引导系统跳转至DBR

  详解: (DEBUG -A: MOV AX,0201 MOV BX,0200 MOV CX,0001 MOV DX,0080 INT 13)

  000H--08AH MBR启动程序(寻找开机分区)

  08BH--0D9H MBR启动字符串

  0DAH--1BCH 保留( "0 ")

  1BEH--1FDH 硬盘分区表

  1FEH--1FFH 结束标志(55AA)



C++内联汇编
在C++代码中插入__asm {}即可
主引导区备份如下
  1. DATA SEGMENT
  2.       
  3.          D2 DB 'A:\BOOT.DAT',00H
  4. DATA ENDS
  5. CODE SEGMENT
  6.      ASSUME CS:CODE,DS:DATA,ES:DATA
  7. START:
  8.           MOV   AX,DATA
  9.           MOV   DS,AX
  10.           MOV   ES,AX
  11.           MOV        AH,09H                              
  12.           MOV        DX,OFFSET D1                           
  13.           INT        21H              ;显示字符串D1
  14.           MOV        AX,0201H                           
  15.           MOV        BX,0700H                           
  16.           MOV        CX,0001H                           
  17.           MOV        DX,0080H                           
  18.           INT        13H              ;读MBR区到内存                                   
  19.           MOV        CX,0020H                           
  20.           MOV        DX, OFFSET D2                        
  21.           MOV        AH,3CH                           
  22.           INT        21H              ;建立文件A:\BOOT.DAT               
  23.           MOV        AL,01H                              
  24.           MOV        DX, OFFSET D2                           
  25.           MOV        AH,3DH                           
  26.           INT        21H              ;打开文件A:\BOOT.DAT(用于写)            
  27.           MOV        BX,AX                              
  28.           MOV        DX,0700H                           
  29.           MOV        CX,0200H                           
  30.           MOV        AH,40H                           
  31.           INT        21H              ;将内存中的MBR区写入文件中               
  32.           MOV   AH,4CH
  33.           INT   21H              ;退出程序
  34. CODE ENDS
  35.      END START
  36. 主引导区恢复如下DATA SEGMENT
  37.       
  38.        d2 db "        !!!警告!!!",0dh,0ah
  39.           db "    本程序仅用于将MBR1.EXE程序在本机硬盘备份的主引导区A:\BOOT.DAT文件(该文件必须"
  40.           db "在A盘根目录上)恢复到本机硬盘的主引导区,否则硬盘分区会丢失,不听警告,后果自负!   "
  41.           db "                  确认要执行么?(Y/N)",0dh,0ah,"{1}quot;
  42.        d3 db "    A:\BOOT.DAT文件没找到!",0dh,0ah,"{1}quot;
  43.        d4 db "A:\BOOT.DAT",00H      
  44. DATA ENDS
  45. CODE SEGMENT
  46.      ASSUME CS:CODE,DS:DATA,ES:DATA
  47. START:
  48.           MOV   AX,DATA
  49.           MOV   DS,AX
  50.           MOV   ES,AX
  51.           MOV        AH,09H                              
  52.           MOV        DX,OFFSET D1                           
  53.           INT        21H           ;显示字符串d1                    
  54.           MOV        AH,00H                              
  55.           INT        16H           ;等待用户按任意键键继续                       
  56.           MOV        AH,07H                              
  57.           MOV        AL,00H                             
  58.           MOV        BH,0A4h                             
  59.           MOV        CX,0000H                           
  60.           MOV        DX,184FH                           
  61.           INT        10H           ;设置显示方式(背景绿,前景红)                     
  62.           MOV        AH,09H                              
  63.           MOV        DX,OFFSET D2                        
  64.           INT        21H           ;显示字符串d2(因为此程序有一定的危险性,所以
  65.                               ;警告一定要显眼)                     
  66. READ_KEYBOARD:
  67.           MOV        AH,00H                              
  68.           INT        16H                                 
  69.           OR        AL,20H                              
  70.           CMP        AL,79H                              
  71.           JZ        WRITE          ;是Y/y的话就跳转到写MBR区处                  
  72.           CMP        AL,6EH                              
  73.           JZ        EXIT           ;是N/n的话跳转到退出处                    
  74.           JMP        READ_KEYBOARD  ;是其他键就重新读键                  
  75.                              
  76. EXIT:
  77.           MOV        AH,07H                              
  78.           MOV        AL,00H                              
  79.           MOV        BH,07H                              
  80.           MOV        CX,0000H                           
  81.           MOV        DX,184FH                           
  82.           INT        10H            ;清屏                     
  83.           MOV        AH,4CH                              
  84.           INT        21H            ;退出程序                     
  85.                               
  86. WRITE:
  87.           MOV        AH,3DH                              
  88.           MOV        DX,OFFSET D4;                           
  89.           MOV        AL,00H                              
  90.           INT        21H            ;打开A:\BOOT.DAT                     
  91.           JB        ERROR                              
  92.           PUSH        AX                                 
  93.           MOV        AH,3FH                              
  94.           MOV        DX,7000H                           
  95.           MOV        CX,0200H                           
  96.           POP        BX                                 
  97.           INT        21H            ;将A:\BOOT.DAT读入内存                    
  98.           MOV        AH,03H                              
  99.           MOV        AL,01H                              
  100.           MOV        BX,7000H                           
  101.           MOV        CX,0001H                           
  102.           MOV        DX,0080H                           
  103.           INT        13H            ;写入硬盘MBR区                    
  104.           JMP        EXIT           ;跳转到退出程序处                  
  105.                                                          
  106. ERROR:
  107.           MOV        AH,09H                              
  108.           MOV        DX,OFFSET D3   ;显示出错信息                           
  109.           INT        21H                                 
  110.           MOV        AH,4CH                              
  111.           INT        21H            ;退出程序
  112. CODE ENDS
  113. END START      
复制代码




作者:yincheng01 发表于2012-1-6 6:47:53 原文链接

您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-4-30 21:58 , Processed in 0.012873 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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