Skip to content

Commit 97dc133

Browse files
committed
update Class load :)
1 parent faaa81e commit 97dc133

File tree

5 files changed

+37
-21
lines changed

5 files changed

+37
-21
lines changed

README.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ By. Whoopsunix
4242
- [Sqlite](#sqlite)
4343
- [0x06 Serialization](#0x06-serialization)
4444
- [BCEL](#bcel)
45-
- [远程Jar加载](#remotejar)
45+
- [远程类加载](#remotejar)
4646
- [XMLSerialization](#xmlserialization)
4747
- [JavaBean](#jarbean)
4848
- [XStream](#xstream)
@@ -216,11 +216,13 @@ Version Test
216216
- [x] 构造方法触发
217217
- [x] 方法触发
218218

219-
## [RemoteJar](Serialization/AttackJar)
219+
## [RemoteJar](Serialization/ClassLoad)
220220

221-
- [x] static 触发
222-
- [x] 构造方法触发
223-
- [x] 方法触发
221+
- [x] URLClassLoader
222+
- [x] static 触发
223+
- [x] 构造方法触发
224+
- [x] 方法触发
225+
- [x] AppClassLoader
224226

225227
## [XMLSerialization](Serialization/XMLSerialization)
226228

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.example;
2+
3+
import java.lang.reflect.Method;
4+
import java.util.Base64;
5+
6+
/**
7+
* @author Whoopsunix
8+
*/
9+
public class AppClassLoaderDemo {
10+
public static void main(String[] args) throws Exception{
11+
/**
12+
* Base64解密后加载
13+
*/
14+
// generate
15+
// String b64Str = new B64().encodeJavaClass(Exec.class);
16+
17+
String b64Str = "yv66vgAAADQAIgoABwAVCgAWABcIABgKABYAGQcAGgcAGwcAHAEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQASTG9yZy9leGFtcGxlL0V4ZWM7AQANU3RhY2tNYXBUYWJsZQcAGwcAGgEACDxjbGluaXQ+AQAKU291cmNlRmlsZQEACUV4ZWMuamF2YQwACAAJBwAdDAAeAB8BABZvcGVuIC1hIENhbGN1bGF0b3IuYXBwDAAgACEBABNqYXZhL2xhbmcvRXhjZXB0aW9uAQAQb3JnL2V4YW1wbGUvRXhlYwEAEGphdmEvbGFuZy9PYmplY3QBABFqYXZhL2xhbmcvUnVudGltZQEACmdldFJ1bnRpbWUBABUoKUxqYXZhL2xhbmcvUnVudGltZTsBAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7ACEABgAHAAAAAAACAAEACAAJAAEACgAAAGoAAgACAAAAEiq3AAG4AAISA7YABFenAARMsQABAAQADQAQAAUAAwALAAAAFgAFAAAABwAEAAkADQALABAACgARAAwADAAAAAwAAQAAABIADQAOAAAADwAAABAAAv8AEAABBwAQAAEHABEAAAgAEgAJAAEACgAAAE8AAgABAAAADrgAAhIDtgAEV6cABEuxAAEAAAAJAAwABQADAAsAAAASAAQAAAAQAAkAEgAMABEADQATAAwAAAACAAAADwAAAAcAAkwHABEAAAEAEwAAAAIAFA==";
18+
19+
byte[] bytes = Base64.getDecoder().decode(b64Str);
20+
// ClassLoader classLoader = this.getClass().getClassLoader();
21+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
22+
23+
Method defineClassMethod = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
24+
defineClassMethod.setAccessible(true);
25+
Class<?> loadedClass = (Class<?>) defineClassMethod.invoke(classLoader, bytes, 0, bytes.length);
26+
loadedClass.newInstance();
27+
}
28+
}

Serialization/AttackJar/src/main/java/org/example/Run.java renamed to Serialization/ClassLoad/src/main/java/org/example/URLClassLoaderDemo.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66
/**
77
* @author Whoopsunix
8+
* URLClassLoader 类加载
89
*/
9-
public class Run {
10+
public class URLClassLoaderDemo {
1011
public static void main(String[] args) throws Exception {
1112
/**
1213
* 调用 static
@@ -45,21 +46,6 @@ public static void main(String[] args) throws Exception {
4546
// loadedClass.getMethod("exec", String.class).invoke(object, "open -a Calculator.app");
4647

4748

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();
5949

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();
6450
}
6551
}

0 commit comments

Comments
 (0)