Evolutionary Virus Propogation Technique
Evolutionary Virus Propogation Technique
Hey! First article, kind of a mix between a tutorial + idea, it shows the implementation
of a propagation technique. These techniques are used in biology and also Artificial
Intelligence. The virus evolves, you can say the species learns because generally only
fit entities will survive.
I want to apologise for any mistakes I have made, and any short sighted errors. Also,
sorry for the language, I'm writing many reports for school and the "I'm so smart I can
excrete through my mouth" attitude they like to see in reports sometimes leaks, I should
look for a plumber but I don't wish to find a cock ;)
No code is found here, such a project can become huge and I have school.
General Technique Methods
There are two paths available upon planning to include such a technique in your virus,
01) include a dissassembler and assembler;
02) perform all operations relevant to the process at opcode level.
* Table of Procedures
* Table of Macros
The structure of the virus is very important, though not for the first generation!
Through coding,we must be careful to place introns throughout the code. Introns are
very useful pieces of code, in biology they are found on the DNA double helix, as are
exons, but introns are special in that if placed in the correct places, they can provide
the best possible chance for recombination.
For this, I suggest each ret instruction be thought of as an intron. This makes it so
that each procedure is effectly surrounded by an intron and we can then prevent each
procedure from being broken apart, also it makes searching for the intron quicker :)
Another method is to preserve tables of routines.
Having each procedure unbreakable is also a point of interest! By providing scope to
the evolutionary process, we provide context. Context is important because we wish to
retain functionality of the virus, since the virus is not biological we must remember
this! A biological organism is prevented from destroying its structure completely,
though it is able to change attributes of each component.
General Propogation Method
The first generation virus shall be a single program, due to this fact, a form of
binary fission will be required to allow the program to propogate. It's important to
note that binary fission is pretty much dependent upon mutation for any changes to occur
at the genetic level.
Stage One: VirusA + Binary fission = VirusB
Procedures Tables: VirusA VirusB
Macro Tables: VirusA VirusB
Once we have obtained our offsprings macro's, we must now mutate the lil critters!
There are several methods to mutate, and any method is as good as the rest, it is
important to note that the following may be occur:
* Instruction replacement
* Junk Insertation
* Macro Argument mutation
There is a fair amount of work to do during mutation!
It should be noted that VirusA does contain a communicative system, and so all spawns
of VirusA unless a tragic mutation occurs :)
Now incestuous relations between VirusA and VirusB may occur! :( If they can't find
each other, they perform binary fission again, and so our little population looks like
VirusA, VirusB, VirusA1,VirusB1
The names are just to tell them apart.
If they do find each other, a new stage *may* be utilised.
* Selection Selection
This is implementation dependent, but for this example, we can
say that the virus which initiates contact shall be considered
the dominant entity. The dominant entity shall inspect the
recessive entity in order to obtain information regarding it's
size and other such features which may help their offspring in
reproducing, and generally surviving.
Once an appropriate mate is found, genetic code is required to be injected into the
dominant virus, no facial sprays are permitted, its a waste of genetic code! This is
where the scope of the method we use comes into play. For this sake we can say that we
operate on asm level.
Procedures Tables:Dominant Recessive
If RN >0, take Dominant, else take Recessive. With random number sequence: 0,1,1,0 we
Offspring Procedure Table:
Just imagine if each procedure performed the same task, in radically different ways :)
The problem with this is variables and memory requirements of each procedure. It is much
easier to deal with this dynamically in asm I think.
Now we have our procedures, so what! same overall concept, different process. Well at
first, it's not a different process unless mutation occurs and well, mutation is a
dangerous unpredictable can of tuna! So we have performed recombination on the
procedures, at this point biology kicks in with mutation, but we don't want to rely on
mutation to increase survivability of our children, so we may go to round two of
recombination, though this time at a lower level, the instructions.
Instructions though are hard to perform recombination on since they're either junk
instructions or they perform a required function, so i suggest using macros to group
together instructions which require on each other.
The important thing to note with macro's is that we may perform overloading, and also
that macros will drop excessive arguments.
Macro Tables: Dominant Recessive
The same random number routine applies to these sets of macros.
Now our baby is ready!
Note that dependent on which level of abstraction we're working on, it may be necessary
to ensure that tables of macro's and procedures are kept up-to-date.
I hope you're curious as to why i say these things ;p
To ask why to all of the above is to really question how we can get the virus to remain
lively, and not lame. We don't want to cripple them, in fact what we really want is to
breed strong successful variants that cause the species on the whole to be genetically
rich - this will mean that our virus *species* may be more immune to the evil av (a
cave dwelling troll).
To ensure we have well formed viruses, we must ensure that there remains context,
although context exists in small quantities in programming languages, we're operating
on *functionality* and so we must provide context to each chunk of functionality at a
low level (macros). Though, this is not enough, consider a macro combination:
Our little friends get mutated (not into corporate top dogs, thankfully..) and now our
macro combination reads:
If these were all originated the same routine, this may be acceptable, but with multiple
routines we have ourselves a little riot. So we must provide context at the macro level
(using routines), and the instruction level (using macro's).
But why macro's? Well I guess you can hard code a instruction table which lists
instruction variants, and then add the setting up that's required, but this is quite
expensive. Infact the whole process is expensive in comparison to other propogation
You should think that this is just a metamorphic design, and I say nay. Metamorphic
viruses are always different, even successful variants are different, and this is I
believe the downfall of metamorphic viruses. No strong code is reserved. With this
technique, characteristics of the virus that survive belong to the virus with the best
method of obscurity, propogation, and/or anti-removal tactics . Also, although the
number of variants is incredibly high in metamorphic viruses because each is unique, the
strengths of the species is effectively diluted.
There are weaknesses with this method though. The population of viruses shall die out
if there isn't enough of an initial population, though this is dependent on luck on
entry to a new system, generally speaking, a larger, more genetically rich initial
population shall survive better.
Another weakness is that the virus species takes a long time to generate mutations.
* I'm aware SPTH (hello sir!) has documented this kind of idea, these methods have been
used in Artifical Intelligence for a long time.
* I'm aware that several chunks of functionality are used already in many metamorphic
* This method is applied to viruses, as far as I know, no one has actually thought or
documented the above technique before. If you have, hi-diddly-ho :)
I can think of one thing to say the puts me on paper, it's from a famous speech, i can't
remember by who though! It goes something like:
I hope this inspires someone, if just one.