Language: Java Author: Mark LaDue Note: This example writes itself to a file. The author describes this as prototypical virus behavior...has anyone ever heard of a virus using these techniques? /* Dupe.java by Mark D. LaDue */ /* December 18, 1996 */ /* Copyright (c) 1996 Mark D. LaDue You may study, use, modify, and distribute this example for any purpose. This example is provided WITHOUT WARRANTY either expressed or implied. */ /* This Java application is an example of a self-reproducing program, and as such it exhibits prototypical virus-like behavior. To test it, at the command line proceed as follows: 1. Type "java Dupe.java" to get Dupe.class. 2. Move Dupe.class to an entirely different directory. 3. In that different directory type "java Dupe" to run the application. 4. Inspect the resulting output Dupe.java, which will be exactly the same as the original. In addition to reproducing itself, the application echoes a wisecrack to the standard output. */ import java.io.*; class Dupe { public static void main (String[] argv) { int[] src1 = { 47, 42, 32, 68, 117, 112, 101, 46, 106, 97, 118, 97, 32, 98, 121, 32, 77, 97, 114, 107, 32, 68, 46, 32, 76, 97, 68, 117, 101, 32, 42, 47, 10, 10, 47, 42, 32, 68, 101, 99, 101, 109, 98, 101, 114, 32, 49, 56, 44, 32, 49, 57, 57, 54, 32, 42, 47, 10, 10, 47, 42, 32, 32, 67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 99, 41, 32, 49, 57, 57, 54, 32, 77, 97, 114, 107, 32, 68, 46, 32, 76, 97, 68, 117, 101, 10, 32, 32, 32, 32, 89, 111, 117, 32, 109, 97, 121, 32, 115, 116, 117, 100, 121, 44, 32, 117, 115, 101, 44, 32, 109, 111, 100, 105, 102, 121, 44, 32, 97, 110, 100, 32, 100, 105, 115, 116, 114, 105, 98, 117, 116, 101, 32, 116, 104, 105, 115, 32, 101, 120, 97, 109, 112, 108, 101, 32, 102, 111, 114, 32, 97, 110, 121, 32, 112, 117, 114, 112, 111, 115, 101, 46, 10, 32, 32, 32, 32, 84, 104, 105, 115, 32, 101, 120, 97, 109, 112, 108, 101, 32, 105, 115, 32, 112, 114, 111, 118, 105, 100, 101, 100, 32, 87, 73, 84, 72, 79, 85, 84, 32, 87, 65, 82, 82, 65, 78, 84, 89, 32, 101, 105, 116, 104, 101, 114, 32, 101, 120, 112, 114, 101, 115, 115, 101, 100, 32, 111, 114, 32, 105, 109, 112, 108, 105, 101, 100, 46, 32, 32, 42, 47, 10, 10, 47, 42, 32, 32, 84, 104, 105, 115, 32, 74, 97, 118, 97, 32, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 32, 105, 115, 32, 97, 110, 32, 101, 120, 97, 109, 112, 108, 101, 32, 111, 102, 32, 97, 32, 115, 101, 108, 102, 45, 114, 101, 112, 114, 111, 100, 117, 99, 105, 110, 103, 32, 112, 114, 111, 103, 114, 97, 109, 44, 32, 97, 110, 100, 10, 32, 32, 32, 32, 97, 115, 32, 115, 117, 99, 104, 32, 105, 116, 32, 101, 120, 104, 105, 98, 105, 116, 115, 32, 112, 114, 111, 116, 111, 116, 121, 112, 105, 99, 97, 108, 32, 118, 105, 114, 117, 115, 45, 108, 105, 107, 101, 32, 98, 101, 104, 97, 118, 105, 111, 114, 46, 32, 32, 84, 111, 32, 116, 101, 115, 116, 32, 105, 116, 44, 10, 32, 32, 32, 32, 97, 116, 32, 116, 104, 101, 32, 99, 111, 109, 109, 97, 110, 100, 32, 108, 105, 110, 101, 32, 112, 114, 111, 99, 101, 101, 100, 32, 97, 115, 32, 102, 111, 108, 108, 111, 119, 115, 58, 10, 10, 32, 32, 32, 32, 49, 46, 32, 84, 121, 112, 101, 32, 34, 106, 97, 118, 97, 32, 68, 117, 112, 101, 46, 106, 97, 118, 97, 34, 32, 116, 111, 32, 103, 101, 116, 32, 68, 117, 112, 101, 46, 99, 108, 97, 115, 115, 46, 10, 32, 32, 32, 32, 50, 46, 32, 77, 111, 118, 101, 32, 68, 117, 112, 101, 46, 99, 108, 97, 115, 115, 32, 116, 111, 32, 97, 110, 32, 101, 110, 116, 105, 114, 101, 108, 121, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 100, 105, 114, 101, 99, 116, 111, 114, 121, 46, 10, 32, 32, 32, 32, 51, 46, 32, 73, 110, 32, 116, 104, 97, 116, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 32, 100, 105, 114, 101, 99, 116, 111, 114, 121, 32, 116, 121, 112, 101, 32, 34, 106, 97, 118, 97, 32, 68, 117, 112, 101, 34, 32, 116, 111, 32, 114, 117, 110, 32, 116, 104, 101, 32, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 46, 10, 32, 32, 32, 32, 52, 46, 32, 73, 110, 115, 112, 101, 99, 116, 32, 116, 104, 101, 32, 114, 101, 115, 117, 108, 116, 105, 110, 103, 32, 111, 117, 116, 112, 117, 116, 32, 68, 117, 112, 101, 46, 106, 97, 118, 97, 44, 32, 119, 104, 105, 99, 104, 32, 119, 105, 108, 108, 32, 98, 101, 32, 101, 120, 97, 99, 116, 108, 121, 32, 116, 104, 101, 10, 32, 32, 32, 32, 32, 32, 32, 115, 97, 109, 101, 32, 97, 115, 32, 116, 104, 101, 32, 111, 114, 105, 103, 105, 110, 97, 108, 46, 10, 10, 32, 32, 32, 32, 73, 110, 32, 97, 100, 100, 105, 116, 105, 111, 110, 32, 116, 111, 32, 114, 101, 112, 114, 111, 100, 117, 99, 105, 110, 103, 32, 105, 116, 115, 101, 108, 102, 44, 32, 116, 104, 101, 32, 97, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 32, 101, 99, 104, 111, 101, 115, 32, 97, 32, 119, 105, 115, 101, 99, 114, 97, 99, 107, 10, 32, 32, 32, 32, 116, 111, 32, 116, 104, 101, 32, 115, 116, 97, 110, 100, 97, 114, 100, 32, 111, 117, 116, 112, 117, 116, 46, 32, 32, 42, 47, 10, 10, 105, 109, 112, 111, 114, 116, 32, 106, 97, 118, 97, 46, 105, 111, 46, 42, 59, 10, 99, 108, 97, 115, 115, 32, 68, 117, 112, 101, 32, 123, 10, 32, 32, 32, 32, 112, 117, 98, 108, 105, 99, 32, 115, 116, 97, 116, 105, 99, 32, 118, 111, 105, 100, 32, 109, 97, 105, 110, 32, 40, 83, 116, 114, 105, 110, 103, 91, 93, 32, 97, 114, 103, 118, 41, 32, 123, 10, }; int[] src2 = { 32, 32, 32, 32, 32, 32, 32, 32, 98, 121, 116, 101, 91, 93, 32, 98, 101, 103, 105, 110, 110, 105, 110, 103, 32, 61, 32, 110, 101, 119, 32, 98, 121, 116, 101, 91, 115, 114, 99, 49, 46, 108, 101, 110, 103, 116, 104, 93, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 105, 110, 116, 32, 105, 61, 48, 59, 32, 105, 60, 115, 114, 99, 49, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 98, 101, 103, 105, 110, 110, 105, 110, 103, 91, 105, 93, 32, 61, 32, 40, 98, 121, 116, 101, 41, 32, 115, 114, 99, 49, 91, 105, 93, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 32, 32, 32, 32, 32, 32, 32, 32, 116, 114, 121, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 80, 114, 105, 110, 116, 83, 116, 114, 101, 97, 109, 32, 111, 117, 116, 101, 114, 32, 61, 32, 110, 101, 119, 32, 80, 114, 105, 110, 116, 83, 116, 114, 101, 97, 109, 40, 110, 101, 119, 32, 70, 105, 108, 101, 79, 117, 116, 112, 117, 116, 83, 116, 114, 101, 97, 109, 40, 34, 68, 117, 112, 101, 46, 106, 97, 118, 97, 34, 41, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 98, 101, 103, 105, 110, 110, 105, 110, 103, 44, 32, 48, 44, 32, 98, 101, 103, 105, 110, 110, 105, 110, 103, 46, 108, 101, 110, 103, 116, 104, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 48, 53, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 49, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 49, 54, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 57, 49, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 57, 51, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 51, 50, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 49, 53, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 49, 52, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 57, 57, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 52, 57, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 51, 50, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 54, 49, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 51, 50, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 50, 51, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 105, 110, 116, 32, 105, 61, 48, 59, 32, 105, 60, 115, 114, 99, 49, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 112, 114, 105, 110, 116, 40, 115, 114, 99, 49, 91, 105, 93, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 52, 52, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 50, 53, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 53, 57, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 121, 116, 101, 91, 93, 32, 101, 110, 100, 32, 61, 32, 110, 101, 119, 32, 98, 121, 116, 101, 91, 115, 114, 99, 50, 46, 108, 101, 110, 103, 116, 104, 93, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 105, 110, 116, 32, 105, 61, 48, 59, 32, 105, 60, 115, 114, 99, 50, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 110, 100, 91, 105, 93, 32, 61, 32, 40, 98, 121, 116, 101, 41, 32, 115, 114, 99, 50, 91, 105, 93, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 48, 53, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 49, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 49, 54, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 57, 49, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 57, 51, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 51, 50, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 49, 53, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 49, 52, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 57, 57, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 53, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 51, 50, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 54, 49, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 51, 50, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 50, 51, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 105, 110, 116, 32, 105, 61, 48, 59, 32, 105, 60, 115, 114, 99, 50, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 112, 114, 105, 110, 116, 40, 115, 114, 99, 50, 91, 105, 93, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 52, 52, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 50, 53, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 53, 57, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 49, 48, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 119, 114, 105, 116, 101, 40, 101, 110, 100, 44, 32, 48, 44, 32, 101, 110, 100, 46, 108, 101, 110, 103, 116, 104, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 111, 117, 116, 101, 114, 46, 99, 108, 111, 115, 101, 40, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 125, 32, 99, 97, 116, 99, 104, 32, 40, 73, 79, 69, 120, 99, 101, 112, 116, 105, 111, 110, 32, 105, 111, 101, 41, 32, 123, 125, 10, 32, 32, 32, 32, 32, 32, 32, 32, 83, 121, 115, 116, 101, 109, 46, 111, 117, 116, 46, 112, 114, 105, 110, 116, 108, 110, 40, 34, 85, 78, 73, 88, 32, 97, 110, 100, 32, 74, 97, 118, 97, 32, 118, 105, 114, 117, 115, 101, 115, 32, 100, 111, 32, 110, 111, 116, 32, 101, 120, 105, 115, 116, 46, 34, 41, 59, 10, 32, 32, 32, 32, 125, 10, 125, 10, }; byte[] beginning = new byte[src1.length]; for (int i=0; i