feat: shrink agentJar by default

This commit is contained in:
ReaJason
2025-05-28 01:22:54 +08:00
parent b134b5a5a7
commit 0658f103cc
3 changed files with 11 additions and 8 deletions
@@ -1,5 +1,6 @@
package com.reajason.javaweb.memshell.packer.jar; package com.reajason.javaweb.memshell.packer.jar;
import com.reajason.javaweb.ClassBytesShrink;
import com.reajason.javaweb.asm.ClassRenameUtils; import com.reajason.javaweb.asm.ClassRenameUtils;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import lombok.SneakyThrows; import lombok.SneakyThrows;
@@ -86,7 +87,7 @@ public class AgentJarPacker implements JarPacker {
private void addClassEntry(JarOutputStream targetJar, String className, byte[] classBytes, private void addClassEntry(JarOutputStream targetJar, String className, byte[] classBytes,
String dependencyPackage, String relocatePrefix) { String dependencyPackage, String relocatePrefix) {
targetJar.putNextEntry(new JarEntry(className.replace('.', '/') + ".class")); targetJar.putNextEntry(new JarEntry(className.replace('.', '/') + ".class"));
byte[] processedBytes = ClassRenameUtils.relocateClass(classBytes, dependencyPackage, relocatePrefix + dependencyPackage); byte[] processedBytes = ClassBytesShrink.shrink(ClassRenameUtils.relocateClass(classBytes, dependencyPackage, relocatePrefix + dependencyPackage), true);
targetJar.write(processedBytes); targetJar.write(processedBytes);
targetJar.closeEntry(); targetJar.closeEntry();
} }
@@ -123,7 +124,7 @@ public class AgentJarPacker implements JarPacker {
targetJar.putNextEntry(new JarEntry(relocatePrefix + entryName)); targetJar.putNextEntry(new JarEntry(relocatePrefix + entryName));
if (entryName.endsWith(".class")) { if (entryName.endsWith(".class")) {
if (bytes.length > 0) { if (bytes.length > 0) {
bytes = ClassRenameUtils.relocateClass(bytes, baseName, relocatePrefix + baseName); bytes = ClassBytesShrink.shrink(ClassRenameUtils.relocateClass(bytes, baseName, relocatePrefix + baseName), true);
} }
} else { } else {
targetJar.putNextEntry(entry); targetJar.putNextEntry(entry);
@@ -1,5 +1,6 @@
package com.reajason.javaweb.memshell.packer.jar; package com.reajason.javaweb.memshell.packer.jar;
import com.reajason.javaweb.ClassBytesShrink;
import com.reajason.javaweb.asm.ClassRenameUtils; import com.reajason.javaweb.asm.ClassRenameUtils;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.jar.attach.Attacher; import com.reajason.javaweb.memshell.packer.jar.attach.Attacher;
@@ -50,7 +51,7 @@ public class AgentJarWithJDKAttacherPacker implements JarPacker {
String className = entry.getKey(); String className = entry.getKey();
byte[] bytes = entry.getValue(); byte[] bytes = entry.getValue();
targetJar.putNextEntry(new JarEntry(className.replace('.', '/') + ".class")); targetJar.putNextEntry(new JarEntry(className.replace('.', '/') + ".class"));
targetJar.write(bytes); targetJar.write(ClassBytesShrink.shrink(bytes, true));
targetJar.closeEntry(); targetJar.closeEntry();
} }
} }
@@ -106,7 +107,7 @@ public class AgentJarWithJDKAttacherPacker implements JarPacker {
private void addClassEntry(JarOutputStream targetJar, String className, byte[] classBytes, private void addClassEntry(JarOutputStream targetJar, String className, byte[] classBytes,
String dependencyPackage, String relocatePrefix) { String dependencyPackage, String relocatePrefix) {
targetJar.putNextEntry(new JarEntry(className.replace('.', '/') + ".class")); targetJar.putNextEntry(new JarEntry(className.replace('.', '/') + ".class"));
byte[] processedBytes = ClassRenameUtils.relocateClass(classBytes, dependencyPackage, relocatePrefix + dependencyPackage); byte[] processedBytes = ClassBytesShrink.shrink(ClassRenameUtils.relocateClass(classBytes, dependencyPackage, relocatePrefix + dependencyPackage), true);
targetJar.write(processedBytes); targetJar.write(processedBytes);
targetJar.closeEntry(); targetJar.closeEntry();
} }
@@ -143,7 +144,7 @@ public class AgentJarWithJDKAttacherPacker implements JarPacker {
targetJar.putNextEntry(new JarEntry(relocatePrefix + entryName)); targetJar.putNextEntry(new JarEntry(relocatePrefix + entryName));
if (entryName.endsWith(".class")) { if (entryName.endsWith(".class")) {
if (bytes.length > 0) { if (bytes.length > 0) {
bytes = ClassRenameUtils.relocateClass(bytes, baseName, relocatePrefix + baseName); bytes = ClassBytesShrink.shrink(ClassRenameUtils.relocateClass(bytes, baseName, relocatePrefix + baseName), true);
} }
} else { } else {
targetJar.putNextEntry(entry); targetJar.putNextEntry(entry);
@@ -1,5 +1,6 @@
package com.reajason.javaweb.memshell.packer.jar; package com.reajason.javaweb.memshell.packer.jar;
import com.reajason.javaweb.ClassBytesShrink;
import com.reajason.javaweb.asm.ClassRenameUtils; import com.reajason.javaweb.asm.ClassRenameUtils;
import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.jar.attach.Attacher; import com.reajason.javaweb.memshell.packer.jar.attach.Attacher;
@@ -52,7 +53,7 @@ public class AgentJarWithJREAttacherPacker implements JarPacker {
String className = entry.getKey(); String className = entry.getKey();
byte[] bytes = entry.getValue(); byte[] bytes = entry.getValue();
targetJar.putNextEntry(new JarEntry(className.replace('.', '/') + ".class")); targetJar.putNextEntry(new JarEntry(className.replace('.', '/') + ".class"));
targetJar.write(bytes); targetJar.write(ClassBytesShrink.shrink(bytes, true));
targetJar.closeEntry(); targetJar.closeEntry();
} }
@@ -126,7 +127,7 @@ public class AgentJarWithJREAttacherPacker implements JarPacker {
private void addClassEntry(JarOutputStream targetJar, String className, byte[] classBytes, private void addClassEntry(JarOutputStream targetJar, String className, byte[] classBytes,
String dependencyPackage, String relocatePrefix) { String dependencyPackage, String relocatePrefix) {
targetJar.putNextEntry(new JarEntry(className.replace('.', '/') + ".class")); targetJar.putNextEntry(new JarEntry(className.replace('.', '/') + ".class"));
byte[] processedBytes = ClassRenameUtils.relocateClass(classBytes, dependencyPackage, relocatePrefix + dependencyPackage); byte[] processedBytes = ClassBytesShrink.shrink(ClassRenameUtils.relocateClass(classBytes, dependencyPackage, relocatePrefix + dependencyPackage), true);
targetJar.write(processedBytes); targetJar.write(processedBytes);
targetJar.closeEntry(); targetJar.closeEntry();
} }
@@ -163,7 +164,7 @@ public class AgentJarWithJREAttacherPacker implements JarPacker {
targetJar.putNextEntry(new JarEntry(relocatePrefix + entryName)); targetJar.putNextEntry(new JarEntry(relocatePrefix + entryName));
if (entryName.endsWith(".class")) { if (entryName.endsWith(".class")) {
if (bytes.length > 0) { if (bytes.length > 0) {
bytes = ClassRenameUtils.relocateClass(bytes, baseName, relocatePrefix + baseName); bytes = ClassBytesShrink.shrink(ClassRenameUtils.relocateClass(bytes, baseName, relocatePrefix + baseName), true);
} }
} else { } else {
targetJar.putNextEntry(entry); targetJar.putNextEntry(entry);