首页
社区
课程
招聘
[求助]替换MBR后,系统无法启动
发表于: 2010-5-11 10:37 9765

[求助]替换MBR后,系统无法启动

2010-5-11 10:37
9765
我的目的很简单:就是将原来的mbr替换成我的mbr,我的mbr完成的功能就是要将放在指定位置的原来的mbr调用起来,让系统正常启动。
我使用下面的代码将mbr替换掉了,将原来的mbr移到10扇区,启动后调试 发现我的程序可以将原来的mbr调用,并且正常执行。MBR也将NTLDR加载了,但是在20000的地址处跳转指令是:jmp .+0x01c3 (0x000201c6) ; e9c301

跟 http://blog.csdn.net/chief1985/archive/2008/06/04/2512372.aspx这里说的 (0) [0x00020000] 2000:0000 (unk. ctxt): jmp 0x1f6 ;e9f301 地址不一样。
xp和2000我都试过了,跳转地址都不一样。而且最重要的是系统没有起来。。。 

; create 16 bit code and assembly only instructions up to 386 instruction set
[bits 16]
CPU 386

xor     ax, ax
mov     ss, ax
mov     sp, 7C00h
sti
push    ax
pop     es
push    ax
pop     ds

push ds
pushad

cld
mov     si, 7C1Bh
mov     di, 61Bh
push    ax
push    di
mov     cx, 1E5h
rep movsb
retf

xor bx,bx
mov es,bx                                               ; segment 0
mov ax,0x201                                            ; function read sectors, read 1 sector
mov cx,10                                               ; read original boot code (sector 10), boot sector
mov dx,80h                                              ; boot drive
mov bh,0x7c                                             ; address 7C00h
int 13h
popad
pop ds
; execute original Master Boot Record
jmp word 0000h:7C00h

times 510-($-$$)  db 0

Boot_Signature            dw  0AA55h

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人理我。。。
我是使用bochs调试的。。。
2010-5-11 11:11
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
3
马上又要出现BOOTKIT病毒了,请各大杀软做好MBR防护检查
2010-5-11 11:18
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
bootkit都已经成为老技术了
2010-5-11 11:44
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主sti之后怎么没有 cli???
2010-5-11 13:05
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还有移动字节到61BH那段没看明白什么意思.不知道那段代码要做啥?
2010-5-11 13:10
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
太夸张了吧 呵呵
2010-5-11 14:08
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
更正一下:
cld
mov     si, 7C1Eh //不是原来的7C1B
mov     di, 61Bh
push    ax
push    di
mov     cx, 1E5h
rep movsb
retf
2010-5-12 16:38
0
雪    币: 2734
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
无比的崇拜技术牛人,看不懂这些东西了。上学没好好学。
2010-5-12 17:17
0
雪    币: 115
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
以前写的一个mbr,当时原先的mbr放在第6扇区,并hook了int 13

.286
.model small
.code


CocdeSize = Offset @@End - Offset @@Start

@@Start:
	cli
	xor ax,ax
	mov ss,ax        ;ss=ax=0000h
	mov sp,7c00h     ;sp=7c00h
	sti
	push ax
	pop es		 ;es=0000
	push ax
	pop ds		 ;ds=0000

@@Begin:
	int  12h
	dec  ax
	mov  ds:[0413h],ax

	mov  cl, (10-4)
	shl  ax,cl
	mov  es,ax		;ax=9fc0

	xor  di, di		;di=00
	mov  si,sp		;si=7c00
	mov  cx, CocdeSize
	cld
	rep  movsb

	push ax
	mov  di,Offset  @@HighAddr
	push di
	retf

;	di -> ip
;	ax -> cs

@@HighAddr:
	cli
	xchg ds:[13h*4+2],ax
	mov  cs:[OldInt13Seg],ax

	mov  ax,Offset @@NewInt13
	xchg ds:[13h*4],ax
	mov  cs:[OldInt13Off],ax
	sti

	push ds		;es=ds=0000
	pop  es

@@ReadOldHardBoot:
	mov  ax,0201h		;es:bx=0000:7c00
	mov  bx,7c00h
	mov  cx,0006h
	mov  dx,0080h
	int 13h
	jc   short @@Exit1

@@ExecOldBoot:
	cmp  es:[bx.Flags],0aa55h
	jnz  @@Exit2
	
	lea  si,MsgText
	jmp  @@DispMsg

@@Exit1:
	lea  si,MBRERROR
	jmp  @@DispMsg

@@Exit2:
	lea  si,MOS

@@DispMsg:
	mov  al,cs:[si]
	inc  si
	mov  ah,0eh
	int  10h
	or   al,al
	jnz  @@DispMsg

	xor  ax,ax
	int  16h

@@ExitDisp:
	
	;push  es		;es=0000
	;push  bx		;bx=7c00
	;retf
	db 0eah,00h,7ch,00h,00h

@@NewInt13:
	cmp  dX,0080h
	jnz  short  @@JmpOldInt13
	cmp  cx,0001h		;dx=0000
	jnz  short  @@JmpOldInt13
	mov cx, 0006h			;if caozuo MBR-->0006 sector

@@JmpOldInt13:
	db  0eah
	OldInt13Off  dw  ?
	OldInt13Seg  dw  ?

 	MsgText db 'Night is deep,you must go sleep!',0
	MBRERROR db 'can not find MBR!',0
	MOS	 db 'Invalid Operating System!',0
 		
 @@End:
 	org  1feh
 	Flags  dw  0aa55h
End
2010-5-12 18:57
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼上的 你是如何编译成功的呢???呵呵 。。。
2010-5-17 20:18
0
雪    币: 115
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
masm filename
link     filename

就可以了,只需要masm.exe,link.exe,lib.exe即可
2010-5-17 21:44
0
雪    币: 2734
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
哎~!全还老师了。
2010-6-18 11:59
0
游客
登录 | 注册 方可回帖
返回
//