refactor: add packer module

This commit is contained in:
ReaJason
2025-08-13 23:53:40 +08:00
parent ba04db93be
commit 58341b4f7c
176 changed files with 830 additions and 1062 deletions
@@ -52,12 +52,8 @@ class GeneratorMainTest {
GenerateResult generateResult = MemShellGenerator.generate(shellConfig, injectorConfig, commandConfig);
if (generateResult != null) {
System.out.println(generateResult.getShellBytes().length);
// System.out.println(((JarPacker) Packers.AgentJar.getInstance()).packBytes(generateResult).length);
Files.write(Paths.get(generateResult.getInjectorClassName() + ".class"), generateResult.getInjectorBytes(), StandardOpenOption.CREATE_NEW);
Files.write(Paths.get(generateResult.getShellClassName() + ".class"), generateResult.getShellBytes(), StandardOpenOption.CREATE_NEW);
// System.out.println(Base64.getEncoder().encodeToString(generateResult.getInjectorBytes()));
// System.out.println(Packers.ScriptEngine.getInstance().pack(generateResult));
// Files.write(Path.of("target.jar"), Packer.INSTANCE.AgentJar.getPacker().packBytes(generateResult));
}
}
}
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
package com.reajason.javaweb.memshell.packer;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.freemarker.FreemarkerPacker;
import com.reajason.javaweb.packer.freemarker.FreemarkerPacker;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -18,7 +18,7 @@ class FreemarkerPackerTest {
GenerateResult generateResult = GenerateResult.builder()
.injectorClassName("hehe")
.injectorBytesBase64Str("hehe").build();
String content = new String(packer.pack(generateResult));
String content = new String(packer.pack(generateResult.toClassPackerConfig()));
System.out.println(content);
assertTrue(content.contains("var base64Str = \"hehe\";"));
}
@@ -1,8 +1,8 @@
package com.reajason.javaweb.memshell.packer;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.base64.GzipBase64Packer;
import com.reajason.javaweb.memshell.utils.CommonUtil;
import com.reajason.javaweb.packer.base64.GzipBase64Packer;
import lombok.SneakyThrows;
import org.junit.jupiter.api.Test;
@@ -23,7 +23,7 @@ class GzipBase64Test {
void compress() {
GenerateResult generateResult = new GenerateResult();
generateResult.setInjectorBytes("hello world".getBytes());
String pack = new GzipBase64Packer().pack(generateResult);
String pack = new GzipBase64Packer().pack(generateResult.toClassPackerConfig());
assertEquals("hello world", new String(CommonUtil.gzipDecompress(Base64.getDecoder().decode(pack))));
}
}
@@ -1,7 +1,7 @@
package com.reajason.javaweb.memshell.packer;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.jsp.JspPacker;
import com.reajason.javaweb.packer.jsp.JspPacker;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -17,7 +17,7 @@ class JspPackerTest {
GenerateResult generateResult = GenerateResult.builder()
.injectorClassName("hehe")
.injectorBytesBase64Str("hehe").build();
String jspContent = new JspPacker().pack(generateResult);
String jspContent = new JspPacker().pack(generateResult.toClassPackerConfig());
assertTrue(jspContent.contains("String base64Str = \"hehe\";"));
}
}
@@ -1,13 +1,8 @@
package com.reajason.javaweb.memshell.packer;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.scriptengine.ScriptEnginePacker;
import lombok.SneakyThrows;
import com.reajason.javaweb.packer.scriptengine.ScriptEnginePacker;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledOnJre;
import org.junit.jupiter.api.condition.JRE;
import javax.script.ScriptEngineManager;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -22,7 +17,7 @@ class ScriptEnginePackerTest {
GenerateResult generateResult = GenerateResult.builder()
.injectorClassName("hehe")
.injectorBytesBase64Str("hehe").build();
String jsContent = new String(new ScriptEnginePacker().pack(generateResult));
String jsContent = new String(new ScriptEnginePacker().pack(generateResult.toClassPackerConfig()));
System.out.println(jsContent);
assertTrue(jsContent.contains("var base64Str = \"hehe\";"));
}
@@ -1,6 +1,9 @@
package com.reajason.javaweb.memshell.tomcat.command;
import com.reajason.javaweb.memshell.*;
import com.reajason.javaweb.memshell.MemShellGenerator;
import com.reajason.javaweb.memshell.Server;
import com.reajason.javaweb.memshell.ShellTool;
import com.reajason.javaweb.memshell.ShellType;
import com.reajason.javaweb.memshell.config.CommandConfig;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.config.InjectorConfig;
@@ -9,6 +12,7 @@ import com.reajason.javaweb.memshell.generator.command.CommandGenerator;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilter;
import com.reajason.javaweb.memshell.shelltool.command.CommandListener;
import com.reajason.javaweb.memshell.shelltool.command.CommandValve;
import com.reajason.javaweb.packer.Packers;
import com.reajason.javaweb.util.ClassUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
@@ -70,7 +74,7 @@ class CommandFilterTest {
GenerateResult generate = MemShellGenerator.generate(shellConfig, injectorConfig, commandConfig);
// Files.write(Paths.get("hehe.class"), generate.getShellBytes());
String pack = Packers.ScriptEngine.getInstance().pack(generate);
String pack = Packers.ScriptEngine.getInstance().pack(generate.toClassPackerConfig());
System.out.println(pack);
}
}