--==< Retro the easy way. >==--

                         By MidNyte, February 2000



  What is a Retro-virus?
-------------------------

  A Retro-virus  is  any  virus  that  attacks  antivirus  programs,  whether
generically or just specific programs. It is generally used to disable or fool
one or more of the popular antivirus programs.  For instance,  a certain virus
will detect if  a  certain on-access scanner is in memory,  and will issue the
correct call to shut it down if it is. Another will patch the resident part of
the scanner that decides whether to scan a file or not and makes it decide not
to in all cases.  These are very useful functions,  but  if  you're not of the
ability to be able to work out these methods for yourself,  you  are left with
the choice of: leaving retro-functions out of your virus,  using other peoples
routines (which are therefor not new)  or  trying something different. That is
what this tutorial  is  about,  a  few  simple  ideas  that  will  give  basic
retro-functionality without the need to be too far advanced in coding. All you
need is some basic anti-emulation skills.



  What's the theory?
---------------------

  So how do we get Retro without learning it all? Basically  we find ways  to
annoy the user so much that he does the job of disabling the antivirus program
for us.  If  we  slow  him down when he scans he will probably eventually only
scan overnight, giving us a day to spread.  If  we  make  the program crash he
probably won't bother scanning it again, he'll just add it to the ignore list.
(It's not that uncommon to find a  file that can't be scanned without crashing
on a Microsoft machine :)




  How do we implement it?
--------------------------

  You remember reading that  a  good emulator will  save  it's  place when it
finds a decision-based jump? That way, if the code does a check  of  something
and then quits if the condition is met,  the  emulator  can  just  go back and
pretend the condition  wasn't  met  and see  what  it  can find down the other
branch of the program.  This  is  to  defeat  the  technique  of quitting when
finding  an  emulator.   How  about  we  stop  that?   How  about  we  do  our
anti-emulation bit and then  test  it,  but if we're being emulated instead of
just quitting, we crash the program?  Or  better still, if we're on a pentium,
why not just hang the machine? It's what the 'foof' bug is there for :) If the
machine hangs,  the  antivirus program has no chance to return to the jump and
try the other branch and the user will probably not bother scanning it  again.
If he does,  the  same thing will happen again and again,  the user will never
get a complete scan. Here's  a  rough guide to the code needed,  assuming that
you have in place a suitable emulation-detection routine:


  cmp ax,028h                  ;our test for emulation
  je not_emulated              ;jump if equal
  db 0F0h,00Fh,0C7h,0C8h       ;this will hang most pentium machines, it's
                               ;known as the 'foof bug' for obvious reasons.

not_emulated:                   ;here we are safe from the AV program


  How many end users are going to restart  the computer and try scanning that
file again when the last time it hung the computer?  In  the  Microsoft age of
idiot-friendly operating systems, not many. If they don't know what's going on
and the machine hangs, they just won't do it again.  If  they  do  once,  they
won't twice.  Take  the  virus hoax emails that constantly do the rounds, most
people know better  to  respond and forward the mail,   but the fact that they
carry on spreading shows just how many  idiots  there  are  out  there who are
capable (just about) of using  a  computer.  These are the people who will not
scan your file but simply add it to the ignore list,  leaving  it  to go about
it's business.

  Another method is the time wasted method.  Again it's down  to annoying the
user so much they don't bother scanning. If you can go round enough loops when
you find emulation that the scanner takes minutes just to scan one file,   the
scanner will probably only be  run overnight and taken off constant background
monitoring. That gives you a day to spread, and spread un-noticed.




  Contact
----------

  Comments/questions/suggestions/bug reports/etc. are welcomed as always,  as
long as it is kept reasonable.
                                                                    - MidNyte



 As always, I welcome ANY feedback, good or bad, as long as it is reasonable.

|  [email protected] | www.coderz.org/midnyte | www.shadowvx.com/midnyte  |