diff --git a/deploy/deploy.bat b/deploy/deploy.bat index 971e9b7..101b8a7 100644 --- a/deploy/deploy.bat +++ b/deploy/deploy.bat @@ -5,5 +5,5 @@ mvn install:install-file -DgroupId=${project.groupId} -DartifactId=${project.art :: mvn install:install-file -DgroupId=org.parabot -DartifactId=client -Dversion=2.2.33 -Dpackaging=jar -Dfile=../target/Parabot-V2.2.33.jar -DlocalRepositoryPath=../../Maven-Repository :: mvn install:install-file -DgroupId=org.parabot -DartifactId=client -Dversion=2.2.34 -Dpackaging=jar -Dfile=../target/Parabot-V2.2.34.jar -DlocalRepositoryPath=../../Maven-Repository :: mvn install:install-file -DgroupId=org.parabot -DartifactId=client -Dversion=2.2.35 -Dpackaging=jar -Dfile=../target/Parabot-V2.2.35.jar -DlocalRepositoryPath=../../Maven-Repository -:: mvn install:install-file -DgroupId=org.parabot -DartifactId=client -Dversion=2.2.35 -Dpackaging=jar -Dfile=../target/Parabot-V2.2.35.jar -DlocalRepositoryPath=../../Maven-Repository -:: mvn install:install-file -DgroupId=org.parabot -DartifactId=client -Dversion=2.2.36 -Dpackaging=jar -Dfile=../target/Parabot-V2.2.36.jar -DlocalRepositoryPath=../../Maven-Repository \ No newline at end of file +:: mvn install:install-file -DgroupId=org.parabot -DartifactId=client -Dversion=2.2.36 -Dpackaging=jar -Dfile=../target/Parabot-V2.2.36.jar -DlocalRepositoryPath=../../Maven-Repository +:: mvn install:install-file -DgroupId=org.parabot -DartifactId=client -Dversion=2.2.4 -Dpackaging=jar -Dfile=../target/Parabot-V2.2.4.jar -DlocalRepositoryPath=../../Maven-Repository \ No newline at end of file diff --git a/pom.xml b/pom.xml index 7456518..80a8161 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.parabot client - 2.2.36 + 2.2.4 jar @@ -58,13 +58,9 @@ true deploy.bat - package.bat - clean.bat - - diff --git a/src/main/java/org/parabot/Landing.java b/src/main/java/org/parabot/Landing.java index 587411b..8f47b43 100644 --- a/src/main/java/org/parabot/Landing.java +++ b/src/main/java/org/parabot/Landing.java @@ -40,7 +40,7 @@ public final class Landing { t.printStackTrace(); } - if (!Core.inDebugMode() && !Core.isValid()) { + if (!Core.inDebugMode() && !Core.isValid() && Core.hasValidation()) { UILog.log("Updates", "Please download the newest version of Parabot at " + Configuration.DOWNLOAD_BOT, @@ -76,81 +76,83 @@ public final class Landing { for (int i = 0; i < args.length; i++) { final String arg = args[i].toLowerCase(); switch (arg.toLowerCase()) { - case "-createdirs": - Directories.validate(); - System.out - .println("Directories created, you can now run parabot."); - System.exit(0); - break; - case "-debug": - Core.setDebug(true); - break; - case "-v": - case "-verbose": - Core.setVerbose(true); - break; - case "-server": - ServerSelector.initServer = args[++i]; - break; - case "-login": - username = args[++i]; - password = args[++i]; - break; - case "-loadlocal": - Core.setLoadLocal(true); - break; - case "-dump": - Core.setDump(true); - break; - case "-scriptsbin": - Directories.setScriptCompiledDirectory(new File(args[++i])); - break; - case "-serversbin": - Directories.setServerCompiledDirectory(new File(args[++i])); - break; - case "-clearcache": - File[] cache = Directories.getCachePath().listFiles(); - if (cache != null) { - for (File f : cache) { - if (f.exists() && f.canWrite()) { - f.delete(); + case "-createdirs": + Directories.validate(); + System.out + .println("Directories created, you can now run parabot."); + System.exit(0); + break; + case "-debug": + Core.setDebug(true); + break; + case "-v": + case "-verbose": + Core.setVerbose(true); + break; + case "-server": + ServerSelector.initServer = args[++i]; + break; + case "-login": + username = args[++i]; + password = args[++i]; + break; + case "-loadlocal": + Core.setLoadLocal(true); + break; + case "-dump": + Core.setDump(true); + break; + case "-scriptsbin": + Directories.setScriptCompiledDirectory(new File(args[++i])); + break; + case "-serversbin": + Directories.setServerCompiledDirectory(new File(args[++i])); + break; + case "-clearcache": + File[] cache = Directories.getCachePath().listFiles(); + if (cache != null) { + for (File f : cache) { + if (f.exists() && f.canWrite()) { + f.delete(); + } } } - } - break; - case "-mac": - byte[] mac = new byte[6]; - String str = args[++i]; - if (str.toLowerCase().equals("random")) { - new java.util.Random().nextBytes(mac); - } else { - i--; - for (int j = 0; j < 6; j++) { - mac[j] = Byte.parseByte(args[++i], 16); // parses a hex - // number + break; + case "-mac": + byte[] mac = new byte[6]; + String str = args[++i]; + if (str.toLowerCase().equals("random")) { + new java.util.Random().nextBytes(mac); + } else { + i--; + for (int j = 0; j < 6; j++) { + mac[j] = Byte.parseByte(args[++i], 16); // parses a hex + // number + } } - } - NetworkInterface.setMac(mac); - break; - case "-proxy": - ProxyType type = ProxyType.valueOf(args[++i].toUpperCase()); - if (type == null) { - System.err.println("Invalid proxy type:" + args[i]); - System.exit(1); - return; - } - ProxySocket.setProxy(type, args[++i], - Integer.parseInt(args[++i])); - break; - case "-auth": - ProxySocket.auth = true; - ProxySocket.setLogin(args[++i], args[++i]); - break; - case "-no_sec": - Core.disableSec(); - break; + NetworkInterface.setMac(mac); + break; + case "-proxy": + ProxyType type = ProxyType.valueOf(args[++i].toUpperCase()); + if (type == null) { + System.err.println("Invalid proxy type:" + args[i]); + System.exit(1); + return; + } + ProxySocket.setProxy(type, args[++i], + Integer.parseInt(args[++i])); + break; + case "-auth": + ProxySocket.auth = true; + ProxySocket.setLogin(args[++i], args[++i]); + break; + case "-no_sec": + Core.disableSec(); + break; + case "-no_validation": + Core.disableValidation(); + break; } - } } } diff --git a/src/main/java/org/parabot/core/Core.java b/src/main/java/org/parabot/core/Core.java index b398955..8e2e683 100644 --- a/src/main/java/org/parabot/core/Core.java +++ b/src/main/java/org/parabot/core/Core.java @@ -28,8 +28,17 @@ public class Core { private static boolean dump; private static boolean loadLocal; //Loads both local and public scripts/servers + private static boolean validate = true; private static boolean secure = true; - + + public static void disableValidation() { + Core.validate = false; + } + + public static boolean hasValidation() { + return validate; + } + /** * Enabled loadLocal mode * @@ -118,7 +127,6 @@ public class Core { * Checks the version of the bot using a checksum of the jar comparison against checksum given by the website * @return true if no new version is found, otherwise false. */ - @SuppressWarnings("unused") private static boolean checksumValid(){ File f = new File(Landing.class.getProtectionDomain().getCodeSource().getLocation().getFile()); if (f.isFile()) { diff --git a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java index db6f7ae..2f80330 100644 --- a/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java +++ b/src/main/java/org/parabot/core/asm/RedirectClassAdapter.java @@ -107,6 +107,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes { if(class_out != null) class_out.println(owner); + super.visitMethodInsn(opcode, owner, name, desc); } diff --git a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java index 4e50d2f..dd8c647 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ClassRedirect.java @@ -1,47 +1,127 @@ package org.parabot.core.asm.redirect; +import org.parabot.core.asm.RedirectClassAdapter; +import org.parabot.environment.scripts.Script; + import java.io.InputStream; +import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; -import org.parabot.core.asm.RedirectClassAdapter; - public class ClassRedirect { - - public static Object newInstance(Classc){ - throw RedirectClassAdapter.createSecurityException(); - } - - public static Field getDeclaredField(Class c, String s) throws NoSuchFieldException, SecurityException{ - System.out.println(c.getName() + "." + c.getDeclaredField(s) + " Blocked."); - throw RedirectClassAdapter.createSecurityException(); - } - - public static Method getDeclaredMethod(Classc,String name,Class... params) throws NoSuchMethodException, SecurityException{ - System.out.println(c.getName() + "#" + c.getDeclaredMethod(name,params) + " Blocked."); - throw RedirectClassAdapter.createSecurityException(); - } - - public static Class forName(String name) throws ClassNotFoundException{ - if(name.contains("parabot")) - throw new ClassNotFoundException(); - return Class.forName(name); - } - - public static ClassLoader getClassLoader(Classc){ - throw RedirectClassAdapter.createSecurityException(); - } - - public static String getName(Classc){ - if(c.getName().contains("parabot")) - return "java.lang.String"; - return c.getName(); - } - - public static InputStream getResourceAsStream(Classc, String res){ - if(res.contains(".class")) - throw RedirectClassAdapter.createSecurityException(); - return c.getResourceAsStream(res); - } + public static Object newInstance(Class c) throws IllegalAccessException, InstantiationException { + if (validStack()){ + return c.newInstance(); + } + throw RedirectClassAdapter.createSecurityException(); + } + + public static Field getDeclaredField(Class c, String s) throws NoSuchFieldException, SecurityException { + if (validStack()) { + return c.getDeclaredField(s); + } + System.out.println(c.getName() + "." + c.getDeclaredField(s) + " Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + + public static Method getDeclaredMethod(Class c, String name, Class... params) throws NoSuchMethodException, SecurityException { + if (validStack()) { + return c.getDeclaredMethod(name, params); + } + System.out.println(c.getName() + "#" + c.getDeclaredMethod(name, params) + " Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + + public static Class forName(String name) throws ClassNotFoundException { + if (name.contains("parabot")) + throw new ClassNotFoundException(); + return Class.forName(name); + } + + public static ClassLoader getClassLoader(Class c) { + throw RedirectClassAdapter.createSecurityException(); + } + + public static Field[] getDeclaredFields(Class c) { + if (validStack()) { + return c.getDeclaredFields(); + } + System.out.println(c.getName() + "#getDeclaredFields()" + " Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + + public static Method[] getDeclaredMethods(Class c) { + if (validStack()) { + return c.getDeclaredMethods(); + } + System.out.println(c.getName() + "#getDeclaredMethods()" + " Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + + public static Field[] getFields(Class c){ + if (validStack()) { + return c.getFields(); + } + System.out.println(c.getName() + "#getFields()" + " Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + + public static Annotation[] getAnnotations(Class c){ + if (validStack()){ + return c.getAnnotations(); + } + System.out.println(c.getName() + "#getFields()" + " Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + + public static Method[] getMethods(Class c){ + if (validStack()) { + return c.getMethods(); + } + System.out.println(c.getName() + "#getMethods()" + " Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + + public static Method getMethod(Class c, String name, Class... params) throws NoSuchMethodException, SecurityException { + if (validStack()) { + return c.getMethod(name, params); + } + System.out.println(c.getName() + "#getMethod()" + " Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + + public static Field getField(Class c, String name) + throws NoSuchFieldException, SecurityException { + if (validStack()) { + return c.getField(name); + } + System.out.println(c.getName() + "#getField()" + " Blocked."); + throw RedirectClassAdapter.createSecurityException(); + } + + public static String getName(Class c) { + if (c.getName().contains("parabot")) + return "java.lang.String"; + return c.getName(); + } + + public static InputStream getResourceAsStream(Class c, String res) { + if (validStack()) { + return c.getResourceAsStream(res); + } + if (res.contains(".class")) { + throw RedirectClassAdapter.createSecurityException(); + } + return c.getResourceAsStream(res); + } + + private static boolean validStack() { + Exception e = new Exception(); + for (StackTraceElement elem : e.getStackTrace()) { + if (elem.getClassName().equals(Script.class.getName())) + return true; + } + return false; + } } diff --git a/src/main/java/org/parabot/core/reflect/RefClass.java b/src/main/java/org/parabot/core/reflect/RefClass.java index 0c30073..9732788 100644 --- a/src/main/java/org/parabot/core/reflect/RefClass.java +++ b/src/main/java/org/parabot/core/reflect/RefClass.java @@ -1,5 +1,6 @@ package org.parabot.core.reflect; +import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -85,6 +86,10 @@ public class RefClass extends RefModifiers { return this.clazz.getCanonicalName(); } + public Annotation[] getAnnotations(){ + return this.clazz.getAnnotations(); + } + /** * Gets the type of this class *