This encrypted virus contains the text
***FICHV 2.1 vous a eu*****.....
When it activates it will overwrite the first 6 sectors of the track 0,
head 1 of the current drive. A slightly different version 2.0 is also
known, but it is only 896 bytes long.
All but the first 107 bytes of the virus is encrypted with XOR B8h. The
encryption key is one of the code bytes, the encryption routine is made
to look somewhat like the address of the encryption key is incremented
after each byte is dealt with, but is however a constant.
When the file is run, vectors for INT 01h and INT 03h are stored and a
decryption routine to decrypt one byte is installed instead to both
handlers. The first byte is decrypted with int 3 and the rest of the
virus is decrypted with repeated calls to int 1. The first thing done in
the encrypted area is to reinstall the original vectors.
Virus fetches the INT 21h vector. If the first byte of the INT 21h
segment is 'F' the virus considers itself already installed. If the
virus is already installed or if the current program name matches
"*COMMAND.*" or if an error occurs during installation, the PSP is
copied to 6000:0000h and the original file is run.
During installation the old INT 21h vector is stored in the virus code
and the current program name is fetched from the program environment.
The current program is shrunk to the virus size and the INT 21h handler
installed (first byte of the segment is set to 'F'). Then the program is
executed from the disk with interception disabled and the virus exits
with INT 21h/AH=31h. The return value passed in AL is not the program
return value, but is the return value from the load/exec call. Interrupt
vectors are get and set by using DOS calls.
The INT 21h handler intercepts DOS functions 4Bh (load program) and 3Dh
(open file). Interception is disabled by passing BP=00FFh. The DTA is
stored and changed to cs:0080 during interception.
Infection only takes place if more than 3000 bytes are free on the current
drive. A suitable file matching filespec "*.com" in the current
directory is selected for infection. The file must be at least 1500
bytes long and the filetime must not have a seconds field of 62 (this is
used to flag infected files).
A dummy critical error handler is installed each time a file is to be
infected. The old handler is not restored so crashes are likely some
time after running infected files.
Date and time are preserved, except the seconds field is set to 62.
Whenever the infection routine needs a buffer, it uses 6000:0000h not
caring whether any other program is using that area or not. For
instance, the virus is copied to this area for encryption.
Infection is done by appending the virucode to the start of the file.
The infect routine checks whether the byte at CS:0000 is 'G' when it
exits, to determine the exit method. If the virus is installed, it
simply tidies up and exits into DOS. If the virus is not installed, the
PSP is copied to 6000:0000h and if it is March, a damage routine is
invoked. Otherwise a copy routine is copied to 6000:0010 and jumped to.
The copy routine copies the first virus_size bytes of the file back to
the beginning and jumps indirectly to the program start.
The damage routine copies the text '****FICHV 2.1 vous a eu*' 85 times in
succession into the buffer at 6000:0000h. There are 4 more '*' at the end of
this text which were probably meant to be included but the author must have
miscounted. The text means "FICHV 2.1 got you". The text is written to
the first 6 sectors of the first 256 cylinders of the current drive,
heads 0 and 1. This loops forever unless the INT 13h write disk command
returns an error. If such an error occurs the virus exits into the host
program as it would if the damage had not been done.
This variant is 897 bytes, and infects EXE files, not COM files.
An earlier version of the virus.