When a file infected by a Geek virus is run for the first time,
the virus copies itself to the interrupt table at memory location
0000:0200h. The next unused location is 0000:03D4h. If the byte at
0000:03C1 is 'x', the virus considers itself already resident. This
comes from the text 'dex' at the end of the virus file.
Other strings in the virus are 'GEEK' and '0v7a', the first might be a
name, the second looks like a version number. The final 'x' is the only
part of this that is used. Dos calls are used to get/set the INT 21h
interrupt vector. Infected EXE files have their initial stack pointer
set to A000h. This is used to determine whether to exit as a COM file
or EXE file.
The INT 21h handler intercepts calls to DOS function 4Bh (load program).
File attribute, date and time are preserved. The infection signature
is different for com and exe files. For infected COM files, the first
byte of the file is 0Eh (push cs). For EXE's the offset to first
relocatable item (low byte) is DEh.
Any file beginning with 'M' is treated as an EXE file. EXE files are
filled to the next paragraph boundary before the virus is appended, COM
files are simply appended to.
On the 29th day of any month, a random sector is overwritten by the
virus code/data instead of infecting a file.