[comp.sys.ibm.pc] FIGHTING THE VIRUS

mcgraw@sunspot.UUCP (Robert McGraw) (03/01/88)

Here is a suggestion in fighting the common virus.

1. make a test directory and keep a copy of COMMAND.COM plus (optional)any
other .exe, .com programs that you know to be free of the virus i.e.
programs from the original disketts.
 
2. write a simple test program and make into a .com and store two
copies in the test directory you created above (obviously under
different names). You know these do not have the virus.
 
3. create a  .BAT file that will:
 
	a.	execute one of your test programs
	b.	run a DIFF on the COMMAND.COM in your root directory
and your test directory, run a DIFF on your two test programs in your
test directory, run a
diff on your other .exe/.com programs that you have in the test directory.
 
4. run the above .BAT file at bootup, shutdown, and/or after you have
downloaded a file from a BBS and executed the program.          

If any differences are indicated your disk might have a cold. I am not
sure if certain .exe/.com programs might get changed when you
run a reconfigure on the software package so you will have to keep
this in mind. 

This system will check if COMMAND.COM gets modified but does not change
size and checks .exe/.com files that get modified when executed. 

I use the DIFF in the MKS package and it is fast. I am sure there are
DIFF programs in the PD if you don't have one.
 
This is a quick but dirty way of checking for the bugs that
have been going around. The good point to this system is that you know
the programs you are checking against are free of the virus since you
copied them from the original diskette. If you really feel insecure you
could make a known difference in your test program to check that you
DIFF program is working correctly. OH WELL..
-- 
-Robert P. McGraw, Jr.	National Solar Observatory SPO
 USPS Mail:		Box 62, Sunspot, NM 88349 USA
 Phone:			(505)434-1390, FTS: 571-0232
 Internet:		rmcgraw@noao.arizona.edu
 SPAN/HEPNET:		DRACO::RMCGRAW		[DRACO=5356]
 UUCP:			{arizona,decvax,hao,ihnp4},noao!sunspot!rmcgraw

mollusk@squid.UUCP (03/02/88)

From squid!mollusk Wed Mar 02 21:00 CDT 1988 remote from occrsh
Subject: re: FIGHTING THE VIRUS

* Send replies to address in signature below, unless you're so hungry for
* human contact that bounced mail is better than no mail

>3. create a  .BAT file that will:
>
>        a.      execute one of your test programs
>        b.      run a DIFF on the COMMAND.COM in your root directory
>and your test directory, run a DIFF on your two test programs in your
>test directory, run a
>diff on your other .exe/.com programs that you have in the test directory.

Naw, too much work. Much easier, possibly more effective:

 Strip the crc check code out of something reasonable, and make a program
 that crc checks all the executables and device drivers, and stores the
 results in a table, which is checked every time the program is run. Maybe
 the first thing it should do, the very first time it is run, is to crc
 itself, and write that number into itself, then check it every time after
 that. The program should be distributed in SOURCE form ONLY! Ya gotta be
 shy a few marbles to run any exe from an anonymous source like a
 newsgroup, these days. It would be an IDEAL place to spread a virus; too
 many trusting users out there. If you didn't compile it, don't run it!

 Here's something to start with; if someone makes something good out of
 this, please send me a copy.

/*** ***/

#include <stdio.h>
#include <fcntl.h>

/* crc table and routine taken from BENCODE/BDECODE */

#define CRC(crc, c)      crc = (crc >> 8) ^ crctab[(crc^c) & 0xff]
/* generated using the CRC-16 polynomial x^16 + x^15 + x^2 + 1 = 0120001 */
short crctab[256] = {
  0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,
  0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440,
  0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40,
  0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841,
  0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40,
  0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41,
  0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,
  0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040,
  0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240,
  0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441,
  0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
  0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840,
  0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41,
  0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
  0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640,
  0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041,
  0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240,
  0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441,
  0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41,
  0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840,
  0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,
  0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
  0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640,
  0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041,
  0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241,
  0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440,
  0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40,
  0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
  0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40,
  0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
  0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,
  0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040
};

main( int argc, char *argv[] )
{
  char buff[4096] ;
  int Handle, crc, cnt, x ;

  crc = 0 ;

  if( argc != 2 )
  {
    puts( "Filename?" ) ;
    exit( 0 ) ;
  }
                                  /*  vvv---------MSDOS nonsense */
  Handle = open( argv[1], O_RDONLY | O_BINARY ) ;
  if( -1 == Handle )
  {
    perror( argv[1] ) ;
    exit( 1 ) ;
  }

  while( cnt = read( Handle, buff, 4096 ) )
  {
    for( x=0; x<cnt; ++x )
      CRC( crc, buff[x] ) ;
  }

  printf( "%-12s %x\n", argv[1], crc & 0xffff ) ;
}

/*** ***/

 /\_______ __________________________
(_)\avid   ihnp4!occrsh!squid!mollusk  If I'm not dead, then what am I do-
  | )----- 1:19/1  vox=<405> 848-8868  ing here? And if I'm dead, then why
  |/rexler POB 1214, Bethany OK 73008  do I have to go to the bathroom?

hst@mhres.mh.nl (Klaas Hemstra) (03/02/88)

In article <571@sunspot.UUCP> mcgraw@noao.UUCP (Robert McGraw) writes:
>Here is a suggestion in fighting the common virus.
>
>1. make a test directory and keep a copy of COMMAND.COM plus (optional)any
>other .exe, .com programs that you know to be free of the virus i.e.
>programs from the original disketts.
> 

etc. stuff deleted.


>-Robert P. McGraw, Jr.	National Solar Observatory SPO
> USPS Mail:		Box 62, Sunspot, NM 88349 USA
> Phone:			(505)434-1390, FTS: 571-0232
> Internet:		rmcgraw@noao.arizona.edu
> SPAN/HEPNET:		DRACO::RMCGRAW		[DRACO=5356]
> UUCP:			{arizona,decvax,hao,ihnp4},noao!sunspot!rmcgraw

A very good idea. Specially if the copy of COMMAND.COM does not have the .COM
extension. etc.

But how about the two hidden DOS files (IBMBIO.COM & IBMDOS.COM) ?
Shouldn't you protect these files too ?

My opinion is YES.
That would make things a little less simple but still possible without to much
trouble. You have to make your own diff program for that, or have a diff
program that also reads hidden files etc.



-- 
Klaas Hemstra  (hst@mh.nl)                   |    /  / ,~~~  ~~/~~
uucp: ..{uunet!}mcvax!mh.nl!hst              |   /--/  `-,    /  ___  |_/ |__|
Multihouse N.V., Gouda, the Netherlands      |  /  / ___/    /   ---  | \ |  | 

campbell@maynard.BSW.COM (Larry Campbell) (03/03/88)

In article <571@sunspot.UUCP> mcgraw@noao.UUCP (Robert McGraw) writes:
<>Here is a suggestion in fighting the common virus.

Here is a better suggestion, which takes much less work and is more
airtight.

Never run free software on your machine, unless it came in source form,
and you inspected it before compiling it.

I wouldn't touch binaries with a ten-foot pole.
-- 
Larry Campbell                                The Boston Software Works, Inc.
Internet: campbell@maynard.bsw.com          120 Fulton Street, Boston MA 02109
uucp: {husc6,mirror,think}!maynard!campbell         +1 617 367 6846