home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 25: Programming / pc_actual_25.iso / Java / InstallWizProfessionalEdition / InstallIWP.class (.txt) next >
Encoding:
Java Class File  |  2001-06-02  |  11.9 MB  |  1,023 lines

  1. import java.io.ByteArrayInputStream;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.DataOutputStream;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.FilterInputStream;
  7. import java.io.FilterOutputStream;
  8. import java.io.InputStream;
  9. import java.io.ObjectOutputStream;
  10. import java.io.RandomAccessFile;
  11. import java.lang.reflect.InvocationTargetException;
  12. import java.lang.reflect.Method;
  13. import java.net.URL;
  14. import java.util.Calendar;
  15. import java.util.Enumeration;
  16. import java.util.Hashtable;
  17. import java.util.Properties;
  18. import java.util.StringTokenizer;
  19. import java.util.Vector;
  20. import java.util.zip.ZipEntry;
  21. import java.util.zip.ZipInputStream;
  22.  
  23. public class InstallIWP extends ClassLoader {
  24.    private RandomAccessFile raf;
  25.    private Properties UTF = new Properties();
  26.    private File theFile;
  27.    private long headerStart = 0L;
  28.    private long headerEnd = 8L;
  29.    private long cpStart = 0L;
  30.    private long cpEnd = 0L;
  31.    private long codeStart = 0L;
  32.    private long codeEnd = 0L;
  33.    private long attrStart = 0L;
  34.    private long attrEnd = 0L;
  35.    private long FILENAME_START = 0L;
  36.    private long INSTALL_START = 0L;
  37.    private long INSTALL_DOT_CLASS_START = 0L;
  38.    private long INSTALL_DOT_JAVA_START = 0L;
  39.    private long FILENAME_END = 0L;
  40.    private long INSTALL_END = 0L;
  41.    private long INSTALL_DOT_CLASS_END = 0L;
  42.    private long INSTALL_DOT_JAVA_END = 0L;
  43.    private static final int CONSTANT_UTF8 = 1;
  44.    private static final int CONSTANT_UNICODE = 2;
  45.    private static final int CONSTANT_INTEGER = 3;
  46.    private static final int CONSTANT_FLOAT = 4;
  47.    private static final int CONSTANT_LONG = 5;
  48.    private static final int CONSTANT_DOUBLE = 6;
  49.    private static final int CONSTANT_CLASS = 7;
  50.    private static final int CONSTANT_STRING = 8;
  51.    private static final int CONSTANT_FIELD = 9;
  52.    private static final int CONSTANT_METHOD = 10;
  53.    private static final int CONSTANT_INTERFACEMETHOD = 11;
  54.    private static final int CONSTANT_NAMEANDTYPE = 12;
  55.    private static final int ANALYZE = 0;
  56.    private static final int OBFUSCATE = 1;
  57.    // $FF: renamed from: R java.lang.String
  58.    private static final String field_0 = "Resource";
  59.    // $FF: renamed from: C java.lang.String
  60.    private static final String field_1 = "UnityClass";
  61.    // $FF: renamed from: D java.lang.String
  62.    private static final String field_2 = "Data";
  63.    // $FF: renamed from: E java.lang.String
  64.    private static final String field_3 = "Einfo";
  65.    private static final String FILE_NAME = "LaunchInstaller";
  66.    private static boolean verbose = false;
  67.    private static boolean dump = false;
  68.    private static boolean noRun = false;
  69.    private static boolean showLoad = false;
  70.    private static String[] ARGS = new String[0];
  71.    private static String FILE = null;
  72.    private static Hashtable inners = new Hashtable();
  73.    private Vector positions = new Vector();
  74.    private Vector allClasses = new Vector();
  75.    private Hashtable rawClasses = new Hashtable();
  76.    private int exprType = 0;
  77.    private long exprInfo = 0L;
  78.    private long infoLocation = 0L;
  79.  
  80.    private InstallIWP() {
  81.       Object var1 = null;
  82.       File var2;
  83.       if (FILE == null) {
  84.          var2 = locate(this.getClass());
  85.       } else {
  86.          var2 = new File(FILE);
  87.       }
  88.  
  89.       if (var2 == null) {
  90.          System.err.println("Class will not work if you archive it.");
  91.          System.exit(0);
  92.       }
  93.  
  94.       this.theFile = var2;
  95.       if (this.theFile.exists()) {
  96.          this.snoop(this.theFile);
  97.       }
  98.    }
  99.  
  100.    private long AttributeInfo() {
  101.       long var3 = 0L;
  102.  
  103.       try {
  104.          var3 = this.raf.getFilePointer();
  105.          int var1 = this.raf.readUnsignedShort();
  106.          int var2 = this.raf.readInt();
  107.          this.raf.skipBytes(var2);
  108.       } catch (Exception var6) {
  109.          System.err.println("Error #12.1");
  110.          ((Throwable)var6).printStackTrace();
  111.       }
  112.  
  113.       return var3;
  114.    }
  115.  
  116.    private int CP_Info(int var1) {
  117.       int var2 = 0;
  118.  
  119.       try {
  120.          var2 = this.raf.readUnsignedByte();
  121.       } catch (Exception var3) {
  122.          System.err.println("This does not appear to be a class file.");
  123.          System.exit(0);
  124.       }
  125.  
  126.       switch (var2) {
  127.          case 1:
  128.          case 2:
  129.             this.doUnicode(var1);
  130.             break;
  131.          case 3:
  132.             this.doInteger();
  133.             break;
  134.          case 4:
  135.             this.doFloat();
  136.             break;
  137.          case 5:
  138.             this.doLong();
  139.             break;
  140.          case 6:
  141.             this.doDouble();
  142.             break;
  143.          case 7:
  144.             this.doClass();
  145.             break;
  146.          case 8:
  147.             this.doString();
  148.             break;
  149.          case 9:
  150.             this.doField();
  151.             break;
  152.          case 10:
  153.             this.doMethod();
  154.             break;
  155.          case 11:
  156.             this.doInterface();
  157.             break;
  158.          case 12:
  159.             this.doNAT();
  160.       }
  161.  
  162.       return var2;
  163.    }
  164.  
  165.    private void FCC() {
  166.       try {
  167.          int var1 = this.raf.readUnsignedShort();
  168.          int var2 = this.raf.readUnsignedShort();
  169.       } catch (Exception var3) {
  170.          System.err.println("Error #3");
  171.          ((Throwable)var3).printStackTrace();
  172.       }
  173.  
  174.    }
  175.  
  176.    private void FieldInfo() {
  177.       try {
  178.          int var1 = this.raf.readUnsignedShort();
  179.          int var2 = this.raf.readUnsignedShort();
  180.          int var3 = this.raf.readUnsignedShort();
  181.          int var4 = this.raf.readUnsignedShort();
  182.  
  183.          for(int var5 = 0; var5 < var4; ++var5) {
  184.             this.AttributeInfo();
  185.          }
  186.       } catch (Exception var6) {
  187.          System.err.println("Error #11");
  188.          ((Throwable)var6).printStackTrace();
  189.       }
  190.  
  191.    }
  192.  
  193.    private void MethodInfo() {
  194.       try {
  195.          int var1 = this.raf.readUnsignedShort();
  196.          int var2 = this.raf.readUnsignedShort();
  197.          int var3 = this.raf.readUnsignedShort();
  198.          int var4 = this.raf.readUnsignedShort();
  199.  
  200.          for(int var5 = 0; var5 < var4; ++var5) {
  201.             this.AttributeInfo();
  202.          }
  203.       } catch (Exception var6) {
  204.          System.err.println("Error #14");
  205.          ((Throwable)var6).printStackTrace();
  206.       }
  207.  
  208.    }
  209.  
  210.    private Class applyDefinition(String var1, boolean var2) {
  211.       byte[] var3 = (byte[])this.rawClasses.get(var1);
  212.       this.rawClasses.remove(var1);
  213.       if (var3 == null) {
  214.          return null;
  215.       } else {
  216.          Object var4 = null;
  217.  
  218.          try {
  219.             var8 = super.defineClass((String)null, var3, 0, var3.length);
  220.             if (var8 != null && var2) {
  221.                ((ClassLoader)this).resolveClass(var8);
  222.             }
  223.          } catch (ClassFormatError var6) {
  224.             System.err.println("The definition for " + var1 + " in the JAR file");
  225.             System.err.println("has a format error.");
  226.             return null;
  227.          } catch (NoClassDefFoundError var7) {
  228.             return null;
  229.          }
  230.  
  231.          if (!var8.getName().equals(var1)) {
  232.             System.err.println("\nWARNING: file name versus class name mismatch");
  233.             String var5 = var1.replace('.', '/') + ".class";
  234.             System.err.println("    JAR entry \"" + var5 + "\" was expected " + "to contain class \"" + var1 + "\"");
  235.             System.err.println("    but instead contained class \"" + var8.getName() + "\"");
  236.             System.err.println("    This may cause future class-loading problems.\n");
  237.          }
  238.  
  239.          return var8;
  240.       }
  241.    }
  242.  
  243.    public void bootstrap(File var1) {
  244.       try {
  245.          Class var16 = Class.forName("javax.swing.JComponent");
  246.       } catch (Throwable var15) {
  247.          File var2 = new File(var1, "swingall.jar");
  248.          String var3 = System.getProperty("os.name");
  249.          boolean var4 = var3.indexOf("Windows") >= 0;
  250.          String var5 = var4 ? "\"" : "";
  251.          if (var2.exists()) {
  252.             String var6 = System.getProperty("java.home");
  253.             String var7 = File.separator;
  254.             String var10 = System.getProperty("java.class.path") + File.pathSeparator + var2.getAbsolutePath() + File.pathSeparator + var6 + var7 + "lib" + "classes.zip";
  255.  
  256.             try {
  257.                Runtime var8 = Runtime.getRuntime();
  258.                Process var9 = var8.exec(var6 + var7 + "bin" + var7 + "java " + "-classpath " + var5 + var10 + var5 + " " + this.getClass().getName());
  259.                int var11 = var9.waitFor();
  260.                if (var11 == 0) {
  261.                   this.cleanup(var1);
  262.                   System.exit(0);
  263.                   return;
  264.                }
  265.             } catch (Exception var14) {
  266.             }
  267.  
  268.             try {
  269.                Runtime var17 = Runtime.getRuntime();
  270.                Process var19 = var17.exec("jview /cp:p " + var5 + var10 + var5 + " " + this.getClass().getName());
  271.                int var21 = var19.waitFor();
  272.                if (var21 == 0) {
  273.                   this.cleanup(var1);
  274.                   System.exit(0);
  275.                   return;
  276.                }
  277.             } catch (Exception var13) {
  278.             }
  279.  
  280.             try {
  281.                Runtime var18 = Runtime.getRuntime();
  282.                Process var20 = var18.exec("java -classpath " + var5 + var10 + var5 + " " + this.getClass().getName());
  283.                int var22 = var20.waitFor();
  284.                if (var22 == 0) {
  285.                   this.cleanup(var1);
  286.                   System.exit(0);
  287.                   return;
  288.                }
  289.             } catch (Exception var12) {
  290.             }
  291.  
  292.             System.err.println("Sorry. This Installer Requires JRE 1.2 or JRE 1.1+Swing1.1b3");
  293.             System.err.println("Neither was found on your system.");
  294.             this.cleanup(var1);
  295.             System.exit(0);
  296.          } else {
  297.             System.err.println("   Failed!\nSorry. This Installer Requires JRE 1.2 or JRE 1.1+Swing1.1");
  298.             System.err.println("Neither was found on your system.");
  299.             this.cleanup(var1);
  300.             System.exit(-1);
  301.          }
  302.  
  303.       }
  304.    }
  305.  
  306.    private void cleanup(File var1) {
  307.       (new File(var1, "swingall.jar")).delete();
  308.    }
  309.  
  310.    public void defineClassFromBytes(String var1, byte[] var2) {
  311.       this.rawClasses.put(var1, var2);
  312.    }
  313.  
  314.    private void doClass() {
  315.       try {
  316.          int var1 = this.raf.readUnsignedShort();
  317.       } catch (Exception var3) {
  318.          System.err.println("Error #2");
  319.          ((Throwable)var3).printStackTrace();
  320.       }
  321.  
  322.    }
  323.  
  324.    private void doDouble() {
  325.       try {
  326.          double var1 = this.raf.readDouble();
  327.       } catch (Exception var4) {
  328.          System.err.println("Error #8");
  329.          ((Throwable)var4).printStackTrace();
  330.       }
  331.  
  332.    }
  333.  
  334.    private void doField() {
  335.       this.FCC();
  336.    }
  337.  
  338.    private void doFloat() {
  339.       try {
  340.          float var1 = this.raf.readFloat();
  341.       } catch (Exception var3) {
  342.          System.err.println("Error #6");
  343.          ((Throwable)var3).printStackTrace();
  344.       }
  345.  
  346.    }
  347.  
  348.    private void doInteger() {
  349.       try {
  350.          int var1 = this.raf.readInt();
  351.       } catch (Exception var3) {
  352.          System.err.println("Error #5");
  353.          ((Throwable)var3).printStackTrace();
  354.       }
  355.  
  356.    }
  357.  
  358.    private void doInterface() {
  359.       this.FCC();
  360.    }
  361.  
  362.    private void doLong() {
  363.       try {
  364.          long var1 = this.raf.readLong();
  365.       } catch (Exception var4) {
  366.          System.err.println("Error #7");
  367.          ((Throwable)var4).printStackTrace();
  368.       }
  369.  
  370.    }
  371.  
  372.    private void doMethod() {
  373.       this.FCC();
  374.    }
  375.  
  376.    private void doNAT() {
  377.       try {
  378.          int var1 = this.raf.readUnsignedShort();
  379.          int var2 = this.raf.readUnsignedShort();
  380.       } catch (Exception var3) {
  381.          System.err.println("Error #9");
  382.          ((Throwable)var3).printStackTrace();
  383.       }
  384.  
  385.    }
  386.  
  387.    private void doString() {
  388.       try {
  389.          int var1 = this.raf.readUnsignedShort();
  390.       } catch (Exception var3) {
  391.          System.err.println("Error #4");
  392.          ((Throwable)var3).printStackTrace();
  393.       }
  394.  
  395.    }
  396.  
  397.    private void doUnicode(int var1) {
  398.       try {
  399.          long var2 = this.raf.getFilePointer();
  400.          String var4 = this.raf.readUTF();
  401.          long var5 = this.raf.getFilePointer();
  402.          if (var4.equals("LaunchInstaller")) {
  403.             this.FILENAME_START = var2;
  404.             this.FILENAME_END = var5;
  405.          } else if (var4.equals("InstallIWP")) {
  406.             this.INSTALL_START = var2;
  407.             this.INSTALL_END = var5;
  408.          } else if (var4.equals("InstallIWP.class")) {
  409.             this.INSTALL_DOT_CLASS_START = var2;
  410.             this.INSTALL_DOT_CLASS_END = var5;
  411.          } else if (var4.equals("InstallIWP.java")) {
  412.             this.INSTALL_DOT_JAVA_START = var2;
  413.             this.INSTALL_DOT_JAVA_END = var5;
  414.          }
  415.  
  416.          this.UTF.put(String.valueOf(var1), var4);
  417.       } catch (Exception var7) {
  418.          System.err.println("Error #10");
  419.          ((Throwable)var7).printStackTrace();
  420.       }
  421.  
  422.    }
  423.  
  424.    private void dumpData(RandomAccessFile var1) {
  425.       try {
  426.          System.out.println("Starting dump");
  427.          File var2 = new File("cp1.dat");
  428.          File var3 = new File("cp2.dat");
  429.          File var4 = new File("cp3.dat");
  430.          File var5 = new File("cp4.dat");
  431.          File var6 = new File("cp5.dat");
  432.          File var7 = new File("head.dat");
  433.          File var8 = new File("code.dat");
  434.          File var9 = new File("attr.dat");
  435.          int var10 = 0;
  436.          byte[] var11 = new byte[(int)(this.FILENAME_START - this.cpStart)];
  437.          byte[] var12 = new byte[(int)(this.INSTALL_START - this.FILENAME_END)];
  438.          byte[] var13 = new byte[(int)(this.INSTALL_DOT_CLASS_START - this.INSTALL_END)];
  439.          byte[] var14 = new byte[(int)(this.INSTALL_DOT_JAVA_START - this.INSTALL_DOT_CLASS_END)];
  440.          byte[] var15 = new byte[(int)(this.cpEnd - this.INSTALL_DOT_JAVA_END)];
  441.          byte[] var16 = new byte[(int)(this.headerEnd - this.headerStart)];
  442.          byte[] var17 = new byte[(int)(this.codeEnd - this.codeStart)];
  443.          byte[] var18 = new byte[(int)(this.attrEnd - this.attrStart)];
  444.          System.out.println("cpStart " + this.cpStart);
  445.          System.out.println("FILENAME_START " + this.FILENAME_START);
  446.          System.out.println("FILENAME_END " + this.FILENAME_END);
  447.          System.out.println("INSTALL_START " + this.INSTALL_START);
  448.          System.out.println("INSTALL_END " + this.INSTALL_END);
  449.          System.out.println("INSTALL_DOT_CLASS_START " + this.INSTALL_DOT_CLASS_START);
  450.          System.out.println("INSTALL_DOT_CLASS_END " + this.INSTALL_DOT_CLASS_END);
  451.          System.out.println("INSTALL_DOT_JAVA_START " + this.INSTALL_DOT_JAVA_START);
  452.          System.out.println("INSTALL_DOT_JAVA_END " + this.INSTALL_DOT_JAVA_END);
  453.          System.out.println("cpEnd " + this.cpEnd);
  454.          System.out.println("");
  455.          System.out.println("headerStart " + this.headerStart);
  456.          System.out.println("headerEnd " + this.headerEnd);
  457.          System.out.println("codeStart " + this.codeStart);
  458.          System.out.println("codeEnd " + this.codeEnd);
  459.          System.out.println("attrStart " + this.attrStart);
  460.          System.out.println("attrEnd " + this.attrEnd);
  461.          System.out.println("");
  462.          System.out.println("byte[] cpData1 = new byte[(int) (" + (this.FILENAME_START - this.cpStart) + ")];");
  463.          System.out.println("byte[] cpData2 = new byte[(int) (" + (this.INSTALL_START - this.FILENAME_END) + ")];");
  464.          System.out.println("byte[] cpData3 = new byte[(int) (" + (this.INSTALL_DOT_CLASS_START - this.INSTALL_END) + ")];");
  465.          System.out.println("byte[] cpData4 = new byte[(int) (" + (this.INSTALL_DOT_JAVA_START - this.INSTALL_DOT_CLASS_END) + ")];");
  466.          System.out.println("byte[] cpData5 = new byte[(int) (" + (this.cpEnd - this.INSTALL_DOT_JAVA_END) + ")];");
  467.          System.out.println("byte[] headerData = new byte[(int) (" + (this.headerEnd - this.headerStart) + ")];");
  468.          System.out.println("byte[] codeData = new byte[(int) (" + (this.codeEnd - this.codeStart) + ")];");
  469.          System.out.println("byte[] attrData = new byte[(int) (" + (this.attrEnd - this.attrStart) + ")];");
  470.          var1.seek(this.headerStart);
  471.          var10 = 0;
  472.  
  473.          for(long var19 = this.headerStart; var19 < this.headerEnd; ++var19) {
  474.             var16[var10++] = var1.readByte();
  475.          }
  476.  
  477.          var1.seek(this.cpStart);
  478.  
  479.          for(int var30 = 0; var1.getFilePointer() < this.FILENAME_START; var11[var30++] = var1.readByte()) {
  480.          }
  481.  
  482.          var1.seek(this.FILENAME_END);
  483.  
  484.          for(int var31 = 0; var1.getFilePointer() < this.INSTALL_START; var12[var31++] = var1.readByte()) {
  485.          }
  486.  
  487.          var1.seek(this.INSTALL_END);
  488.  
  489.          for(int var32 = 0; var1.getFilePointer() < this.INSTALL_DOT_CLASS_START; var13[var32++] = var1.readByte()) {
  490.          }
  491.  
  492.          var1.seek(this.INSTALL_DOT_CLASS_END);
  493.  
  494.          for(int var33 = 0; var1.getFilePointer() < this.INSTALL_DOT_JAVA_START; var14[var33++] = var1.readByte()) {
  495.          }
  496.  
  497.          var1.seek(this.INSTALL_DOT_JAVA_END);
  498.  
  499.          for(int var34 = 0; var1.getFilePointer() < this.cpEnd; var15[var34++] = var1.readByte()) {
  500.          }
  501.  
  502.          var1.seek(this.codeStart);
  503.          var10 = 0;
  504.  
  505.          for(long var22 = this.codeStart; var22 < this.codeEnd; ++var22) {
  506.             var17[var10++] = var1.readByte();
  507.          }
  508.  
  509.          var1.seek(this.attrStart);
  510.          var10 = 0;
  511.  
  512.          for(long var24 = this.attrStart; var24 < this.attrEnd; ++var24) {
  513.             var18[var10++] = var1.readByte();
  514.          }
  515.  
  516.          System.out.println("Saving Constant Class Header");
  517.          FileOutputStream var27;
  518.          ObjectOutputStream var26 = new ObjectOutputStream(var27 = new FileOutputStream(var7));
  519.          var26.writeObject(var16);
  520.          var26.close();
  521.          var27.close();
  522.          System.out.println("Saving Constant Pool #1");
  523.          var26 = new ObjectOutputStream(var27 = new FileOutputStream(var2));
  524.          var26.writeObject(var11);
  525.          var26.close();
  526.          var27.close();
  527.          System.out.println("Saving Constant Pool #2");
  528.          var26 = new ObjectOutputStream(var27 = new FileOutputStream(var3));
  529.          var26.writeObject(var12);
  530.          var26.close();
  531.          var27.close();
  532.          System.out.println("Saving Constant Pool #3");
  533.          var26 = new ObjectOutputStream(var27 = new FileOutputStream(var4));
  534.          var26.writeObject(var13);
  535.          var26.close();
  536.          var27.close();
  537.          System.out.println("Saving Constant Pool #4");
  538.          var26 = new ObjectOutputStream(var27 = new FileOutputStream(var5));
  539.          var26.writeObject(var14);
  540.          var26.close();
  541.          var27.close();
  542.          System.out.println("Saving Constant Pool #5");
  543.          var26 = new ObjectOutputStream(var27 = new FileOutputStream(var6));
  544.          var26.writeObject(var15);
  545.          var26.close();
  546.          var27.close();
  547.          System.out.println("Saving Bytcode");
  548.          var26 = new ObjectOutputStream(var27 = new FileOutputStream(var8));
  549.          var26.writeObject(var17);
  550.          var26.close();
  551.          var27.close();
  552.          System.out.println("Saving Attributes");
  553.          var26 = new ObjectOutputStream(var27 = new FileOutputStream(var9));
  554.          var26.writeObject(var18);
  555.          var26.close();
  556.          var27.close();
  557.       } catch (Exception var28) {
  558.          ((Throwable)var28).printStackTrace();
  559.       }
  560.  
  561.    }
  562.  
  563.    private void expr() {
  564.       try {
  565.          this.raf.seek(this.infoLocation);
  566.          this.raf.writeInt(10);
  567.          this.msg();
  568.       } catch (Exception var1) {
  569.          this.msg();
  570.       }
  571.  
  572.    }
  573.  
  574.    private int getCurrentDate() {
  575.       Calendar var1 = Calendar.getInstance();
  576.       String var2 = String.valueOf(var1.get(1));
  577.       String var3 = String.valueOf(var1.get(2));
  578.       String var4 = String.valueOf(var1.get(5));
  579.       if (var3.length() == 1) {
  580.          var3 = "0" + var3;
  581.       }
  582.  
  583.       if (var4.length() == 1) {
  584.          var3 = "0" + var4;
  585.       }
  586.  
  587.       return new Integer(var2 + var3 + var4);
  588.    }
  589.  
  590.    private static Method getMainMethod(Class var0) {
  591.       Method[] var1 = var0.getMethods();
  592.  
  593.       for(int var2 = 0; var2 < var1.length; ++var2) {
  594.          if (var1[var2].getName().endsWith("main")) {
  595.             return var1[var2];
  596.          }
  597.       }
  598.  
  599.       return null;
  600.    }
  601.  
  602.    public URL getResource(String var1) {
  603.       return this.getClass().getResource(var1);
  604.    }
  605.  
  606.    public InputStream getResourceAsStream(String var1) {
  607.       Vector var2 = (Vector)inners.get(var1);
  608.       if (var2 == null) {
  609.          if (showLoad) {
  610.             System.out.println(" $$$$ " + var1 + " does not appear to be an Inner Resource");
  611.          }
  612.  
  613.          return this.getClass().getResourceAsStream(var1);
  614.       } else {
  615.          if (showLoad) {
  616.             System.out.println(" $$$$ " + var1 + " was identified an Inner Resource");
  617.          }
  618.  
  619.          try {
  620.             InputStream var3 = (InputStream)this.loadClass("ResourceInputStream").getConstructors()[0].newInstance(new RandomAccessFile(this.theFile, "r"), (Long)var2.elementAt(0), (Long)var2.elementAt(1));
  621.             ZipInputStream var4 = new ZipInputStream(var3);
  622.             ZipEntry var5 = var4.getNextEntry();
  623.             return var4;
  624.          } catch (Exception var6) {
  625.             System.out.println("Error reading " + var1 + ". Returning null.");
  626.             return null;
  627.          }
  628.       }
  629.    }
  630.  
  631.    private void initEnvironment() {
  632.       if (showLoad) {
  633.          System.out.println("Number of Classes to Load ==> " + this.allClasses.size());
  634.       }
  635.  
  636.       Enumeration var1 = this.allClasses.elements();
  637.  
  638.       while(var1.hasMoreElements()) {
  639.          String var2 = (String)var1.nextElement();
  640.  
  641.          try {
  642.             Class var3 = this.loadClass(var2);
  643.             if (showLoad) {
  644.                System.out.println("Loading ==> " + var3);
  645.             }
  646.          } catch (ClassNotFoundException var4) {
  647.             System.err.println("Could not load class: " + var2 + "\nA required class is missing from your classpath");
  648.          }
  649.       }
  650.  
  651.       if (showLoad) {
  652.          System.out.println("     <== done! ==>");
  653.       }
  654.  
  655.    }
  656.  
  657.    public Class loadClass(String var1) throws ClassNotFoundException {
  658.       return this.loadClass(var1, true);
  659.    }
  660.  
  661.    protected Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
  662.       Class var3 = ((ClassLoader)this).findLoadedClass(var1);
  663.       if (var3 == null) {
  664.          var3 = this.applyDefinition(var1, var2);
  665.       }
  666.  
  667.       if (var3 == null) {
  668.          try {
  669.             var3 = ((ClassLoader)this).findSystemClass(var1);
  670.             return var3;
  671.          } catch (ClassNotFoundException var4) {
  672.          }
  673.       }
  674.  
  675.       if (var3 == null) {
  676.          throw new ClassNotFoundException(var1);
  677.       } else {
  678.          if (var2) {
  679.             ((ClassLoader)this).resolveClass(var3);
  680.          }
  681.  
  682.          return var3;
  683.       }
  684.    }
  685.  
  686.    private void loadFiles(RandomAccessFile var1, long[] var2) {
  687.       File var3 = new File(this.theFile.getParent());
  688.  
  689.       for(int var4 = 0; var4 < var2.length; ++var4) {
  690.          try {
  691.             long var5 = var2[var4];
  692.             this.raf.seek(var5);
  693.             int var7 = this.raf.readUnsignedShort();
  694.             String var8 = this.UTF.getProperty(String.valueOf(var7), "<UNKNOWN>");
  695.             if (var8.equals("Resource") || var8.equals("UnityClass") || var8.equals("Einfo") || var8.equals("Data")) {
  696.                if (var8.equals("Resource")) {
  697.                   int var27 = this.raf.readInt();
  698.                   var27 -= 2;
  699.                   int var30 = this.raf.readUnsignedShort();
  700.                   String var32 = this.UTF.getProperty(String.valueOf(var30), "UNKNOWN");
  701.                   byte[] var34 = new byte[var27];
  702.                   this.raf.read(var34);
  703.                   ByteArrayInputStream var35 = new ByteArrayInputStream(var34);
  704.                   ZipInputStream var36 = new ZipInputStream(var35);
  705.                   byte[] var38 = new byte[512];
  706.  
  707.                   ZipEntry var15;
  708.                   while((var15 = var36.getNextEntry()) != null) {
  709.                      File var39 = new File(var3, var15.getName().replace('/', File.separatorChar));
  710.                      if (!var39.exists()) {
  711.                         File var40 = new File(var39.getParent());
  712.                         if (!var40.exists()) {
  713.                            var40.mkdirs();
  714.                         }
  715.  
  716.                         FileOutputStream var20 = new FileOutputStream(var39);
  717.                         DataOutputStream var21 = new DataOutputStream(var20);
  718.  
  719.                         int var37;
  720.                         while((var37 = ((FilterInputStream)var36).read(var38)) != -1) {
  721.                            var21.write(var38, 0, var37);
  722.                         }
  723.  
  724.                         ((FilterOutputStream)var21).close();
  725.                         var20.close();
  726.                      }
  727.                   }
  728.  
  729.                   var36.close();
  730.                   var35.close();
  731.                } else if (var8.equals("Data")) {
  732.                   int var25 = this.raf.readInt();
  733.                   var25 -= 2;
  734.                   int var29 = this.raf.readUnsignedShort();
  735.                   String var31 = this.UTF.getProperty(String.valueOf(var29), "UNKNOWN");
  736.                   Vector var33 = new Vector();
  737.                   var33.addElement(new Long(this.raf.getFilePointer()));
  738.                   var33.addElement(new Long((long)var25));
  739.                   inners.put(var31, var33);
  740.                   if (showLoad) {
  741.                      System.out.println(" **** Initializing Inner Resource ==> " + var31);
  742.                   }
  743.                } else if (var8.equals("Einfo")) {
  744.                   int var24 = this.raf.readInt();
  745.                   this.infoLocation = this.raf.getFilePointer();
  746.                   this.exprType = this.raf.readInt();
  747.                   this.exprInfo = this.raf.readLong();
  748.                } else {
  749.                   int var9 = this.raf.readInt();
  750.                   var9 -= 2;
  751.                   int var10 = this.raf.readUnsignedShort();
  752.                   String var11 = this.UTF.getProperty(String.valueOf(var10), "UNKNOWN");
  753.                   byte[] var12 = new byte[var9];
  754.                   this.raf.read(var12);
  755.                   ByteArrayInputStream var13 = new ByteArrayInputStream(var12);
  756.                   ZipInputStream var14 = new ZipInputStream(var13);
  757.  
  758.                   ByteArrayOutputStream var18;
  759.                   for(byte[] var17 = new byte[512]; var14.getNextEntry() != null; var18.close()) {
  760.                      var18 = new ByteArrayOutputStream();
  761.  
  762.                      int var16;
  763.                      while((var16 = ((FilterInputStream)var14).read(var17)) != -1) {
  764.                         var18.write(var17, 0, var16);
  765.                      }
  766.  
  767.                      byte[] var19 = var18.toByteArray();
  768.                      if (showLoad) {
  769.                         System.out.print("Reading " + var11 + "... ");
  770.                      }
  771.  
  772.                      this.defineClassFromBytes(var11, var19);
  773.                      this.allClasses.addElement(var11);
  774.                      if (showLoad) {
  775.                         System.out.println("done!");
  776.                      }
  777.                   }
  778.  
  779.                   var14.close();
  780.                   var13.close();
  781.                }
  782.             }
  783.          } catch (Exception var22) {
  784.             ((Throwable)var22).printStackTrace();
  785.          }
  786.       }
  787.  
  788.    }
  789.  
  790.    private static File locate(Class var0) {
  791.       String var1 = var0.getName() + ".class";
  792.       StringTokenizer var2 = new StringTokenizer(System.getProperty("java.class.path"), File.pathSeparator);
  793.  
  794.       while(var2.hasMoreElements()) {
  795.          File var3 = new File((String)var2.nextElement());
  796.          File var4 = new File(var3, var1);
  797.          if (var4.exists()) {
  798.             return var4;
  799.          }
  800.       }
  801.  
  802.       return null;
  803.    }
  804.  
  805.    public static void main(String[] var0) {
  806.       System.out.print("InstallWiz Pro Initializing........");
  807.       setArgs(var0);
  808.       String var1 = "InstallIWP.class";
  809.       new InstallIWP();
  810.    }
  811.  
  812.    private void msg() {
  813.       System.out.println("Sorry, This application has expired. Please register.");
  814.       System.exit(0);
  815.    }
  816.  
  817.    private void out(String var1) {
  818.       if (verbose) {
  819.          System.out.println(var1);
  820.       }
  821.  
  822.    }
  823.  
  824.    private static void setArgs(String[] var0) {
  825.       Vector var1 = new Vector();
  826.  
  827.       try {
  828.          for(int var2 = 0; var2 < var0.length; ++var2) {
  829.             if (var0[var2].equals("--UnityArg")) {
  830.                if (var0[var2 + 1].equals("verbose")) {
  831.                   verbose = true;
  832.                } else if (var0[var2 + 1].equals("dump")) {
  833.                   dump = true;
  834.                } else if (var0[var2 + 1].equals("noRun")) {
  835.                   noRun = true;
  836.                } else if (var0[var2 + 1].equals("showLoad")) {
  837.                   showLoad = true;
  838.                } else if (var0[var2 + 1].equals("-f")) {
  839.                   FILE = var0[var2 + 2];
  840.                   ++var2;
  841.                }
  842.  
  843.                ++var2;
  844.             } else {
  845.                var1.addElement(var0[var2]);
  846.             }
  847.          }
  848.       } catch (Exception var3) {
  849.          System.err.println("Bad Argument Format");
  850.          System.exit(0);
  851.       }
  852.  
  853.       if (var1.size() != 0) {
  854.          ARGS = new String[var1.size()];
  855.          var1.copyInto(ARGS);
  856.       }
  857.    }
  858.  
  859.    private void snoop(File var1) {
  860.       try {
  861.          this.raf = new RandomAccessFile(var1, "rw");
  862.          this.raf.readInt();
  863.          this.raf.readUnsignedShort();
  864.          this.raf.readUnsignedShort();
  865.          this.cpStart = this.raf.getFilePointer();
  866.          this.out("Constant Pool Count Starts at: " + this.cpStart);
  867.          int var2 = this.raf.readUnsignedShort();
  868.          this.out("Constant Pool count: " + var2);
  869.  
  870.          for(int var3 = 1; var3 < var2; ++var3) {
  871.             int var4 = this.CP_Info(var3);
  872.             if (var4 == 4 || var4 == 5) {
  873.                ++var3;
  874.             }
  875.          }
  876.  
  877.          this.cpEnd = this.raf.getFilePointer();
  878.          this.out("Constant Pool info Ends at: " + this.cpEnd);
  879.          this.codeStart = this.raf.getFilePointer();
  880.          this.out("Code Starts at: " + this.codeStart);
  881.          var2 = this.raf.readUnsignedShort();
  882.          var2 = this.raf.readUnsignedShort();
  883.          var2 = this.raf.readUnsignedShort();
  884.          var2 = this.raf.readUnsignedShort();
  885.  
  886.          for(int var29 = 0; var29 < var2; ++var29) {
  887.             int var5 = this.raf.readUnsignedShort();
  888.          }
  889.  
  890.          var2 = this.raf.readUnsignedShort();
  891.  
  892.          for(int var30 = 0; var30 < var2; ++var30) {
  893.             this.FieldInfo();
  894.          }
  895.  
  896.          var2 = this.raf.readUnsignedShort();
  897.  
  898.          for(int var6 = 0; var6 < var2; ++var6) {
  899.             this.MethodInfo();
  900.          }
  901.  
  902.          this.codeEnd = this.raf.getFilePointer();
  903.          this.out("Code Ends at: " + this.codeEnd);
  904.          this.attrStart = this.raf.getFilePointer();
  905.          this.out("Attribute Count Starts at: " + this.attrStart);
  906.          var2 = this.raf.readUnsignedShort();
  907.  
  908.          for(int var7 = 0; var7 < var2; ++var7) {
  909.             long var8 = this.AttributeInfo();
  910.             this.positions.addElement(new Long(var8));
  911.          }
  912.  
  913.          this.attrEnd = this.raf.getFilePointer();
  914.          this.out("Attributes End at: " + this.attrEnd);
  915.          this.out("FILENAME_START ==> " + this.FILENAME_START);
  916.          this.out("INSTALL_START ==> " + this.INSTALL_START);
  917.          this.out("INSTALL_DOT_CLASS_START ==> " + this.INSTALL_DOT_CLASS_START);
  918.          this.out("INSTALL_DOT_JAVA_START ==> " + this.INSTALL_DOT_JAVA_START);
  919.          Enumeration var31 = this.positions.elements();
  920.  
  921.          while(var31.hasMoreElements()) {
  922.             long var9 = (Long)var31.nextElement();
  923.             this.raf.seek(var9);
  924.             int var11 = this.raf.readUnsignedShort();
  925.             this.out("Position: " + var9);
  926.             this.out("Index: " + var11);
  927.             this.out("Value: " + this.UTF.getProperty(String.valueOf(var11), "<UNKNOWN>"));
  928.             this.out("");
  929.          }
  930.  
  931.          if (verbose) {
  932.             this.UTF.list(System.out);
  933.          }
  934.  
  935.          if (dump) {
  936.             this.dumpData(this.raf);
  937.          }
  938.  
  939.          if (!dump && !verbose) {
  940.             int var32 = 0;
  941.             long[] var10 = new long[this.positions.size()];
  942.  
  943.             for(Enumeration var33 = this.positions.elements(); var33.hasMoreElements(); var10[var32++] = (Long)var33.nextElement()) {
  944.             }
  945.  
  946.             this.loadFiles(this.raf, var10);
  947.             this.bootstrap(new File(this.theFile.getParent()));
  948.             int var12 = this.getCurrentDate();
  949.             switch (this.exprType) {
  950.                case 0:
  951.                   break;
  952.                case 1:
  953.                   this.raf.seek(this.infoLocation + 4L);
  954.                   int var13 = this.raf.readInt();
  955.                   int var14 = this.raf.readInt();
  956.                   if (var13 == 0) {
  957.                      this.raf.seek(this.infoLocation + 4L);
  958.  
  959.                      try {
  960.                         var13 = var12 + var14 / 30 * 100 + var14 % 30;
  961.                         this.raf.writeInt(var12);
  962.                      } catch (Exception var20) {
  963.                         this.msg();
  964.                      }
  965.                   }
  966.  
  967.                   if (var12 > var13) {
  968.                      this.expr();
  969.                   }
  970.                   break;
  971.                case 2:
  972.                   this.raf.seek(this.infoLocation + 4L);
  973.                   long var15 = this.raf.readLong() - 1L;
  974.                   if (var15 <= 0L) {
  975.                      this.expr();
  976.                   }
  977.  
  978.                   this.subDate(var15);
  979.                   break;
  980.                case 3:
  981.                   this.raf.seek(this.infoLocation + 4L);
  982.                   this.raf.readInt();
  983.                   int var17 = this.raf.readInt();
  984.                   if (var12 > var17) {
  985.                      this.expr();
  986.                   }
  987.                   break;
  988.                default:
  989.                   this.msg();
  990.             }
  991.  
  992.             this.initEnvironment();
  993.             if (!noRun) {
  994.                try {
  995.                   Method var34 = getMainMethod(this.loadClass("LaunchInstaller"));
  996.                   var34.invoke((Object)null, ARGS);
  997.                } catch (InvocationTargetException var18) {
  998.                   var18.getTargetException().printStackTrace();
  999.                } catch (Exception var19) {
  1000.                   ((Throwable)var19).printStackTrace();
  1001.                }
  1002.  
  1003.                System.out.println("  Done!");
  1004.             }
  1005.          }
  1006.  
  1007.          this.raf.close();
  1008.       } catch (Exception var21) {
  1009.       }
  1010.  
  1011.    }
  1012.  
  1013.    private void subDate(long var1) {
  1014.       try {
  1015.          this.raf.seek(this.infoLocation + 4L);
  1016.          this.raf.writeLong(var1);
  1017.       } catch (Exception var3) {
  1018.          this.msg();
  1019.       }
  1020.  
  1021.    }
  1022. }
  1023.