[TASK] Reverted class adapter

This commit is contained in:
JKetelaar
2017-01-23 14:53:49 +01:00
parent e9564935c9
commit b533a8a64c
@@ -20,7 +20,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
private String className; private String className;
private static PrintStream str_out, class_out, dec_out; private static PrintStream str_out, class_out;
static { static {
redirects.put("java/awt/Toolkit", ToolkitRedirect.class); redirects.put("java/awt/Toolkit", ToolkitRedirect.class);
@@ -32,7 +32,6 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
StackTraceElementRedirect.class); StackTraceElementRedirect.class);
redirects.put("java/lang/ProcessBuilder", ProcessBuilderRedirect.class); redirects.put("java/lang/ProcessBuilder", ProcessBuilderRedirect.class);
redirects.put("java/lang/System", SystemRedirect.class); redirects.put("java/lang/System", SystemRedirect.class);
redirects.put("java/io/File", FileRedirect.class);
} }
public RedirectClassAdapter(ClassVisitor cv) { public RedirectClassAdapter(ClassVisitor cv) {
@@ -40,31 +39,26 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
if (str_out == null && Core.shouldDump()) if (str_out == null && Core.shouldDump())
try { try {
str_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"strings.txt"))); 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) {
} catch (FileNotFoundException e) { e.printStackTrace();
// TODO Auto-generated catch block }
e.printStackTrace();
}
if(class_out == null && Core.shouldDump()) if(class_out == null && Core.shouldDump())
try { try {
class_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"classes.txt"))); class_out = new PrintStream(new FileOutputStream(new File(Directories.getWorkspace(),"classes.txt")));
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
// TODO Auto-generated catch block e.printStackTrace();
e.printStackTrace(); }
}
} }
@Override @Override
public void visit(int version, int access, String name, String signature, public void visit(int version, int access, String name, String signature,
String superName, String[] interfaces) { String superName, String[] interfaces) {
this.className = name; this.className = name;
super.visit(version, access, name, signature, superName, interfaces); super.visit(version, access, name, signature, superName, interfaces);
if(class_out != null) { if(class_out != null)
class_out.println(className + " References:"); class_out.println(className + " References:");
}
} }
@Override @Override
public void visitEnd(){ public void visitEnd(){
super.visitEnd(); super.visitEnd();
@@ -76,7 +70,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
@Override @Override
public MethodVisitor visitMethod(int access, String name, String desc, public MethodVisitor visitMethod(int access, String name, String desc,
String signature, String[] exceptions) { String signature, String[] exceptions) {
return new ReflectionMethodVisitor(name, desc, super.visitMethod( return new ReflectionMethodVisitor(name, desc, super.visitMethod(
access, name, desc, signature, exceptions)); access, name, desc, signature, exceptions));
} }
@@ -84,45 +78,43 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
private class ReflectionMethodVisitor extends MethodVisitor { private class ReflectionMethodVisitor extends MethodVisitor {
public ReflectionMethodVisitor(String name, String desc, public ReflectionMethodVisitor(String name, String desc,
MethodVisitor mv) { MethodVisitor mv) {
super(ASM5, mv); super(ASM5, mv);
} }
@Override @Override
public void visitLdcInsn(Object o) { public void visitLdcInsn(Object o) {
if (o instanceof String && str_out != null) { if (o instanceof String && str_out != null) {
str_out.println(className + " " + o); str_out.println(className + " " + o);
if (!className.toLowerCase().contains("parabot")) { }
dec_out.println(o + ":");
dec_out.println();
}
}
super.visitLdcInsn(o); super.visitLdcInsn(o);
} }
@Override @Override
public void visitMethodInsn(int opcode, String owner, String name, public void visitMethodInsn(int opcode, String owner, String name,
String desc) { String desc) {
if (Core.isSecure()) { if (Core.isSecure()) {
if (redirects.containsKey(owner) && !name.equals("<init>") if (redirects.containsKey(owner) && !name.equals("<init>")
&& !name.equals("<clinit>")) { && !name.equals("<clinit>")) {
if (opcode != INVOKESTATIC) if (opcode != INVOKESTATIC) {
desc = "(L" + owner + ";" + desc.substring(1); desc = "(L" + owner + ";" + desc.substring(1);
}
opcode = INVOKESTATIC; opcode = INVOKESTATIC;
owner = redirects.get(owner).getName() owner = redirects.get(owner).getName()
.replaceAll("\\.", "/"); .replaceAll("\\.", "/");
} }
} }
if(class_out != null) if(class_out != null) {
class_out.println(owner); class_out.println(owner);
}
super.visitMethodInsn(opcode, owner, name, desc); super.visitMethodInsn(opcode, owner, name, desc);
} }
@Override @Override
public void visitFieldInsn(int opcode, String owner, String name, public void visitFieldInsn(int opcode, String owner, String name,
String desc){ String desc){
if (Core.isSecure() && (opcode == GETSTATIC || opcode == PUTSTATIC)) { if (Core.isSecure() && (opcode == GETSTATIC || opcode == PUTSTATIC)) {
if (redirects.containsKey(owner)) { if (redirects.containsKey(owner)) {
owner = redirects.get(owner).getName() owner = redirects.get(owner).getName()
@@ -133,7 +125,7 @@ public class RedirectClassAdapter extends ClassVisitor implements Opcodes {
class_out.println(owner); class_out.println(owner);
super.visitFieldInsn(opcode, owner, name, desc); super.visitFieldInsn(opcode, owner, name, desc);
} }
} }
public static SecurityException createSecurityException() { public static SecurityException createSecurityException() {