home *** CD-ROM | disk | FTP | other *** search
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.DataOutputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.FilterInputStream;
- import java.io.FilterOutputStream;
- import java.io.InputStream;
- import java.io.ObjectOutputStream;
- import java.io.RandomAccessFile;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.net.URL;
- import java.util.Calendar;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Properties;
- import java.util.StringTokenizer;
- import java.util.Vector;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipInputStream;
-
- public class InstallIWP extends ClassLoader {
- private RandomAccessFile raf;
- private Properties UTF = new Properties();
- private File theFile;
- private long headerStart = 0L;
- private long headerEnd = 8L;
- private long cpStart = 0L;
- private long cpEnd = 0L;
- private long codeStart = 0L;
- private long codeEnd = 0L;
- private long attrStart = 0L;
- private long attrEnd = 0L;
- private long FILENAME_START = 0L;
- private long INSTALL_START = 0L;
- private long INSTALL_DOT_CLASS_START = 0L;
- private long INSTALL_DOT_JAVA_START = 0L;
- private long FILENAME_END = 0L;
- private long INSTALL_END = 0L;
- private long INSTALL_DOT_CLASS_END = 0L;
- private long INSTALL_DOT_JAVA_END = 0L;
- private static final int CONSTANT_UTF8 = 1;
- private static final int CONSTANT_UNICODE = 2;
- private static final int CONSTANT_INTEGER = 3;
- private static final int CONSTANT_FLOAT = 4;
- private static final int CONSTANT_LONG = 5;
- private static final int CONSTANT_DOUBLE = 6;
- private static final int CONSTANT_CLASS = 7;
- private static final int CONSTANT_STRING = 8;
- private static final int CONSTANT_FIELD = 9;
- private static final int CONSTANT_METHOD = 10;
- private static final int CONSTANT_INTERFACEMETHOD = 11;
- private static final int CONSTANT_NAMEANDTYPE = 12;
- private static final int ANALYZE = 0;
- private static final int OBFUSCATE = 1;
- // $FF: renamed from: R java.lang.String
- private static final String field_0 = "Resource";
- // $FF: renamed from: C java.lang.String
- private static final String field_1 = "UnityClass";
- // $FF: renamed from: D java.lang.String
- private static final String field_2 = "Data";
- // $FF: renamed from: E java.lang.String
- private static final String field_3 = "Einfo";
- private static final String FILE_NAME = "LaunchInstaller";
- private static boolean verbose = false;
- private static boolean dump = false;
- private static boolean noRun = false;
- private static boolean showLoad = false;
- private static String[] ARGS = new String[0];
- private static String FILE = null;
- private static Hashtable inners = new Hashtable();
- private Vector positions = new Vector();
- private Vector allClasses = new Vector();
- private Hashtable rawClasses = new Hashtable();
- private int exprType = 0;
- private long exprInfo = 0L;
- private long infoLocation = 0L;
-
- private InstallIWP() {
- Object var1 = null;
- File var2;
- if (FILE == null) {
- var2 = locate(this.getClass());
- } else {
- var2 = new File(FILE);
- }
-
- if (var2 == null) {
- System.err.println("Class will not work if you archive it.");
- System.exit(0);
- }
-
- this.theFile = var2;
- if (this.theFile.exists()) {
- this.snoop(this.theFile);
- }
- }
-
- private long AttributeInfo() {
- long var3 = 0L;
-
- try {
- var3 = this.raf.getFilePointer();
- int var1 = this.raf.readUnsignedShort();
- int var2 = this.raf.readInt();
- this.raf.skipBytes(var2);
- } catch (Exception var6) {
- System.err.println("Error #12.1");
- ((Throwable)var6).printStackTrace();
- }
-
- return var3;
- }
-
- private int CP_Info(int var1) {
- int var2 = 0;
-
- try {
- var2 = this.raf.readUnsignedByte();
- } catch (Exception var3) {
- System.err.println("This does not appear to be a class file.");
- System.exit(0);
- }
-
- switch (var2) {
- case 1:
- case 2:
- this.doUnicode(var1);
- break;
- case 3:
- this.doInteger();
- break;
- case 4:
- this.doFloat();
- break;
- case 5:
- this.doLong();
- break;
- case 6:
- this.doDouble();
- break;
- case 7:
- this.doClass();
- break;
- case 8:
- this.doString();
- break;
- case 9:
- this.doField();
- break;
- case 10:
- this.doMethod();
- break;
- case 11:
- this.doInterface();
- break;
- case 12:
- this.doNAT();
- }
-
- return var2;
- }
-
- private void FCC() {
- try {
- int var1 = this.raf.readUnsignedShort();
- int var2 = this.raf.readUnsignedShort();
- } catch (Exception var3) {
- System.err.println("Error #3");
- ((Throwable)var3).printStackTrace();
- }
-
- }
-
- private void FieldInfo() {
- try {
- int var1 = this.raf.readUnsignedShort();
- int var2 = this.raf.readUnsignedShort();
- int var3 = this.raf.readUnsignedShort();
- int var4 = this.raf.readUnsignedShort();
-
- for(int var5 = 0; var5 < var4; ++var5) {
- this.AttributeInfo();
- }
- } catch (Exception var6) {
- System.err.println("Error #11");
- ((Throwable)var6).printStackTrace();
- }
-
- }
-
- private void MethodInfo() {
- try {
- int var1 = this.raf.readUnsignedShort();
- int var2 = this.raf.readUnsignedShort();
- int var3 = this.raf.readUnsignedShort();
- int var4 = this.raf.readUnsignedShort();
-
- for(int var5 = 0; var5 < var4; ++var5) {
- this.AttributeInfo();
- }
- } catch (Exception var6) {
- System.err.println("Error #14");
- ((Throwable)var6).printStackTrace();
- }
-
- }
-
- private Class applyDefinition(String var1, boolean var2) {
- byte[] var3 = (byte[])this.rawClasses.get(var1);
- this.rawClasses.remove(var1);
- if (var3 == null) {
- return null;
- } else {
- Object var4 = null;
-
- try {
- var8 = super.defineClass((String)null, var3, 0, var3.length);
- if (var8 != null && var2) {
- ((ClassLoader)this).resolveClass(var8);
- }
- } catch (ClassFormatError var6) {
- System.err.println("The definition for " + var1 + " in the JAR file");
- System.err.println("has a format error.");
- return null;
- } catch (NoClassDefFoundError var7) {
- return null;
- }
-
- if (!var8.getName().equals(var1)) {
- System.err.println("\nWARNING: file name versus class name mismatch");
- String var5 = var1.replace('.', '/') + ".class";
- System.err.println(" JAR entry \"" + var5 + "\" was expected " + "to contain class \"" + var1 + "\"");
- System.err.println(" but instead contained class \"" + var8.getName() + "\"");
- System.err.println(" This may cause future class-loading problems.\n");
- }
-
- return var8;
- }
- }
-
- public void bootstrap(File var1) {
- try {
- Class var16 = Class.forName("javax.swing.JComponent");
- } catch (Throwable var15) {
- File var2 = new File(var1, "swingall.jar");
- String var3 = System.getProperty("os.name");
- boolean var4 = var3.indexOf("Windows") >= 0;
- String var5 = var4 ? "\"" : "";
- if (var2.exists()) {
- String var6 = System.getProperty("java.home");
- String var7 = File.separator;
- String var10 = System.getProperty("java.class.path") + File.pathSeparator + var2.getAbsolutePath() + File.pathSeparator + var6 + var7 + "lib" + "classes.zip";
-
- try {
- Runtime var8 = Runtime.getRuntime();
- Process var9 = var8.exec(var6 + var7 + "bin" + var7 + "java " + "-classpath " + var5 + var10 + var5 + " " + this.getClass().getName());
- int var11 = var9.waitFor();
- if (var11 == 0) {
- this.cleanup(var1);
- System.exit(0);
- return;
- }
- } catch (Exception var14) {
- }
-
- try {
- Runtime var17 = Runtime.getRuntime();
- Process var19 = var17.exec("jview /cp:p " + var5 + var10 + var5 + " " + this.getClass().getName());
- int var21 = var19.waitFor();
- if (var21 == 0) {
- this.cleanup(var1);
- System.exit(0);
- return;
- }
- } catch (Exception var13) {
- }
-
- try {
- Runtime var18 = Runtime.getRuntime();
- Process var20 = var18.exec("java -classpath " + var5 + var10 + var5 + " " + this.getClass().getName());
- int var22 = var20.waitFor();
- if (var22 == 0) {
- this.cleanup(var1);
- System.exit(0);
- return;
- }
- } catch (Exception var12) {
- }
-
- System.err.println("Sorry. This Installer Requires JRE 1.2 or JRE 1.1+Swing1.1b3");
- System.err.println("Neither was found on your system.");
- this.cleanup(var1);
- System.exit(0);
- } else {
- System.err.println(" Failed!\nSorry. This Installer Requires JRE 1.2 or JRE 1.1+Swing1.1");
- System.err.println("Neither was found on your system.");
- this.cleanup(var1);
- System.exit(-1);
- }
-
- }
- }
-
- private void cleanup(File var1) {
- (new File(var1, "swingall.jar")).delete();
- }
-
- public void defineClassFromBytes(String var1, byte[] var2) {
- this.rawClasses.put(var1, var2);
- }
-
- private void doClass() {
- try {
- int var1 = this.raf.readUnsignedShort();
- } catch (Exception var3) {
- System.err.println("Error #2");
- ((Throwable)var3).printStackTrace();
- }
-
- }
-
- private void doDouble() {
- try {
- double var1 = this.raf.readDouble();
- } catch (Exception var4) {
- System.err.println("Error #8");
- ((Throwable)var4).printStackTrace();
- }
-
- }
-
- private void doField() {
- this.FCC();
- }
-
- private void doFloat() {
- try {
- float var1 = this.raf.readFloat();
- } catch (Exception var3) {
- System.err.println("Error #6");
- ((Throwable)var3).printStackTrace();
- }
-
- }
-
- private void doInteger() {
- try {
- int var1 = this.raf.readInt();
- } catch (Exception var3) {
- System.err.println("Error #5");
- ((Throwable)var3).printStackTrace();
- }
-
- }
-
- private void doInterface() {
- this.FCC();
- }
-
- private void doLong() {
- try {
- long var1 = this.raf.readLong();
- } catch (Exception var4) {
- System.err.println("Error #7");
- ((Throwable)var4).printStackTrace();
- }
-
- }
-
- private void doMethod() {
- this.FCC();
- }
-
- private void doNAT() {
- try {
- int var1 = this.raf.readUnsignedShort();
- int var2 = this.raf.readUnsignedShort();
- } catch (Exception var3) {
- System.err.println("Error #9");
- ((Throwable)var3).printStackTrace();
- }
-
- }
-
- private void doString() {
- try {
- int var1 = this.raf.readUnsignedShort();
- } catch (Exception var3) {
- System.err.println("Error #4");
- ((Throwable)var3).printStackTrace();
- }
-
- }
-
- private void doUnicode(int var1) {
- try {
- long var2 = this.raf.getFilePointer();
- String var4 = this.raf.readUTF();
- long var5 = this.raf.getFilePointer();
- if (var4.equals("LaunchInstaller")) {
- this.FILENAME_START = var2;
- this.FILENAME_END = var5;
- } else if (var4.equals("InstallIWP")) {
- this.INSTALL_START = var2;
- this.INSTALL_END = var5;
- } else if (var4.equals("InstallIWP.class")) {
- this.INSTALL_DOT_CLASS_START = var2;
- this.INSTALL_DOT_CLASS_END = var5;
- } else if (var4.equals("InstallIWP.java")) {
- this.INSTALL_DOT_JAVA_START = var2;
- this.INSTALL_DOT_JAVA_END = var5;
- }
-
- this.UTF.put(String.valueOf(var1), var4);
- } catch (Exception var7) {
- System.err.println("Error #10");
- ((Throwable)var7).printStackTrace();
- }
-
- }
-
- private void dumpData(RandomAccessFile var1) {
- try {
- System.out.println("Starting dump");
- File var2 = new File("cp1.dat");
- File var3 = new File("cp2.dat");
- File var4 = new File("cp3.dat");
- File var5 = new File("cp4.dat");
- File var6 = new File("cp5.dat");
- File var7 = new File("head.dat");
- File var8 = new File("code.dat");
- File var9 = new File("attr.dat");
- int var10 = 0;
- byte[] var11 = new byte[(int)(this.FILENAME_START - this.cpStart)];
- byte[] var12 = new byte[(int)(this.INSTALL_START - this.FILENAME_END)];
- byte[] var13 = new byte[(int)(this.INSTALL_DOT_CLASS_START - this.INSTALL_END)];
- byte[] var14 = new byte[(int)(this.INSTALL_DOT_JAVA_START - this.INSTALL_DOT_CLASS_END)];
- byte[] var15 = new byte[(int)(this.cpEnd - this.INSTALL_DOT_JAVA_END)];
- byte[] var16 = new byte[(int)(this.headerEnd - this.headerStart)];
- byte[] var17 = new byte[(int)(this.codeEnd - this.codeStart)];
- byte[] var18 = new byte[(int)(this.attrEnd - this.attrStart)];
- System.out.println("cpStart " + this.cpStart);
- System.out.println("FILENAME_START " + this.FILENAME_START);
- System.out.println("FILENAME_END " + this.FILENAME_END);
- System.out.println("INSTALL_START " + this.INSTALL_START);
- System.out.println("INSTALL_END " + this.INSTALL_END);
- System.out.println("INSTALL_DOT_CLASS_START " + this.INSTALL_DOT_CLASS_START);
- System.out.println("INSTALL_DOT_CLASS_END " + this.INSTALL_DOT_CLASS_END);
- System.out.println("INSTALL_DOT_JAVA_START " + this.INSTALL_DOT_JAVA_START);
- System.out.println("INSTALL_DOT_JAVA_END " + this.INSTALL_DOT_JAVA_END);
- System.out.println("cpEnd " + this.cpEnd);
- System.out.println("");
- System.out.println("headerStart " + this.headerStart);
- System.out.println("headerEnd " + this.headerEnd);
- System.out.println("codeStart " + this.codeStart);
- System.out.println("codeEnd " + this.codeEnd);
- System.out.println("attrStart " + this.attrStart);
- System.out.println("attrEnd " + this.attrEnd);
- System.out.println("");
- System.out.println("byte[] cpData1 = new byte[(int) (" + (this.FILENAME_START - this.cpStart) + ")];");
- System.out.println("byte[] cpData2 = new byte[(int) (" + (this.INSTALL_START - this.FILENAME_END) + ")];");
- System.out.println("byte[] cpData3 = new byte[(int) (" + (this.INSTALL_DOT_CLASS_START - this.INSTALL_END) + ")];");
- System.out.println("byte[] cpData4 = new byte[(int) (" + (this.INSTALL_DOT_JAVA_START - this.INSTALL_DOT_CLASS_END) + ")];");
- System.out.println("byte[] cpData5 = new byte[(int) (" + (this.cpEnd - this.INSTALL_DOT_JAVA_END) + ")];");
- System.out.println("byte[] headerData = new byte[(int) (" + (this.headerEnd - this.headerStart) + ")];");
- System.out.println("byte[] codeData = new byte[(int) (" + (this.codeEnd - this.codeStart) + ")];");
- System.out.println("byte[] attrData = new byte[(int) (" + (this.attrEnd - this.attrStart) + ")];");
- var1.seek(this.headerStart);
- var10 = 0;
-
- for(long var19 = this.headerStart; var19 < this.headerEnd; ++var19) {
- var16[var10++] = var1.readByte();
- }
-
- var1.seek(this.cpStart);
-
- for(int var30 = 0; var1.getFilePointer() < this.FILENAME_START; var11[var30++] = var1.readByte()) {
- }
-
- var1.seek(this.FILENAME_END);
-
- for(int var31 = 0; var1.getFilePointer() < this.INSTALL_START; var12[var31++] = var1.readByte()) {
- }
-
- var1.seek(this.INSTALL_END);
-
- for(int var32 = 0; var1.getFilePointer() < this.INSTALL_DOT_CLASS_START; var13[var32++] = var1.readByte()) {
- }
-
- var1.seek(this.INSTALL_DOT_CLASS_END);
-
- for(int var33 = 0; var1.getFilePointer() < this.INSTALL_DOT_JAVA_START; var14[var33++] = var1.readByte()) {
- }
-
- var1.seek(this.INSTALL_DOT_JAVA_END);
-
- for(int var34 = 0; var1.getFilePointer() < this.cpEnd; var15[var34++] = var1.readByte()) {
- }
-
- var1.seek(this.codeStart);
- var10 = 0;
-
- for(long var22 = this.codeStart; var22 < this.codeEnd; ++var22) {
- var17[var10++] = var1.readByte();
- }
-
- var1.seek(this.attrStart);
- var10 = 0;
-
- for(long var24 = this.attrStart; var24 < this.attrEnd; ++var24) {
- var18[var10++] = var1.readByte();
- }
-
- System.out.println("Saving Constant Class Header");
- FileOutputStream var27;
- ObjectOutputStream var26 = new ObjectOutputStream(var27 = new FileOutputStream(var7));
- var26.writeObject(var16);
- var26.close();
- var27.close();
- System.out.println("Saving Constant Pool #1");
- var26 = new ObjectOutputStream(var27 = new FileOutputStream(var2));
- var26.writeObject(var11);
- var26.close();
- var27.close();
- System.out.println("Saving Constant Pool #2");
- var26 = new ObjectOutputStream(var27 = new FileOutputStream(var3));
- var26.writeObject(var12);
- var26.close();
- var27.close();
- System.out.println("Saving Constant Pool #3");
- var26 = new ObjectOutputStream(var27 = new FileOutputStream(var4));
- var26.writeObject(var13);
- var26.close();
- var27.close();
- System.out.println("Saving Constant Pool #4");
- var26 = new ObjectOutputStream(var27 = new FileOutputStream(var5));
- var26.writeObject(var14);
- var26.close();
- var27.close();
- System.out.println("Saving Constant Pool #5");
- var26 = new ObjectOutputStream(var27 = new FileOutputStream(var6));
- var26.writeObject(var15);
- var26.close();
- var27.close();
- System.out.println("Saving Bytcode");
- var26 = new ObjectOutputStream(var27 = new FileOutputStream(var8));
- var26.writeObject(var17);
- var26.close();
- var27.close();
- System.out.println("Saving Attributes");
- var26 = new ObjectOutputStream(var27 = new FileOutputStream(var9));
- var26.writeObject(var18);
- var26.close();
- var27.close();
- } catch (Exception var28) {
- ((Throwable)var28).printStackTrace();
- }
-
- }
-
- private void expr() {
- try {
- this.raf.seek(this.infoLocation);
- this.raf.writeInt(10);
- this.msg();
- } catch (Exception var1) {
- this.msg();
- }
-
- }
-
- private int getCurrentDate() {
- Calendar var1 = Calendar.getInstance();
- String var2 = String.valueOf(var1.get(1));
- String var3 = String.valueOf(var1.get(2));
- String var4 = String.valueOf(var1.get(5));
- if (var3.length() == 1) {
- var3 = "0" + var3;
- }
-
- if (var4.length() == 1) {
- var3 = "0" + var4;
- }
-
- return new Integer(var2 + var3 + var4);
- }
-
- private static Method getMainMethod(Class var0) {
- Method[] var1 = var0.getMethods();
-
- for(int var2 = 0; var2 < var1.length; ++var2) {
- if (var1[var2].getName().endsWith("main")) {
- return var1[var2];
- }
- }
-
- return null;
- }
-
- public URL getResource(String var1) {
- return this.getClass().getResource(var1);
- }
-
- public InputStream getResourceAsStream(String var1) {
- Vector var2 = (Vector)inners.get(var1);
- if (var2 == null) {
- if (showLoad) {
- System.out.println(" $$$$ " + var1 + " does not appear to be an Inner Resource");
- }
-
- return this.getClass().getResourceAsStream(var1);
- } else {
- if (showLoad) {
- System.out.println(" $$$$ " + var1 + " was identified an Inner Resource");
- }
-
- try {
- InputStream var3 = (InputStream)this.loadClass("ResourceInputStream").getConstructors()[0].newInstance(new RandomAccessFile(this.theFile, "r"), (Long)var2.elementAt(0), (Long)var2.elementAt(1));
- ZipInputStream var4 = new ZipInputStream(var3);
- ZipEntry var5 = var4.getNextEntry();
- return var4;
- } catch (Exception var6) {
- System.out.println("Error reading " + var1 + ". Returning null.");
- return null;
- }
- }
- }
-
- private void initEnvironment() {
- if (showLoad) {
- System.out.println("Number of Classes to Load ==> " + this.allClasses.size());
- }
-
- Enumeration var1 = this.allClasses.elements();
-
- while(var1.hasMoreElements()) {
- String var2 = (String)var1.nextElement();
-
- try {
- Class var3 = this.loadClass(var2);
- if (showLoad) {
- System.out.println("Loading ==> " + var3);
- }
- } catch (ClassNotFoundException var4) {
- System.err.println("Could not load class: " + var2 + "\nA required class is missing from your classpath");
- }
- }
-
- if (showLoad) {
- System.out.println(" <== done! ==>");
- }
-
- }
-
- public Class loadClass(String var1) throws ClassNotFoundException {
- return this.loadClass(var1, true);
- }
-
- protected Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
- Class var3 = ((ClassLoader)this).findLoadedClass(var1);
- if (var3 == null) {
- var3 = this.applyDefinition(var1, var2);
- }
-
- if (var3 == null) {
- try {
- var3 = ((ClassLoader)this).findSystemClass(var1);
- return var3;
- } catch (ClassNotFoundException var4) {
- }
- }
-
- if (var3 == null) {
- throw new ClassNotFoundException(var1);
- } else {
- if (var2) {
- ((ClassLoader)this).resolveClass(var3);
- }
-
- return var3;
- }
- }
-
- private void loadFiles(RandomAccessFile var1, long[] var2) {
- File var3 = new File(this.theFile.getParent());
-
- for(int var4 = 0; var4 < var2.length; ++var4) {
- try {
- long var5 = var2[var4];
- this.raf.seek(var5);
- int var7 = this.raf.readUnsignedShort();
- String var8 = this.UTF.getProperty(String.valueOf(var7), "<UNKNOWN>");
- if (var8.equals("Resource") || var8.equals("UnityClass") || var8.equals("Einfo") || var8.equals("Data")) {
- if (var8.equals("Resource")) {
- int var27 = this.raf.readInt();
- var27 -= 2;
- int var30 = this.raf.readUnsignedShort();
- String var32 = this.UTF.getProperty(String.valueOf(var30), "UNKNOWN");
- byte[] var34 = new byte[var27];
- this.raf.read(var34);
- ByteArrayInputStream var35 = new ByteArrayInputStream(var34);
- ZipInputStream var36 = new ZipInputStream(var35);
- byte[] var38 = new byte[512];
-
- ZipEntry var15;
- while((var15 = var36.getNextEntry()) != null) {
- File var39 = new File(var3, var15.getName().replace('/', File.separatorChar));
- if (!var39.exists()) {
- File var40 = new File(var39.getParent());
- if (!var40.exists()) {
- var40.mkdirs();
- }
-
- FileOutputStream var20 = new FileOutputStream(var39);
- DataOutputStream var21 = new DataOutputStream(var20);
-
- int var37;
- while((var37 = ((FilterInputStream)var36).read(var38)) != -1) {
- var21.write(var38, 0, var37);
- }
-
- ((FilterOutputStream)var21).close();
- var20.close();
- }
- }
-
- var36.close();
- var35.close();
- } else if (var8.equals("Data")) {
- int var25 = this.raf.readInt();
- var25 -= 2;
- int var29 = this.raf.readUnsignedShort();
- String var31 = this.UTF.getProperty(String.valueOf(var29), "UNKNOWN");
- Vector var33 = new Vector();
- var33.addElement(new Long(this.raf.getFilePointer()));
- var33.addElement(new Long((long)var25));
- inners.put(var31, var33);
- if (showLoad) {
- System.out.println(" **** Initializing Inner Resource ==> " + var31);
- }
- } else if (var8.equals("Einfo")) {
- int var24 = this.raf.readInt();
- this.infoLocation = this.raf.getFilePointer();
- this.exprType = this.raf.readInt();
- this.exprInfo = this.raf.readLong();
- } else {
- int var9 = this.raf.readInt();
- var9 -= 2;
- int var10 = this.raf.readUnsignedShort();
- String var11 = this.UTF.getProperty(String.valueOf(var10), "UNKNOWN");
- byte[] var12 = new byte[var9];
- this.raf.read(var12);
- ByteArrayInputStream var13 = new ByteArrayInputStream(var12);
- ZipInputStream var14 = new ZipInputStream(var13);
-
- ByteArrayOutputStream var18;
- for(byte[] var17 = new byte[512]; var14.getNextEntry() != null; var18.close()) {
- var18 = new ByteArrayOutputStream();
-
- int var16;
- while((var16 = ((FilterInputStream)var14).read(var17)) != -1) {
- var18.write(var17, 0, var16);
- }
-
- byte[] var19 = var18.toByteArray();
- if (showLoad) {
- System.out.print("Reading " + var11 + "... ");
- }
-
- this.defineClassFromBytes(var11, var19);
- this.allClasses.addElement(var11);
- if (showLoad) {
- System.out.println("done!");
- }
- }
-
- var14.close();
- var13.close();
- }
- }
- } catch (Exception var22) {
- ((Throwable)var22).printStackTrace();
- }
- }
-
- }
-
- private static File locate(Class var0) {
- String var1 = var0.getName() + ".class";
- StringTokenizer var2 = new StringTokenizer(System.getProperty("java.class.path"), File.pathSeparator);
-
- while(var2.hasMoreElements()) {
- File var3 = new File((String)var2.nextElement());
- File var4 = new File(var3, var1);
- if (var4.exists()) {
- return var4;
- }
- }
-
- return null;
- }
-
- public static void main(String[] var0) {
- System.out.print("InstallWiz Pro Initializing........");
- setArgs(var0);
- String var1 = "InstallIWP.class";
- new InstallIWP();
- }
-
- private void msg() {
- System.out.println("Sorry, This application has expired. Please register.");
- System.exit(0);
- }
-
- private void out(String var1) {
- if (verbose) {
- System.out.println(var1);
- }
-
- }
-
- private static void setArgs(String[] var0) {
- Vector var1 = new Vector();
-
- try {
- for(int var2 = 0; var2 < var0.length; ++var2) {
- if (var0[var2].equals("--UnityArg")) {
- if (var0[var2 + 1].equals("verbose")) {
- verbose = true;
- } else if (var0[var2 + 1].equals("dump")) {
- dump = true;
- } else if (var0[var2 + 1].equals("noRun")) {
- noRun = true;
- } else if (var0[var2 + 1].equals("showLoad")) {
- showLoad = true;
- } else if (var0[var2 + 1].equals("-f")) {
- FILE = var0[var2 + 2];
- ++var2;
- }
-
- ++var2;
- } else {
- var1.addElement(var0[var2]);
- }
- }
- } catch (Exception var3) {
- System.err.println("Bad Argument Format");
- System.exit(0);
- }
-
- if (var1.size() != 0) {
- ARGS = new String[var1.size()];
- var1.copyInto(ARGS);
- }
- }
-
- private void snoop(File var1) {
- try {
- this.raf = new RandomAccessFile(var1, "rw");
- this.raf.readInt();
- this.raf.readUnsignedShort();
- this.raf.readUnsignedShort();
- this.cpStart = this.raf.getFilePointer();
- this.out("Constant Pool Count Starts at: " + this.cpStart);
- int var2 = this.raf.readUnsignedShort();
- this.out("Constant Pool count: " + var2);
-
- for(int var3 = 1; var3 < var2; ++var3) {
- int var4 = this.CP_Info(var3);
- if (var4 == 4 || var4 == 5) {
- ++var3;
- }
- }
-
- this.cpEnd = this.raf.getFilePointer();
- this.out("Constant Pool info Ends at: " + this.cpEnd);
- this.codeStart = this.raf.getFilePointer();
- this.out("Code Starts at: " + this.codeStart);
- var2 = this.raf.readUnsignedShort();
- var2 = this.raf.readUnsignedShort();
- var2 = this.raf.readUnsignedShort();
- var2 = this.raf.readUnsignedShort();
-
- for(int var29 = 0; var29 < var2; ++var29) {
- int var5 = this.raf.readUnsignedShort();
- }
-
- var2 = this.raf.readUnsignedShort();
-
- for(int var30 = 0; var30 < var2; ++var30) {
- this.FieldInfo();
- }
-
- var2 = this.raf.readUnsignedShort();
-
- for(int var6 = 0; var6 < var2; ++var6) {
- this.MethodInfo();
- }
-
- this.codeEnd = this.raf.getFilePointer();
- this.out("Code Ends at: " + this.codeEnd);
- this.attrStart = this.raf.getFilePointer();
- this.out("Attribute Count Starts at: " + this.attrStart);
- var2 = this.raf.readUnsignedShort();
-
- for(int var7 = 0; var7 < var2; ++var7) {
- long var8 = this.AttributeInfo();
- this.positions.addElement(new Long(var8));
- }
-
- this.attrEnd = this.raf.getFilePointer();
- this.out("Attributes End at: " + this.attrEnd);
- this.out("FILENAME_START ==> " + this.FILENAME_START);
- this.out("INSTALL_START ==> " + this.INSTALL_START);
- this.out("INSTALL_DOT_CLASS_START ==> " + this.INSTALL_DOT_CLASS_START);
- this.out("INSTALL_DOT_JAVA_START ==> " + this.INSTALL_DOT_JAVA_START);
- Enumeration var31 = this.positions.elements();
-
- while(var31.hasMoreElements()) {
- long var9 = (Long)var31.nextElement();
- this.raf.seek(var9);
- int var11 = this.raf.readUnsignedShort();
- this.out("Position: " + var9);
- this.out("Index: " + var11);
- this.out("Value: " + this.UTF.getProperty(String.valueOf(var11), "<UNKNOWN>"));
- this.out("");
- }
-
- if (verbose) {
- this.UTF.list(System.out);
- }
-
- if (dump) {
- this.dumpData(this.raf);
- }
-
- if (!dump && !verbose) {
- int var32 = 0;
- long[] var10 = new long[this.positions.size()];
-
- for(Enumeration var33 = this.positions.elements(); var33.hasMoreElements(); var10[var32++] = (Long)var33.nextElement()) {
- }
-
- this.loadFiles(this.raf, var10);
- this.bootstrap(new File(this.theFile.getParent()));
- int var12 = this.getCurrentDate();
- switch (this.exprType) {
- case 0:
- break;
- case 1:
- this.raf.seek(this.infoLocation + 4L);
- int var13 = this.raf.readInt();
- int var14 = this.raf.readInt();
- if (var13 == 0) {
- this.raf.seek(this.infoLocation + 4L);
-
- try {
- var13 = var12 + var14 / 30 * 100 + var14 % 30;
- this.raf.writeInt(var12);
- } catch (Exception var20) {
- this.msg();
- }
- }
-
- if (var12 > var13) {
- this.expr();
- }
- break;
- case 2:
- this.raf.seek(this.infoLocation + 4L);
- long var15 = this.raf.readLong() - 1L;
- if (var15 <= 0L) {
- this.expr();
- }
-
- this.subDate(var15);
- break;
- case 3:
- this.raf.seek(this.infoLocation + 4L);
- this.raf.readInt();
- int var17 = this.raf.readInt();
- if (var12 > var17) {
- this.expr();
- }
- break;
- default:
- this.msg();
- }
-
- this.initEnvironment();
- if (!noRun) {
- try {
- Method var34 = getMainMethod(this.loadClass("LaunchInstaller"));
- var34.invoke((Object)null, ARGS);
- } catch (InvocationTargetException var18) {
- var18.getTargetException().printStackTrace();
- } catch (Exception var19) {
- ((Throwable)var19).printStackTrace();
- }
-
- System.out.println(" Done!");
- }
- }
-
- this.raf.close();
- } catch (Exception var21) {
- }
-
- }
-
- private void subDate(long var1) {
- try {
- this.raf.seek(this.infoLocation + 4L);
- this.raf.writeLong(var1);
- } catch (Exception var3) {
- this.msg();
- }
-
- }
- }
-