飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1733|回复: 2

硬盘数据恢复基础-----MBR代码分析

[复制链接]

该用户从未签到

发表于 2006-12-8 02:45:18 | 显示全部楼层 |阅读模式
MBR代码分析
;MBR.ASM
; MASM MBR
; LINK MBR
; EXE2BIN MBR

.MODEL tiny
.CODE

;设置寄存器及堆栈值

org 0
Head:
Start:
cli
xor ax,ax
mov ss,ax
mov sp,7C00H ;ss:sp=0:7C00H
mov si,sp
push ax
pop es
push ax
pop ds ;es=ds=0
sti

;将程序代码由0:7C00H移动到0:0600H处

cld
mov di,600H
mov cx,100H ;100H Words=512 Bytes,即一个扇区大小
repne movsw
db 0EAH ;这个是FAR JUMP的机器码
dw offset Continue+600H, 0000H ;这个是跳转目的地址,即0:061DH

;搜索可引导分区

Continue:

mov si,600H+1BEH ;si指向分区表
mov bl,4 ;四个分区

FindBoot:
FindBoot:

cmp byte ptr[si],80H
je SaveRec ;读扇区位置
cmp byte ptr[si],0
jne Invaild ;无效分区
add si,10H
dec bl
jnz FindBoot
int 18H ;进入ROM BASIC

;读取引导分区的扇区,柱面号

SaveRec:

mov dx,[si]
mov cx,[si+2]
mov bp,si

;检查其余分区表

FindNext:


add si,10H
dec bl
jz SetRead
cmp byte ptr[si],0 ;是否存在非法分区
je FindNext

Invaild:

mov si,offset ErrMsg1+600H

;字符串输出子程序

PrintStr:

lodsb
cmp al,0
je DeadLock
push si
mov bx,7
mov ah,0EH ;输出字符
int 10H
pop si
pop si
jmp short PrintStr ;下一字符

DeadLock:

jmp short DeadLock ;无穷循环,也可以写成jmp $

;读引导扇区

SetRead:

mov di,5 ;读取次数

ReadBoot:

mov bx,7C00H
mov ax,201H
push di
int 13H ;cx,dx已经在SaveRec处得到
pop di
jnc GoBoot ;成功则启动
xor ax,ax
int 13H ;reset驱动器,然后再读取
dec di
jnz ReadBoot

mov si,offset ErrMsg2+600H
jmp short PrintStr 失败输出信息,并进入无穷循环

;检查读入的引导扇区

GoBoot:

mov si,offsetErrMsg3+600H
mov di,7C00H+1FEH
cmp word ptr[di],0AA55H
jne PrintStr ;非AA55标志则输出错误信息
mov si,bp ;si指向可启动分区
db 0EAH,0,7CH,0,0 ;跳转至0:7C00H

ErrMsg1 db 'Invaild partition table',0
ErrMsg2 db 'Error loading operating system',0
ErrMsg3 db 'Missing operating system',0

Tail:
Tail:

FillNum equ 1BEH-(Tail-Head) ;计算填0数目
db FillNum dup(0)

;四个分区表项数据,跟分区情况有关,详细含义另解

PartTable db 80H,1,1,0,4,4,0D1H,2,11H,0,0,0,0FEH,0FFH,0,0
db 0,0,0C1H,3,5,4,0D1H,0FEH,0FFH,0FFH,0,0,0ACH,53H,0,0
db 20H dup(0)

ID dw 0AA55H

end start

;如果开始试用org 600H,那么访问数据时就不必加上600H,如mov si,offset
ErrMsg2+600H
;可写为mov si,offset ErrMsg2,这时就不能用exe2bin得到数据,必须试用debug
;debug mbr.exe
;-nmbr.bin
;-rcx 200
;-wcs:600
;-q
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2006-12-8 02:46:38 | 显示全部楼层

我们用的无敌内存编辑器WINHEX

我们用的无敌内存编辑器WINHEX其实是非常不错的用来做数据恢复,手工修改硬盘分区表的工具1!!!
PYG19周年生日快乐!

该用户从未签到

发表于 2006-12-12 00:27:25 | 显示全部楼层
顶两下,就是太难了,记不住:lol:
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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