ZPASS.ASM
上传用户:haocheng
上传日期:2007-01-06
资源大小:24k
文件大小:4k
源码类别:

磁盘编程

开发平台:

Others

  1. data segment at 0h
  2.      org 9h*4
  3.      KeyboardInt dd ?
  4.      org 13H*4
  5.      DiskInt dd ?
  6.      org 50H*4
  7.      HDInt dd ?
  8.      org 3f0h
  9.      ProSeg dw ?
  10.      org 413h
  11.      Memory_size dw ?
  12.      org 7C00H
  13. Boot proc far
  14. Boot endp
  15. data ends
  16. code segment
  17.      assume cs:code,ds:data
  18.      org 0h
  19. Head:
  20.      jmp start
  21.      RealInt label dword
  22.      RealOFF dw 0a189h
  23.      RealCS  dw 0f000h
  24. start:
  25.      cli
  26.      mov ax,cs
  27.      mov ds,ax
  28.      mov es,ax
  29.      mov ss,ax
  30.      mov sp,7C00h
  31.      xor si,si
  32.      sti
  33.      dec [memory_size]
  34.      dec [memory_size]
  35.      mov ax,[memory_size]
  36.      mov cl,6
  37.      shl ax,cl
  38.      mov es,ax
  39.      mov di,0
  40.      mov si,7c00h
  41.      mov cx,200h
  42.      rep movsb
  43.      push es
  44.      mov ax,offset continue
  45.      push ax
  46.      retf
  47. continue:
  48.      xor ax,ax
  49.      mov ds,ax
  50.      mov [ProSeg],es
  51.      cli
  52.      mov ax,word ptr [DiskInt]
  53.      mov word ptr cs:[RealOFF],ax
  54.      mov word ptr [HDInt],ax
  55.      mov ax,word ptr [DiskInt+2]
  56.      mov word ptr cs:[RealCS],ax
  57.      mov word ptr [HDInt+2],ax
  58.      
  59.      mov ax,offset Int_Handler
  60.      mov word ptr [DiskInt],ax
  61.      mov word ptr [DiskInt+2],cs
  62.      
  63.      mov ax,word ptr [KeyboardInt]
  64.      mov word ptr cs:[OldInt9],ax
  65.      mov ax,word ptr [KeyboardInt+2]
  66.      mov word ptr cs:[OldInt9+2],ax
  67.      mov ax,offset Int9_Handler
  68.      mov word ptr [KeyboardInt],ax
  69.      mov word ptr [KeyboardInt+2],cs
  70.      
  71.      mov si,0002h
  72. $CheckBoot:
  73.      mov ax,0201h
  74.      mov bx,0200h
  75.      mov cx,0001h
  76.      mov dx,0080h
  77.      pushf
  78.      call dword ptr Realint
  79.      jnb $4
  80.      dec si
  81.      jnz $CheckBoot
  82. $4:
  83.      xor si,si
  84.      mov di,200h
  85.      push cs
  86.      pop ds
  87.      repe cmpsb
  88.      jz $Right
  89.      mov si,offset Virus_IN
  90.      xor ch,ch
  91.      lodsb
  92.      mov cl,al
  93.      mov ax,1301h
  94.      mov bx,7
  95.      sub dx,dx
  96.      mov bp,si
  97.      int 10h
  98. $Right:
  99.      mov ax,cs
  100.      mov es,ax
  101.      xor bx,bx
  102.      mov ax,0301h
  103.      mov cx,0001h
  104.      mov dx,0080h
  105.      pushf
  106.      call dword ptr Realint
  107.      mov si,0002h
  108. $ReadPass:
  109.      mov ax,0203h
  110.      mov bx,0200h
  111.      mov cx,0004h
  112.      mov dx,0080h
  113.      pushf
  114.      call dword ptr RealInt
  115.      jnb $1
  116.      dec si
  117.      jnz $ReadPass
  118. $1:
  119.      mov ax,offset $J1
  120.      push ax
  121.      mov ax,0200h
  122.      push ax
  123.      ret
  124. $J1:
  125.      sti
  126.      xor ax,ax
  127.      mov es,ax
  128.      mov si,0002h
  129. $ReadBoot:
  130.      mov ax,0201h
  131.      mov bx,7c00h
  132.      mov cx,0003h
  133.      mov dx,0080h
  134.      pushf
  135.      call dword ptr RealInt
  136.      jnb $2
  137.      dec si
  138.      jnz $ReadBoot
  139. $2:
  140.      jmp boot
  141.      
  142.      OldInt9 dd ?
  143.      Virus_IN db VirusLen,'[Virus] Self Protect...',0ah,0dh
  144.      VirusLen equ ($-Virus_IN)-1
  145.      Priority db 00h
  146.               db 0ffh,0ffh
  147.      Cyl dw 619
  148.      Hotkey equ 1
  149.      Shift_Mask equ 00001010b
  150. Int_Handler:
  151.      sti
  152.      cmp dx,0080h
  153.      jne @01
  154.      cmp cx,0001h
  155.      jne @01
  156.      mov cx,0003h
  157. @01: 
  158.      cmp ah,03h
  159.      jz check
  160.      cmp ah,05h
  161.      jz check
  162.      cmp ah,06h
  163.      jz check
  164.      cmp ah,07h
  165.      jz check
  166.      cmp ah,0bh
  167.      jz check
  168.      cmp ah,0fh
  169.      jz check
  170.      cmp ah,13h
  171.      jz check
  172.      cmp ah,19h
  173.      jz check
  174. Conti:
  175.      jmp cs:[RealInt]
  176. check:
  177.      cmp dl,80h
  178.      jne conti
  179.      push cx
  180.      push dx
  181.      xchg ch,cl
  182.      and ch,11000000b
  183.      mov dx,cx
  184.      mov cl,6
  185.      shr dh,cl
  186.      cmp dx,word ptr Cyl
  187.      pop dx
  188.      pop cx
  189.      jge conti
  190.      cmp cs:Priority,00h
  191.      je Error
  192.      cmp dh,00h
  193.      jne conti
  194.      cmp cx,0001h
  195.      jz Error
  196.      cmp cx,0002h
  197.      jz Error
  198.      cmp cx,0003h
  199.      jz Error
  200.      cmp cx,0007h
  201.      jz Error
  202.      cmp cx,0008h
  203.      jz Error
  204.      jmp conti
  205. Error:
  206.      mov ah,00h
  207.      std
  208.      retf 2
  209. Int9_Handler:
  210.      sti
  211.      push ax
  212.      in al,60h
  213.      cmp al,Hotkey
  214.      je Trigger
  215. Int9_Exit:
  216.      pop ax
  217.      jmp cs:[OldInt9]
  218. Trigger:
  219.      mov ah,2
  220.      int 16h
  221.      and al,0fh
  222.      cmp al,Shift_Mask
  223.      jnz Int9_Exit
  224.      pushf
  225.      call cs:[OldInt9]
  226.      pushf
  227.      mov ax,offset @j2
  228.      push ax
  229.      mov ax,600h
  230.      push ax
  231.      ret
  232. @j2:
  233.      jc $lock
  234.      mov cs:Priority,0ffh
  235.      jmp @j3
  236. $lock:
  237.      mov cs:Priority,00h
  238. @j3:
  239.      popf
  240.      pop ax
  241.      iret                    
  242. Tail:
  243.      Filler_Amount equ 512-(Tail-Head)-2
  244.      db Filler_Amount dup(0)
  245.      dw 0AA55h
  246. code ends
  247.      end          
  248.