PART I
THE ULTIMATE VIRUS KILLER BOOK
7 - THE MEANING OF LIFE (NOT LIFF)
(MISCELLANEOUS THINGS AND ANECDOTES REVOLVING AROUND
THE LIFE AND WORK OF A VIRUS KILLER PROGRAMMER)
Yes, I promised some human interest, so here it is. For those
among you who are not particularly into this kind of informality,
continue with chapter 8 please.
7.1 HOW THE "ULTIMATE VIRUS KILLER" WAS PROGRAMMED
(A STORY OF MISCONCEPTION, ILL PROGRAMMING AND COMPILER
PROBLEMS)
Let me start by saying that God probably did not have a computer
programmer in mind when he created mankind and that I am probably
of a rather non-mathematical persuasion as far as mankind goes.
This is probably the reason why I am a student of English.
Really, I am not an excellent programmer. Although I usually get
the things to work in the end - even without flaws or anything -
the means I use to this end would probably make any real
programmer start to retch...if he's lucky. Structure is only
vaguely recognisable in what, for lack of a better word, I
usually refer to as my "Ultimate Virus Killer" program code or
source file. I think it might conceivably be a classic example of
something the word spaghetti code has been called into life for.
Though I have improved my programming skills considerably during
the development time of the "Ultimate Virus Killer" - it took
quite a while, so I should - even the latest version of the
program's source code would probably not be able to please many
computer scientists and competing virus killer programmers alike.
But it's the bottom line that counts. And that bottom line reads,
clearly and concisely: It works. And it works fine.
The first versions of the virus killer - then called "Virus
Destruction Utility" - did not contain any subroutines. A file
was opened all over again for each kind of link virus, and
absolutely brainstaggering amounts of IF-THEN loops had been
warped into a routine that was supposed to recognise innocent and
less innocent bootsectors. As new recognitions had to be added,
the source file was becoming more and more unwieldy.
I had never heard of DATA lines, let alone compact routines that
read those data lines and then compared them with the contents of
the bootsector. This technique now allows me to include the
recognition of any new bootsector by merely adding one DATA line
with specific parameters. Even link viruses and packed program
files are recognised like this now, and the thousands of
different versions of the Beilstein Virus only require about five
DATA lines. And each new version of the "Ultimate Virus Killer"
is not only better with regard to its sheer statistics, but also
a somewhat better product from a programmer's point of view.
Before the turn of the century it just might be able to please a
few fellow programmers, albeit probably the less picky ones.
My own ability to code (or lack of it), however, was not the
only of the problems I faced during the program's gradual and
ever continuing development. As the "Ultimate Virus Killer"
source file in "GfA Basic" grew to be more and more complex
(right now it's almost 400 Kb, or 12,000 lines of source code),
it often happened that the program worked perfectly in the "GfA
Basic" interpreter yet point-blank refused to operate at all once
compiled, bombing out hopelessly or locking up without as much as
a sound. If you are a programmer of "GfA Basic" yourself, chances
are substantial that you may have encountered this, too. These
are the most fervently hated errors, I am sure any programmer
will be happy to acknowledge. Everything worked just fine but
after compiling it wouldn't any more. Exasperating, truly.
The worst thing is that you usually end up working your way
around bugs in "GfA Basic" or Atari's Operating System. Finding
them entails PRINTing huge amounts of dummy texts all over your
source file so that it may be estimated where the program got to
before it crashed. Once it has been established where
approximately the program crashed, new messages had to be PRINTed
in a narrowed-down piece of code, the whole thing compiled
again... Until you finally found the bug after a couple of hours'
worth of trial and error.
Consider yourself lucky, dear reader, that I am not going to
elaborate extensively here upon the manifold problems I
encountered when converting my code from "GfA Basic" version 2 to
version 3. The strangest errors happened, mouse cursors started
flashing due to use of the INP(2) command instead of the INKEY$
command, variable management had to be altered... If "GfA Basic"
version 4 (though probably not called that) will ever become
available, I wonder which slight (or none too slight)
incompatibilities will surface.
7.2 OLD "ULTIMATE VIRUS KILLER" VERSIONS
Each time a new version of the "Ultimate Virus Killer" is
finished, I wish I'd never made the version directly before that.
That leaves little to the imagination as to what I feel about the
first couple of versions if you realise that a total of over
thirty different versions have been made in nearly eight years!
The problem with the older versions, especially the really old
ones, is that they even suspect the latest disk immunization
method of being a virus. As of version 4.2, however, a special
segment was built in to check the program's age when compared
with your internal computer's clock date; it will warn you if its
production date is more than one year before, in which case there
is sufficient reason no longer to use it. The virus scene is
constantly moving and shifting, growing and mutating, and there
is no way of giving a guarantee that new viruses will be properly
recognised and efficiently battled by older virus killer versions
(this, incidentally, is the reason why you should really only
seriously consider using a virus killer that is constantly being
updated and supported).
I still regularly receive disks of people who found a suspicious
bootsector using version 3.x of the program. And in almost all
cases this suspicious bootsector turns out to contain the
original Ghost Virus that has been known since 1988. Sometimes,
especially when the weather is either too hot or too wet, this
can get me a bit depressed.
As you know by now, development of the "Ultimate Virus Killer"
started in December 1987, shortly after the discovery of the
Signum Virus in Holland. Originally it started off as Public
Domain (all versions 2.x) but I soon found out that I had to make
some money with this or otherwise I could simply not afford
supporting it at all; many people sent in disks that had to be
returned, more than half of them neglecting to include reply
postage, International Reply Coupons or, indeed, some money.
That's why, in April 1988, version 3.0 was released. It was a
largely worked-over version of the 2.x programs, with enhanced
statistics and the introduction of the restore option to allow
you to put back various bootsector programs needed by many a game
or demo. This version was commercial, and I tried to get people
to buy it through writing articles concerning viruses in as many
computer magazines as possible. These articles had a certain
'advertisement' flavour about them, but at least I could now
actually afford supporting the program. It started to grow
continuously with regard to quality as well as quantity.
In version 3.1 (May 1988), the BIOS Parameter Block repair
option was included after the appearance of the Signum Virus B
which had been corrupted in memory causing this part of the
disk's bootsector to be erased. This routine remained in the
virus killer unaltered up to and including version 5.0.
Version 3.2 of September 1988 was the first one that got sold in
reasonable quantities beyond the borders of the Netherlands,
following the publication of one of my articles in German "ST
Magazine". Now it finally got to the stage where I would receive
loads of mail from people sending in loads of bootsectors and new
viruses for inclusion - more people got it, more people found
suspected stuff, more people sent it in. This was my biggest
lucky break.
-----------------------------------------------------------------
Virus Destruction Utility (Public Domain)
2.0PRE 12-12-1987 2.0 18-12-1987
2.1 18-01-1988 2.2 20-01-1988
2.3 15-02-1988 2.4 16-02-1988
2.5 27-03-1988
Virus Destruction Utility (Commercial)
3.0 10-04-1988 3.1 30-05-1988
3.2 11-09-1988 3.3 01-03-1989
3.4 13-04-1989 3.5 28-04-1989
Atari ST Virus Killer (Commercial)
3.6 28-05-1989 3.7 01-06-1989
3.8 14-06-1989 3.9 31-08-1989
Ultimate Virus Killer (Commercial)
4.0 24-05-1990 4.1 28-06-1990
4.2 08-01-1991 5.0 07-04-1991
5.1 27-06-1991 5.2 18-08-1991
5.3 17-11-1991 5.4 29-03-1992
5.5 05-07-1992 5.6 29-09-1992
5.7 09-01-1993 5.8 28-03-1993
5.9 06-06-1993 6.0 03-10-1993
6.1 08-01-1994 6.2 13-04-1994
6.3 17-07-1994 6.4 22-01-1995
6.5 20-04-1995 6.6 02-08-1995
6.7 05-11-1995 6.8 04-02-1996
-----------------------------------------------------------------
"Ultimate Virus Killer" versions and release dates
I threw myself on a University career to study Biology at the
time, which caused many people to complain about delivery times
and the like. I tasted freedom for the first time during that
year, after having lived only with my parents before. Apart from
freedom, I also tasted late nights, alcohol, and girls. In
retrospect, a period everybody should have had but that nobody
would be proud of. It took rather a longer time before the next
version got released.
In March 1989 I quit my Biology studies, which coincided with
the release of version 3.3. Its statistics had been greatly
enhanced, but more importantly the scan partition option had been
included. People were now allowed to scan an entire partition on
floppy-or hard disk for link viruses in one fell swoop, instead
of them having to select each file separately such as had been
the case until then. This bit of clever recursive programming was
coded by good friend and professional programmer Stefan Posthuma,
who was to do a bit more in the future as well. Hum. Actually,
all really clever bits of programming in the "Ultimate Virus
Killer" seem to be his. Hum. The HELP mode was included in this
version as well. This particular mode was coded by myself for a
change.
As of version 3.4 (April 1989) the program was fully legal from
a programmer's point of view. Previously I had loaded the
bootsector restore data file on an absolute address (a fixed
memory address that was always the same) which could cause
crashes with RAM disks installed or when the user had a lot of
resident software (AUTO folder programs, large desk accessories).
Again it was Stefan who broke the news to me that a data file
could simply be loaded across a huge integer array for it to be
loaded correctly on any system with any memory configuration.
Integer arrays, you see, are not moved around in variable memory
once they've been defined.
I was pretty active back then. Version 3.5 was released in that
same month as well, which boasted a fully reprogrammed link virus
scan which offered a 50% speed increase - effectively making it
the fastest link virus scanner anywhere at the moment. The
bootsector virus scan routine was rewritten as well, though not
offering such a dramatic speed increase.
Some time earlier, I had obtained a valuable contact in England
- Mr Niall McKiernon of what was then Excel Software. He had read
my article about viruses in Les Ellingham's "Page 6" (now "New
Atari User", primarily a magazine aimed at Atari 8 bit users). He
sold the virus killer (previously known as "Virus Destruction
Utility") in England for me and eventually got me into contact
with CRL who got the rights to the program and, as of version 3.6
(May 1989), sold it commercially, world-wide. The name of the
program became "Atari ST Virus Killer". Niall became my agent and
friend.
The time I spent programming for CRL is not one I look back upon
with great joy. I waited until spring 1991 when they went into
receivership to allow me to transfer the rights to someone who
would do an excellent job indeed - the same Mr Niall McKiernon
that had helped me earlier. He had in the mean time set up a new
company called Douglas Communications. He spends most of his time
installing high-spec PC systems for customers, but on the side he
also distributes some software titles such as "Ed Hak" and,
indeed, the "Ultimate Virus Killer".
The last update I sent to CRL was version 3.9 that was released
in August 1989. The next version that was commercially available
(albeit through Douglas Communications and under its current name
"Ultimate Virus Killer") was version 5.1, in June 1991. The
program had been improved dramatically. Even though I had stopped
sending updates to CRL, I had continued improving it. It was
almost a new product. But let's get back into the proper
chronological order of things for now.
In May 1990, after having spent months reprogramming and
converting the whole shebang into "GfA Basic" version 3, version
4.0 was finished. The reason for the delay was threefold. First I
had to debug the whole thing after converting it from "GfA Basic"
version 2 to version 3, the two versions not being as compatible
as the adverts wanted to make you believe. Second, I had a
tremendous lack of driving power, due to all kinds of complicated
things involving money I would not like to bother you with.
Third, I had started working full-time in Germany for young and
growing software company, Thalion. That took up most of my spare
time.
Anyway, version 4.0 was enhanced a lot, too. It now finally
worked together with the new TOS versions 1.04 and 1.06, the
program checked itself for link virus infection at start-up, the
disk immunization method was enhanced, the system status screen
was blatantly reprogrammed into the setup it would have until
version 5.9, the non-executable bootsector virus type (see 4.5)
was now recognised and internal memory management was vastly
improved.
Version 4.1 (of June 1990) saw the inclusion of a better Rob
Northen protection checker. Rob Northen is the man behind a
company that devises copy protections for major companies, most
particularly for Ocean. These copy protection schemes use
bootsectors that are at least 95% identical, causing frequent
faulty recognition. This was to happen no more. Further, an
option to format a disk (although only single sided, standard
format) was added as an option before allowing the user to write
a boot file to disk.
In version 4.2, I attempted to allow the program to check up to
26 partitions - which had previously been a maximum of A-I
(corresponding with the 10 buttons in the alert box routine).
This attempt failed somewhat because I did not have an
appropriate system with that amount of hard disk partitions at my
disposal. It didn't get solved, debugged and properly implemented
until version 5.4. The alert box output was made more optically
pleasing, and the cursor keys could now also be used to select
items (which was done because a German reviewer had slagged the
program off because it didn't have this option). A start was made
trying to make the program TT-compatible, though this mainly
consisted of only supporting that machine's ST-compatible
resolutions. Michael Bittner of Thalion software wrote a machine
code routine that checked all of RAM for reset-resistant
applications. Previously this had been a bit of Basic code which
took tediously long, especially on systems with more than 1
megabyte of memory.
When I started doing business with Douglas Communications, apart
from the name change the version number was also increased to
5.0. This version contained manifold small bug removals and
further tiny changes.
Version 5.1 was released in June 1991. This boasted another
rather neat bit of programming by the Stefan Posthuma I mentioned
earlier: A new restore bootsector list selector. A brilliant
piece of programming, finally one could select the bootsector to
be repaired truly comfortably and quickly. A demo version of 5.1
was made (5.0D GB) for the program's virgin appearance on a cover
disk, the "ST Format" one.
I had in the mean time quit work at Thalion and was preparing to
become some kind of scholar again. In September I started my new
University career. This time English, however, instead of
Biology.
August 1991 saw the release of version 5.2. This now featured a
separate restore program for people unfortunate enough only to
have half a megabyte of RAM. These people had been unable to
repair any commercial disks in the one or two previous versions.
The entire program was converted to version 3.6TT of "GfA Basic",
which entailed a couple of slight incompatibilities again that
had to be mastered in the process. Most problems occurred when
trying to rewrite bits of the program so that it utilised some of
the "GfA Basic" 3.6TT version's possibilities. The option to look
at a suspect bootsector was added, and a first attempt was made
to make the program work using any resolution bigger than 640 by
400 screen pixels as well. The screen buffer routines had to be
re-written, as well as all screen output. It was quite an effort,
as the entire program had been written in an extremely
resolution-dependent method; back in 1987 when everything had
started nobody had bothered a bit about other screen resolutions
and, predictably, neither had I.
I could see the people at Atari grinning: "We told you so, we
told you so, you should have stuck to the guidelines, tee-hee."
Despite the fact that a few bugs crept in, inevitably, during
this major re-write, all of it generally turned out to work quite
OK.
In November 1991, version 5.3 was released. It was now fully TT
compatible, and also included some user suggestions, most
noteworthy of which was the addition of an automatic bootsector
virus check before checking an entire floppy disk for link
viruses.
Version 5.4, March 1992, was improved further still. The link
virus check was made up to 85% faster, all cosmetic bugs were
discarded, and one could now truly check up to 26 partitions. The
BIOS Parameter Block repair routine was re-written and now also
supported High Density (HD) and Extra High Density (ED) disks.
All new oddities involving the notebook version of the ST, the ST
Book, were now considered as well. A demo version of 5.4 appeared
on the "Atari ST User" cover disk.
Version 5.5, July 1992 (the version made parallel to the bulk of
the early writing for this book), contained two fairly major
additions. For starters the program could now be used from a
Command Line Interpreter or as a .TTP file; also, the system
status screen had been optimised so that it would now also check
XBRA chains right to the end. A German magazine had written a
very bad review of the "Ultimate Virus Killer" in which (among
some stuff they came up with because they seemed to be biased
against the program) they noted the lack of the previous version
to do this XBRA chain thing. I am quite susceptible to plain
criticism (I hate it - I prefer the constructive kind) and most
of the time I implement ideas suggested by reviewers immediately.
So there.
Late September 1992, version 5.6 was released. The link virus
scan could now also warn you when compressed files were found and
the internal program structure had been improved so as to allow
for 75% faster "GfA Basic" compilation times. News about the
forthcoming new Falcon and the new "MultiTOS" had reached me,
causing quite a lot of extra work. The program now no longer
hogged all memory (i.e. in a multi-tasking environment it was
possible to start other programs after it, even though at the
time it didn't truly multi-task as such).
The change of the year saw the release of version 5.7, which now
came accompanied by a .CPX module for use with the Atari Extended
Modular Control Panel. This module was written by a good friend
of mine, Torbjørn Ose (also known as Lord Hackbear of Digital
Chaos/Delta Force). The link virus scan now also supported
analysis of a folder as an intermediate option between a whole
partition or a single file; bootsector scan speed was increased
by 85% with its data format getting 20% smaller; the 'Virus
Probability Factor' calculation got 17 times faster; the link
virus check was made 42% faster; additional input flexibility was
added to the repair selector and the system status screen
analysis speed improved by a factor of 3. A few demo versions
were released as well, one of them for the "ST Review" cover
disk.
It seemed as if speed increase became more and more important.
This was largely caused by Kai Holst, programmer of the
"Antidote" virus killer, who insisted that my program was
ponderously slow whereas his was lightning fast. As a matter of
fact he was quite right.
So version 5.8, released late March 1993, saw yet another few
speed increases besides the usual bug alleviations. The link
virus scan, for example, became even faster (a factor 3 when
compared with 5.6). On top of that, the program was now truly
Falcon-compatible and could also be used as an accessory simply
by renaming its extension to ".ACC". A configuration option was
added, and CPX modules could now also be checked for link
viruses. On the rather odd side of things, this version also
included support for the WACOM graphics tablet instead of the
mouse. A freak event, I guess. WACOM support was removed in the
next version though, or the one after that.
Version 5.9, to be released three months later, was a version
that mainly boasted increased statistics and some serious bugs
fixed.
Version 6.0 (October 1993) was the latest major revamp of the
program. Through using a library of ready GEM interface routines
for "GfA Basic" (Gregor Duchalski's excellent shareware
"Flydials") the program had now become fully GEM-compatible. It
supported [ALTERNATE] keyboard shortcuts, a 'flying dialog
corner' to move the dialogs around the screen, totally optimised
memory management...the whole enchilada. Finally the Germans
would have to be satisfied, who had insisted on their own virus
killers ("Sagrotan" and "ToXis") being a lot better just because
they used GEM even though theuir statistics were mere fragments
of those of the "Ultimate Virus Killer". Extended file selector
calls were used on TOS 1.04 and higher, and the system status
screen and restore selector were totally reprogrammed. System
screen analysis got 60% faster, link virus scan almost 75% faster
and bootsector scan over 60% faster. Over the last year of
coding, the bootsector virus scan had totalled a speed increase
of 90%! Whereas previous versions had had difficulty finding the
right RAM configurations on TT, strange STs and Falcon, much
desired assistance by H.W.A.M. de Beer, author of the invaluable
"SysInfo" diagnostic utility, now caused this to work properly at
all times. Last but not least, the program now worked on half
megabyte machines again, even when used as an accessory.
Version 6.1 was finished in January 1994. As usual after major
re-writes - in this case the GEM compatibility thing with
"FlyDials" in version 6.0 - there had been quite a few new bugs
creeping in that all needed to be fixed. Some people had
complained about the GEM resource (RSC) files being too big, so
instead of two big files they became one smaller one that also
looked better. Most important, however, was the fact that a bug
was solved that had probably been present right from March 1989,
when Stefan's scan partition routine was built in: Due to the
internal GEMDOS memory pool being initialised improperly, no more
than 25 files would ever be checked in a folder or root
directory. This could cause vast amounts of files never to be
checked, which is not the kind of thing that promotes safety. A
demo (numbered, confusingly, 6.0GB D) was released for a second
occurrence on the "ST Format" cover disk.
April 1994 saw the release of version 6.2. The major change in
this version was the fact that just about all dialogs were now
displayed as windows. This meant that the "Ultimate Virus Killer"
didn't just work with multi-tasking Operating Systems but would
actually allow other programs to run in the background, too
(these tasks used to be frozen, simply). A bug in "GfA Basic"
which caused the inability to output to a printer attached to the
Falcon was fixed by writing a custom printer output routine.
Also, the magic 1500 mark in "total recognised bootsectors" was
passed.
The most important change in version 6.3 (July 1994) was the
fact that encoded viruses were now recognised - especially those
not yet known or written. They would now be internally decoded
prior to the 'Virus Probability Factor' algorithm being let loose
on them. There were also a few bugs (in the recognition of the
dangerous Beilstein Virus and in the window redraw routine) that
were fixed. In May, a demo version had already been made for
release on a Shareware CD ROM project by ROMWARE GmbH.
Then, quite suddenly, my life took a 180 degree turn. Or perhaps
the terms "flip-flopped", "jumped wildly" or "went crazily
berserk in an immensely pleasing way" would be rather more
appropriate. In September 1994 I met a girl called Karin that
eventually triggered me to leave my girlfriend of 5 years,
Miranda. Everything suddenly became so new and exciting, so magic
and un-hinted-at beautiful that there was not another choice left
for me. This choice had quite a few repercussions in the field of
housing and general stability of life, especially because Karin
was to leave for an extracurricular year of English studies at
the University of Bristol by the end of that month, not to return
for good until June 1995. I had 9 months of hard-core loneliness
ahead of me.
Hence the considerable delay until version 6.4 was released, in
January 1995. That was three months overdue. Version 6.4 catered
for much better recognition of Atari's "No Roach" bootsectors
(which determine HD spin-up delays and such) and had some bugs
fixed. Due to the amazing "GfA Basic" development aid package
"ERGO!pro" (by Columbus Software) I had been able to throw out
some remains of old strands of code, too, as well as optimise
variable use a bit. Use of floppy drive B was also made more
comfortable; previously the program had always reverted back to
drive A when checking viruses on drive B, which wasn't really
neat at all. This bug had never caught my attention simply
because I only had one disk drive and nobody had bothered to tell
me before.
The last version to be made prior to the finishing of this book,
April 1995's version 6.5, was the first since a long time that
was supplied in a German-language version again. Compo now did
the distribution there. During the translation, a few cosmetic
errors were spotted and fixed. Also, the program could now - at
least theoretically - perform printer output to Atari's SLM laser
printer with a Diablo driver installed.
In June 1995, Karin came back from her year abroad. My life
became much more interesting and vibrant, and I set to writing
the remainder of this book, as well as re-writing bits that I was
no longer content with. Somewhere in the last week of June I had
"FastCopy" ("buffer to hard disk" option on) demolish my entire
partition that had the book's text file on it. I had a backup but
it was dated April 2nd. So I spent the time until the middle of
July working like a nut to get all of it re-written and ready to
send off.
In a weekend when Karin was away to her parents and weather
wasn't too hot, I set about finishing version 6.6. A few days
later, August 2nd 1995, it was finished indeed. There had been a
persistent bug in the link virus check when scanning a whole
partition, usually leading to a bomb crash and involuntary exit
to the desktop. As it happened, this was caused by an obscure bug
that I strongly suspect is at home either in "GfA Basic" or
GEMDOS' 'fsnext' call, causing it sometimes to specify a non-
existing file consisting solely of spaces heading off with a zero
byte. It was fixed thanks to the kind assistance of Piet van
Zanten, who allowed me to use his system on which hard disk it
occurred (it never occurred on my own). The program itself was
also improved on a few important points. The extensive system
check screen analysis algorithm was upgraded with a speed gain of
45%, incidentally bringing to light that some viruses really
ought to have been recognised more properly (which consequently
they were). Also, most bootsector virus check dialogs displaying
some kind of result had a "look at it" button added, so
bootsectors could now usually also be looked at when known
programs were found on them - including viruses.
Version 6.7, released on November 5th 1995, was once more
delayed. I had spent a lot of time writing my MA thesis so that I
would finally be able to graduate before the end of the year.
Although I had only amassed half a year's delay, it seemed like I
had been studying English forever and I really wanted to round
things off. I had my eyes set on a second-phase studies to become
qualified as a teacher of English for secondary school. I wanted
to start in January. Because the previous version had seen a
major overhaul in the system status screen recognition routines,
various small bugs had entered in that particular section of the
program. Most of them were sorted out in this version. Besides
that, I had also paid a vision to the Dutch distributors of the
C-Lab Falcons (Mk I and Mk II) so that it could be ascertained
that the program ran bug-free on these fringe systrems
On 4 February 1996, version 6.8 was released. It had not been
changed much when compared with the previous version; as a matter
of fact, the only change was that the system status check was now
updated to support the "Magic" multi-tasking Operating System
without crashing.
And with that ends the history of the "Ultimate Virus Killer" as
far as it's covered in this book.