revert: obfuscation (#13)

This commit is contained in:
ReaJason
2025-04-06 13:55:17 +08:00
parent 540559653f
commit 47ea535fac
17 changed files with 20 additions and 101 deletions
-1
View File
@@ -40,7 +40,6 @@ dependencies {
implementation project(":memshell-java8")
implementation 'net.bytebuddy:byte-buddy'
implementation 'org.ow2.asm:asm-commons'
implementation 'com.github.jar-analyzer:class-obf'
implementation 'javax.servlet:javax.servlet-api'
implementation 'javax.websocket:javax.websocket-api'
@@ -4,8 +4,6 @@ import com.reajason.javaweb.memshell.config.*;
import com.reajason.javaweb.memshell.generator.*;
import com.reajason.javaweb.memshell.server.AbstractShell;
import com.reajason.javaweb.memshell.utils.CommonUtil;
import me.n1ar4.clazz.obfuscator.api.ClassObf;
import me.n1ar4.clazz.obfuscator.config.BaseConfig;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
@@ -48,39 +46,12 @@ public class MemShellGenerator {
byte[] shellBytes = generateShellBytes(shellConfig, shellToolConfig);
if (shellConfig.isObfuscate()) {
BaseConfig config = BaseConfig.Default();
config.setIgnorePublic(true);
config.setEnableMethodName(false);
config.setEnableFieldName(false);
config.setEnableAES(false);
config.setEnableAdvanceString(false);
config.setQuiet(true);
ClassObf classObf = new ClassObf(config);
shellBytes = classObf.run(shellBytes).getData();
}
injectorConfig.setInjectorClass(injectorClass);
injectorConfig.setShellClassName(shellToolConfig.getShellClassName());
injectorConfig.setShellClassBytes(shellBytes);
InjectorGenerator injectorGenerator = new InjectorGenerator(shellConfig, injectorConfig);
byte[] injectorBytes = injectorGenerator.generate();
if (shellConfig.isObfuscate()) {
BaseConfig config = BaseConfig.Default();
config.setIgnorePublic(true);
config.setEnableMethodName(false);
config.setEnableFieldName(false);
config.setEnableAES(false);
config.setEnableAdvanceString(false);
config.setQuiet(true);
ClassObf classObf = new ClassObf(config);
injectorBytes = classObf.run(injectorBytes).getData();
}
Map<String, byte[]> innerClassBytes = injectorGenerator.getInnerClassBytes();
return GenerateResult.builder()
@@ -45,12 +45,6 @@ public class ShellConfig {
@Builder.Default
private boolean byPassJavaModule = false;
/**
* 是否开启混淆
*/
@Builder.Default
private boolean obfuscate = false;
/**
* 是否开启调试
*/
@@ -6,9 +6,6 @@ import com.reajason.javaweb.memshell.shelltool.FilterChainInterface;
import com.reajason.javaweb.memshell.shelltool.TestFilterChain;
import com.reajason.javaweb.util.ClassUtils;
import lombok.SneakyThrows;
import me.n1ar4.clazz.obfuscator.api.ClassObf;
import me.n1ar4.clazz.obfuscator.api.Result;
import me.n1ar4.clazz.obfuscator.config.BaseConfig;
import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -65,15 +62,6 @@ public class CommandFilterChainASMTest {
};
cr.accept(cv, ClassReader.EXPAND_FRAMES);
byte[] bytes2 = ClassRenameUtils.renameClass(cw.toByteArray(), TestFilterChain.class.getName() + "Asm");
BaseConfig config = BaseConfig.Default();
config.setIgnorePublic(true);
config.setEnableMethodName(false);
config.setEnableParamName(false);
config.setEnableAES(false);
config.setEnableAdvanceString(false);
ClassObf classObf = new ClassObf(config);
Result run = classObf.run(bytes2);
bytes2 = run.getData();
IOUtils.write(bytes2, new FileOutputStream(new File("godzilla2.class")));
Class<?> clazz = ClassUtils.defineClass(bytes2);
instance = spy(clazz.newInstance());