mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-21 22:50:42 +08:00
feat: support scriptEngineJar packer
This commit is contained in:
+1
-4
@@ -1,7 +1,4 @@
|
||||
package com.reajason.javaweb.packer.jar;
|
||||
|
||||
import com.reajason.javaweb.packer.JarPackerConfig;
|
||||
import com.reajason.javaweb.packer.Packer;
|
||||
package com.reajason.javaweb.packer;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
@@ -19,10 +19,7 @@ import com.reajason.javaweb.packer.groovy.GroovyScriptEnginePacker;
|
||||
import com.reajason.javaweb.packer.h2.H2JSPacker;
|
||||
import com.reajason.javaweb.packer.h2.H2JavacPacker;
|
||||
import com.reajason.javaweb.packer.h2.H2Packer;
|
||||
import com.reajason.javaweb.packer.jar.AgentJarPacker;
|
||||
import com.reajason.javaweb.packer.jar.AgentJarWithJDKAttacherPacker;
|
||||
import com.reajason.javaweb.packer.jar.AgentJarWithJREAttacherPacker;
|
||||
import com.reajason.javaweb.packer.jar.DefaultJarPacker;
|
||||
import com.reajason.javaweb.packer.jar.*;
|
||||
import com.reajason.javaweb.packer.jexl.JEXLPacker;
|
||||
import com.reajason.javaweb.packer.jinjava.JinJavaPacker;
|
||||
import com.reajason.javaweb.packer.jsp.ClassLoaderJspPacker;
|
||||
@@ -72,7 +69,13 @@ public enum Packers {
|
||||
Base64URLEncoded(new Base64URLEncoded(), Base64Packer.class),
|
||||
GzipBase64(new GzipBase64Packer(), Base64Packer.class),
|
||||
|
||||
Jar(new DefaultJarPacker()),
|
||||
/**
|
||||
* JSP 打包器
|
||||
*/
|
||||
JSP(new JspPacker()),
|
||||
ClassLoaderJSP(new ClassLoaderJspPacker(), JspPacker.class),
|
||||
DefineClassJSP(new DefineClassJspPacker(), JspPacker.class),
|
||||
JSPX(new JspxPacker(), JspPacker.class),
|
||||
|
||||
/**
|
||||
* BigInteger
|
||||
@@ -84,14 +87,6 @@ public enum Packers {
|
||||
*/
|
||||
BCEL(new BCELPacker()),
|
||||
|
||||
/**
|
||||
* JSP 打包器
|
||||
*/
|
||||
JSP(new JspPacker()),
|
||||
ClassLoaderJSP(new ClassLoaderJspPacker(), JspPacker.class),
|
||||
DefineClassJSP(new DefineClassJspPacker(), JspPacker.class),
|
||||
JSPX(new JspxPacker(), JspPacker.class),
|
||||
|
||||
/**
|
||||
* 脚本引擎打包器
|
||||
*/
|
||||
@@ -168,6 +163,9 @@ public enum Packers {
|
||||
H2Javac(new H2JavacPacker(), H2Packer.class),
|
||||
H2JS(new H2JSPacker(), H2Packer.class),
|
||||
|
||||
Jar(new DefaultJarPacker()),
|
||||
ScriptEngineJar(new ScriptEngineJarPacker()),
|
||||
|
||||
XxlJob(new XxlJobPacker()),
|
||||
;
|
||||
private final Packer instance;
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.reajason.javaweb.packer.jar;
|
||||
|
||||
import com.reajason.javaweb.ClassBytesShrink;
|
||||
import com.reajason.javaweb.asm.ClassRenameUtils;
|
||||
import com.reajason.javaweb.packer.JarPacker;
|
||||
import com.reajason.javaweb.packer.JarPackerConfig;
|
||||
import lombok.SneakyThrows;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
+1
@@ -2,6 +2,7 @@ package com.reajason.javaweb.packer.jar;
|
||||
|
||||
import com.reajason.javaweb.ClassBytesShrink;
|
||||
import com.reajason.javaweb.asm.ClassRenameUtils;
|
||||
import com.reajason.javaweb.packer.JarPacker;
|
||||
import com.reajason.javaweb.packer.JarPackerConfig;
|
||||
import com.reajason.javaweb.packer.jar.attach.Attacher;
|
||||
import com.reajason.javaweb.packer.jar.attach.VirtualMachine;
|
||||
|
||||
+1
@@ -2,6 +2,7 @@ package com.reajason.javaweb.packer.jar;
|
||||
|
||||
import com.reajason.javaweb.ClassBytesShrink;
|
||||
import com.reajason.javaweb.asm.ClassRenameUtils;
|
||||
import com.reajason.javaweb.packer.JarPacker;
|
||||
import com.reajason.javaweb.packer.JarPackerConfig;
|
||||
import com.reajason.javaweb.packer.jar.attach.Attacher;
|
||||
import com.reajason.javaweb.packer.jar.attach.VirtualMachine;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.reajason.javaweb.packer.jar;
|
||||
|
||||
import com.reajason.javaweb.packer.JarPacker;
|
||||
import com.reajason.javaweb.packer.JarPackerConfig;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.reajason.javaweb.packer.jar;
|
||||
|
||||
import com.reajason.javaweb.asm.ClassInterfaceUtils;
|
||||
import com.reajason.javaweb.packer.JarPacker;
|
||||
import com.reajason.javaweb.packer.JarPackerConfig;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarOutputStream;
|
||||
import java.util.jar.Manifest;
|
||||
|
||||
/**
|
||||
* @author ReaJason
|
||||
* @since 2025/11/16
|
||||
*/
|
||||
public class ScriptEngineJarPacker implements JarPacker {
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public byte[] packBytes(JarPackerConfig config) {
|
||||
String mainClassName = config.getMainClassName();
|
||||
byte[] mainClassBytes = config.getClassBytes().get(mainClassName);
|
||||
byte[] bytes = ClassInterfaceUtils.addInterface(mainClassBytes, "javax.script.ScriptEngineFactory");
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
try (JarOutputStream targetJar = new JarOutputStream(outputStream, new Manifest())) {
|
||||
targetJar.putNextEntry(new JarEntry(mainClassName.replace('.', '/') + ".class"));
|
||||
targetJar.write(bytes);
|
||||
targetJar.closeEntry();
|
||||
|
||||
targetJar.putNextEntry(new JarEntry("META-INF/services/javax.script.ScriptEngineFactory"));
|
||||
targetJar.write(mainClassName.getBytes(StandardCharsets.UTF_8));
|
||||
targetJar.closeEntry();
|
||||
}
|
||||
return outputStream.toByteArray();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user