mirror of
https://github.com/2006-Scape/Parabot.git
synced 2026-07-03 00:37:55 +00:00
Merge branch 'development' into feature/PushBulletNotifications
This commit is contained in:
+1
-1
@@ -32,7 +32,7 @@ env:
|
||||
- secure: UG+b1tEgc8xv9x4r//2OAIK1RrYv6n209KTTFMMwcnAa7DI8HaP8nljRa5/VhDhuKHdlVrYH/tI90v7UVBs0GDVNwK5V17Io0fMm3FUGZekSthTCqqno5wAGa9r6a6mMLtSaSmIFeIKi0+0d2ZwplRuhj/dtEYjjBBj+kK8g4nE=
|
||||
- secure: St/fecUDInFBCRriYqgp2F8PU9/SooorgxD9Mrs+b0EsC7AbtSsQXvdIv2Lp6xzdQ0VSXPcLIhULPOYrmBKnGQ/NjXTIZXxnroyQxxnI6xyEWIZwiHRY/bKRJDRbQTxD9NL32szKiDSwnw7pu6llF4D64UqQvziq4Gm6VohU75M=
|
||||
- secure: bD15GVZWowiknbfLavh8CxSh0GsnF5kT4kZ6ggCuUDGyj0mzqf7dNRnchQIKkCG0WRYyTrFN4pEiygeywWsipEeAVv9Xhx3cuUZmzeQaR5KCWabSwJ8gK6jZd1YhcWmM9vrdPHobZr65MP0y/8mu/Fovgky9dY7KDf4G3SebNrM=
|
||||
- PARABOT_VERSION=2.6.2
|
||||
- PARABOT_VERSION=2.6.4
|
||||
|
||||
cache:
|
||||
directories:
|
||||
|
||||
@@ -3,23 +3,28 @@
|
||||
|
||||
# Parabot
|
||||
|
||||
Parabot V2.6.2.
|
||||
Parabot V2.6.3.
|
||||
|
||||
#### Website
|
||||
#### Links
|
||||
|
||||
[Community, scripts & more](http://www.parabot.org/)
|
||||
[Website](http://www.parabot.org/)
|
||||
|
||||
[Download latest version](http://v3.bdn.parabot.org/api/bot/download/client)
|
||||
|
||||
#### Compilation
|
||||
You'll need the [libraries](https://github.com/Parabot/Parabot/tree/master/libs) in order to compile parabot successfully.
|
||||
The POM file contains the redirection to the libraries, so simply install them with Maven.
|
||||
Build the project with the Maven POM file to have all required libraries installed.
|
||||
|
||||
#### Automation
|
||||
Every stable build is automatically generated from the last commits of the master branch. This will take the version from both the `pom.xml` and the version in `.travis.yml`.
|
||||
|
||||
The nightly builds are automatically created from the last commits of the development branch. This will take the version from both the `pom.xml` and the version in `.travis.yml`, together with the build ID from travis.
|
||||
|
||||
#### Issues
|
||||
If you've an issues regarding the bot itself, please report them [here](https://github.com/Parabot/Parabot/issues).
|
||||
|
||||
#### Maven
|
||||
Parabot supports Maven as of September 2015. All information is included in the POM.xml.
|
||||
The API that is supported by Parabot is also published on a Maven repository.
|
||||
If you'd like to have either or both the client and the API in your project, use the following repository and dependecy tags:
|
||||
To add the client as a library, you'll first have to add our repository to your `pom.xml`:
|
||||
|
||||
```
|
||||
<repositories>
|
||||
<repository>
|
||||
@@ -28,22 +33,19 @@ If you'd like to have either or both the client and the API in your project, use
|
||||
<url>https://maven.parabot.org/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
```
|
||||
|
||||
Then you'll need to add the dependency:
|
||||
|
||||
```
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.parabot</groupId>
|
||||
<artifactId>client</artifactId>
|
||||
<version>2.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.parabot</groupId>
|
||||
<artifactId>317provider</artifactId>
|
||||
<version>1.14</version>
|
||||
<version>2.6.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
**For the latest versions of our dependencies, please check our examples on [the Maven Repository](https://github.com/Parabot/Maven-Repository/tree/master/examples)**
|
||||
|
||||
|
||||
#### Labels
|
||||
Labels are created with [GHLabel](https://github.com/jimmycuadra/ghlabel), whereas the yml is located in the .github directory
|
||||
@@ -6,8 +6,8 @@
|
||||
|
||||
<groupId>org.parabot</groupId>
|
||||
<artifactId>client</artifactId>
|
||||
<version>2.6.3</version>
|
||||
|
||||
<version>2.6.4</version>
|
||||
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
|
||||
@@ -20,19 +20,18 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
|
||||
|
||||
private String className;
|
||||
|
||||
private static PrintStream str_out, class_out, dec_out;
|
||||
private static PrintStream str_out, class_out;
|
||||
|
||||
static {
|
||||
redirects.put("java/awt/Toolkit", ToolkitRedirect.class);
|
||||
redirects.put("java/lang/Class", ClassRedirect.class);
|
||||
redirects.put("java/lang/ClassLoader", ClassLoaderRedirect.class);
|
||||
// redirects.put("java/lang/ClassLoader", ClassLoaderRedirect.class);
|
||||
redirects.put("java/lang/Runtime", RuntimeRedirect.class);
|
||||
redirects.put("java/lang/Thread", ThreadRedirect.class);
|
||||
redirects.put("java/lang/StackTraceElement",
|
||||
StackTraceElementRedirect.class);
|
||||
redirects.put("java/lang/ProcessBuilder", ProcessBuilderRedirect.class);
|
||||
redirects.put("java/lang/System", SystemRedirect.class);
|
||||
redirects.put("java/io/File", FileRedirect.class);
|
||||
}
|
||||
|
||||
public RedirectClassAdapter(ClassVisitor cv) {
|
||||
@@ -40,31 +39,27 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
|
||||
if (str_out == null && Core.shouldDump())
|
||||
try {
|
||||
str_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"strings.txt")));
|
||||
dec_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"decrypted_strings.txt")));
|
||||
} catch (FileNotFoundException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if(class_out == null && Core.shouldDump())
|
||||
try {
|
||||
class_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"classes.txt")));
|
||||
} catch (FileNotFoundException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(int version, int access, String name, String signature,
|
||||
String superName, String[] interfaces) {
|
||||
String superName, String[] interfaces) {
|
||||
this.className = name;
|
||||
super.visit(version, access, name, signature, superName, interfaces);
|
||||
if(class_out != null) {
|
||||
class_out.println(className + " References:");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void visitEnd(){
|
||||
super.visitEnd();
|
||||
@@ -76,7 +71,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
|
||||
|
||||
@Override
|
||||
public MethodVisitor visitMethod(int access, String name, String desc,
|
||||
String signature, String[] exceptions) {
|
||||
String signature, String[] exceptions) {
|
||||
return new ReflectionMethodVisitor(name, desc, super.visitMethod(
|
||||
access, name, desc, signature, exceptions));
|
||||
}
|
||||
@@ -84,45 +79,43 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
|
||||
private class ReflectionMethodVisitor extends MethodVisitor {
|
||||
|
||||
public ReflectionMethodVisitor(String name, String desc,
|
||||
MethodVisitor mv) {
|
||||
MethodVisitor mv) {
|
||||
super(ASM5, mv);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitLdcInsn(Object o) {
|
||||
if (o instanceof String && str_out != null) {
|
||||
str_out.println(className + " " + o);
|
||||
if (!className.toLowerCase().contains("parabot")) {
|
||||
dec_out.println(o + ":");
|
||||
dec_out.println();
|
||||
}
|
||||
}
|
||||
if (o instanceof String && str_out != null) {
|
||||
str_out.println(className + " " + o);
|
||||
}
|
||||
super.visitLdcInsn(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name,
|
||||
String desc) {
|
||||
String desc, boolean itf) {
|
||||
if (Core.isSecure()) {
|
||||
if (redirects.containsKey(owner) && !name.equals("<init>")
|
||||
&& !name.equals("<clinit>")) {
|
||||
if (opcode != INVOKESTATIC)
|
||||
if (opcode != INVOKESTATIC) {
|
||||
desc = "(L" + owner + ";" + desc.substring(1);
|
||||
}
|
||||
opcode = INVOKESTATIC;
|
||||
owner = redirects.get(owner).getName()
|
||||
.replaceAll("\\.", "/");
|
||||
}
|
||||
}
|
||||
|
||||
if(class_out != null)
|
||||
class_out.println(owner);
|
||||
|
||||
super.visitMethodInsn(opcode, owner, name, desc);
|
||||
if(class_out != null) {
|
||||
class_out.println(owner);
|
||||
}
|
||||
|
||||
super.visitMethodInsn(opcode, owner, name, desc, itf);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void visitFieldInsn(int opcode, String owner, String name,
|
||||
String desc){
|
||||
String desc){
|
||||
if (Core.isSecure() && (opcode == GETSTATIC || opcode == PUTSTATIC)) {
|
||||
if (redirects.containsKey(owner)) {
|
||||
owner = redirects.get(owner).getName()
|
||||
@@ -133,7 +126,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
|
||||
class_out.println(owner);
|
||||
super.visitFieldInsn(opcode, owner, name, desc);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static SecurityException createSecurityException() {
|
||||
|
||||
@@ -1,15 +1,53 @@
|
||||
package org.parabot.core.asm.redirect;
|
||||
|
||||
import org.parabot.core.Core;
|
||||
import org.parabot.core.asm.RedirectClassAdapter;
|
||||
|
||||
public class ClassLoaderRedirect {
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.Enumeration;
|
||||
|
||||
public class ClassLoaderRedirect extends ClassLoader {
|
||||
|
||||
static int count = 0;
|
||||
|
||||
public static Class<?>loadClass(ClassLoader c,String name){
|
||||
throw RedirectClassAdapter.createSecurityException();
|
||||
}
|
||||
static int count = 0;
|
||||
|
||||
public static ClassLoader getParent(ClassLoader c){
|
||||
throw RedirectClassAdapter.createSecurityException();
|
||||
}
|
||||
|
||||
public static URL getResource(ClassLoader classLoader, String name) {
|
||||
Core.verbose("#getResource requested for ClassLoaderRedirect (" + name + ")");
|
||||
return classLoader.getResource(name);
|
||||
}
|
||||
|
||||
public static Enumeration<URL> getResources(ClassLoader classLoader, String name) throws IOException {
|
||||
Core.verbose("#getResource requested for ClassLoaderRedirect (" + name + ")");
|
||||
return classLoader.getResources(name);
|
||||
}
|
||||
|
||||
public static InputStream getResourceAsStream(ClassLoader classLoader, String name) {
|
||||
Core.verbose("#getResourceAsStream requested for ClassLoaderRedirect (" + name + ")");
|
||||
return classLoader.getResourceAsStream(name);
|
||||
}
|
||||
|
||||
public static void setDefaultAssertionStatus(ClassLoader classLoader, boolean enabled) {
|
||||
|
||||
}
|
||||
|
||||
public static void setPackageAssertionStatus(ClassLoader classLoader, String packageName, boolean enabled) {
|
||||
|
||||
}
|
||||
|
||||
public static void setClassAssertionStatus(ClassLoader classLoader, String className, boolean enabled) {
|
||||
|
||||
}
|
||||
|
||||
public static void clearAssertionStatus(ClassLoader classLoader) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ public class ClassRedirect {
|
||||
if (validStack()) {
|
||||
return c.getDeclaredField(s);
|
||||
}
|
||||
|
||||
System.out.println(c.getName() + "." + c.getDeclaredField(s) + " Blocked.");
|
||||
throw RedirectClassAdapter.createSecurityException();
|
||||
}
|
||||
@@ -29,6 +30,7 @@ public class ClassRedirect {
|
||||
if (validStack()) {
|
||||
return c.getDeclaredMethod(name, params);
|
||||
}
|
||||
|
||||
System.out.println(c.getName() + "#" + c.getDeclaredMethod(name, params) + " Blocked.");
|
||||
throw RedirectClassAdapter.createSecurityException();
|
||||
}
|
||||
|
||||
@@ -5,28 +5,40 @@ import org.parabot.core.asm.RedirectClassAdapter;
|
||||
import java.io.IOException;
|
||||
|
||||
public class RuntimeRedirect {
|
||||
|
||||
public static Runtime getRuntime(){
|
||||
return Runtime.getRuntime();
|
||||
}
|
||||
|
||||
public static int availableProcessors(Runtime r){
|
||||
//lol faking it, fuck ikov
|
||||
return 2;
|
||||
}
|
||||
|
||||
public static Process exec(Runtime r,String s){
|
||||
if (s.contains("ping")){
|
||||
System.out.println("Faked attempted command: " + s);
|
||||
try {
|
||||
return r.exec("ping 127.0.0.1");
|
||||
} catch (IOException e) {
|
||||
throw RedirectClassAdapter.createSecurityException();
|
||||
}
|
||||
}else{
|
||||
System.out.println("Blocked attempted command: " + s);
|
||||
throw RedirectClassAdapter.createSecurityException();
|
||||
}
|
||||
}
|
||||
|
||||
public static Runtime getRuntime() {
|
||||
return Runtime.getRuntime();
|
||||
}
|
||||
|
||||
public static int availableProcessors(Runtime r) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
public static long totalMemory(Runtime runtime) {
|
||||
return (long) 1024;
|
||||
}
|
||||
|
||||
public static long freeMemory(Runtime runtime) {
|
||||
return (long) 1024;
|
||||
}
|
||||
|
||||
public static Process exec(Runtime r, String[] s) {
|
||||
System.out.println("Blocked attempted command: " + s);
|
||||
throw RedirectClassAdapter.createSecurityException();
|
||||
}
|
||||
|
||||
public static Process exec(Runtime r, String s) {
|
||||
if (s.contains("ping")) {
|
||||
System.out.println("Faked attempted command: " + s);
|
||||
try {
|
||||
return r.exec("ping 127.0.0.1");
|
||||
} catch (IOException e) {
|
||||
throw RedirectClassAdapter.createSecurityException();
|
||||
}
|
||||
} else {
|
||||
System.out.println("Blocked attempted command: " + s);
|
||||
throw RedirectClassAdapter.createSecurityException();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -27,7 +27,10 @@ public class SystemRedirect {
|
||||
String value;
|
||||
switch (s) {
|
||||
case "user.home":
|
||||
value = Directories.getHomeDir().getAbsolutePath();
|
||||
value = Directories.getCachePath().getAbsolutePath();
|
||||
break;
|
||||
case "java.class.path":
|
||||
value = ".";
|
||||
break;
|
||||
default:
|
||||
value = System.getProperty(s);
|
||||
@@ -40,14 +43,20 @@ public class SystemRedirect {
|
||||
String value = null;
|
||||
switch (s2) {
|
||||
case "user.home":
|
||||
value = Directories.getHomeDir().getAbsolutePath();
|
||||
value = Directories.getCachePath().getAbsolutePath();
|
||||
break;
|
||||
case "java.class.path":
|
||||
value = ".";
|
||||
break;
|
||||
}
|
||||
|
||||
if (value == null) {
|
||||
switch (s) {
|
||||
case "user.home":
|
||||
value = Directories.getHomeDir().getAbsolutePath();
|
||||
value = Directories.getCachePath().getAbsolutePath();
|
||||
break;
|
||||
case "java.class.path":
|
||||
value = ".";
|
||||
break;
|
||||
default:
|
||||
value = System.getProperty(s);
|
||||
@@ -62,11 +71,12 @@ public class SystemRedirect {
|
||||
}
|
||||
|
||||
public static String setProperty(String s1, String s2) {
|
||||
System.out.printf("SetSystemProp %s = %s", s1, s2);
|
||||
System.out.printf("SetSystemProp %s = %s\n", s1, s2);
|
||||
return System.setProperty(s1, s2);
|
||||
}
|
||||
|
||||
public static String getenv(String string) {
|
||||
System.out.printf("getEnv %s = %s\n", string, System.getenv(string));
|
||||
return System.getenv(string);
|
||||
}
|
||||
|
||||
@@ -74,7 +84,6 @@ public class SystemRedirect {
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void setErr(PrintStream printStream) {
|
||||
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import org.parabot.core.asm.ASMClassLoader;
|
||||
import org.parabot.core.classpath.ClassPath;
|
||||
import org.parabot.core.reflect.RefClass;
|
||||
import org.parabot.core.reflect.RefField;
|
||||
import org.parabot.environment.api.utils.StringUtils;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.TreeSelectionEvent;
|
||||
@@ -91,6 +92,8 @@ public class ReflectUI extends JFrame {
|
||||
result = f;
|
||||
} else if (value.toLowerCase().endsWith(search.toLowerCase())) {
|
||||
result = f;
|
||||
} else if (value.toLowerCase().contains(search.toLowerCase())) {
|
||||
result = f;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -238,6 +241,13 @@ public class ReflectUI extends JFrame {
|
||||
builder.append("<b>Type: </b>").append(refField.getASMType().getClassName()).append("<br/>");
|
||||
builder.append("<b>Static: </b>").append(refField.isStatic() ? "yes" : "no").append("<br/>");
|
||||
builder.append("<b>Array: </b>").append(refField.isArray() ? refField.getArrayDimensions() + " dimension(s)" : "no").append("<br/>");
|
||||
|
||||
if (refField.isArray() && refField.getASMType().getClassName().contains("String") && refField.getArrayDimensions() == 1) {
|
||||
String[] strings = (String[]) refField.asObject();
|
||||
String values = StringUtils.implode(", ", strings);
|
||||
|
||||
builder.append("<b>Values: </b>").append(values).append("<br/>");
|
||||
}
|
||||
selectionInfoPane.setText(builder.toString());
|
||||
|
||||
fillBasicInfoPane();
|
||||
|
||||
@@ -28,6 +28,19 @@ public class StringUtils {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static String implode(String separator, String... data) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < data.length - 1; i++) {
|
||||
//data.length - 1 => to not add separator at the end
|
||||
if (!data[i].matches(" *")) {//empty string are ""; " "; " "; and so on
|
||||
sb.append(data[i]);
|
||||
sb.append(separator);
|
||||
}
|
||||
}
|
||||
sb.append(data[data.length - 1].trim());
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static String randomString(final int length) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < 20; i++) {
|
||||
|
||||
@@ -109,7 +109,12 @@ public class RandomHandler {
|
||||
for (Random r : this.activeRandoms) {
|
||||
if (r.getRandomType().getId() == type.getId() && r.activate()) {
|
||||
Logger.addMessage("Running random '" + r.getName() + "'", true);
|
||||
r.execute();
|
||||
try {
|
||||
r.execute();
|
||||
}catch (Exception e){
|
||||
Logger.addMessage("Random failed: '" + r.getName() + "'", false);
|
||||
e.printStackTrace();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user