Skip to content

Commit 8b9b36d

Browse files
committed
feat: support simple obfuscation (#13)
1 parent f49c4e2 commit 8b9b36d

File tree

19 files changed

+78
-34
lines changed

19 files changed

+78
-34
lines changed

bom/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ dependencies {
66
constraints {
77
api 'net.bytebuddy:byte-buddy:1.+'
88
api 'org.ow2.asm:asm-commons:9.7.1'
9+
api 'com.github.jar-analyzer:class-obf:1.5.0'
910

1011
api 'javax.servlet:javax.servlet-api:3.0.1'
1112
api 'jakarta.servlet:jakarta.servlet-api:6.0.0'

build.gradle

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ allprojects {
1212
implementation platform(project(':bom'))
1313
}
1414
}
15-
16-
repositories {
17-
mavenCentral()
18-
}
1915
}
2016

2117
idea {

generator/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ dependencies {
3939
implementation project(":memshell-java8")
4040
implementation 'net.bytebuddy:byte-buddy'
4141
implementation 'org.ow2.asm:asm-commons'
42+
implementation 'com.github.jar-analyzer:class-obf'
4243

4344
implementation 'javax.servlet:javax.servlet-api'
4445
implementation 'javax.websocket:javax.websocket-api'

generator/src/main/java/com/reajason/javaweb/memshell/MemShellGenerator.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.reajason.javaweb.memshell.generator.*;
55
import com.reajason.javaweb.memshell.server.AbstractShell;
66
import com.reajason.javaweb.memshell.utils.CommonUtil;
7+
import me.n1ar4.clazz.obfuscator.api.ClassObf;
8+
import me.n1ar4.clazz.obfuscator.config.BaseConfig;
79
import org.apache.commons.lang3.StringUtils;
810
import org.apache.commons.lang3.tuple.Pair;
911

@@ -46,12 +48,39 @@ public static GenerateResult generate(ShellConfig shellConfig, InjectorConfig in
4648

4749
byte[] shellBytes = generateShellBytes(shellConfig, shellToolConfig);
4850

51+
if (shellConfig.isObfuscate()) {
52+
BaseConfig config = BaseConfig.Default();
53+
config.setIgnorePublic(true);
54+
config.setEnableMethodName(false);
55+
config.setEnableFieldName(false);
56+
config.setEnableAES(false);
57+
config.setEnableAdvanceString(false);
58+
config.setQuiet(true);
59+
60+
ClassObf classObf = new ClassObf(config);
61+
shellBytes = classObf.run(shellBytes).getData();
62+
}
63+
4964
injectorConfig.setInjectorClass(injectorClass);
5065
injectorConfig.setShellClassName(shellToolConfig.getShellClassName());
5166
injectorConfig.setShellClassBytes(shellBytes);
5267

5368
InjectorGenerator injectorGenerator = new InjectorGenerator(shellConfig, injectorConfig);
5469
byte[] injectorBytes = injectorGenerator.generate();
70+
71+
if (shellConfig.isObfuscate()) {
72+
BaseConfig config = BaseConfig.Default();
73+
config.setIgnorePublic(true);
74+
config.setEnableMethodName(false);
75+
config.setEnableFieldName(false);
76+
config.setEnableAES(false);
77+
config.setEnableAdvanceString(false);
78+
config.setQuiet(true);
79+
80+
ClassObf classObf = new ClassObf(config);
81+
injectorBytes = classObf.run(injectorBytes).getData();
82+
}
83+
5584
Map<String, byte[]> innerClassBytes = injectorGenerator.getInnerClassBytes();
5685

5786
return GenerateResult.builder()

integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertionTool.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,13 @@ public static GenerateResult generate(String urlPattern, Server server, String s
232232
.targetJreVersion(targetJdkVersion)
233233
.debug(true)
234234
.shrink(true)
235+
.obfuscate(true)
235236
.build();
236237

238+
if (ShellTool.NeoreGeorg.equals(shellTool)) {
239+
shellConfig.setObfuscate(false);
240+
}
241+
237242
ShellToolConfig shellToolConfig = null;
238243
String uniqueName = shellTool + RandomStringUtils.randomAlphabetic(5) + shellType + RandomStringUtils.randomAlphabetic(5) + packer.name();
239244
switch (shellTool) {

memshell-agent/memshell-agent-asm/build.gradle

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ plugins {
66
group = 'com.reajason.javaweb'
77
version = '1.0.0'
88

9-
repositories {
10-
mavenCentral()
11-
}
12-
139
java {
1410
toolchain {
1511
languageVersion = JavaLanguageVersion.of(8)

memshell-agent/memshell-agent-bytebuddy/build.gradle

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ plugins {
55
group = 'com.reajason.javaweb'
66
version = '1.0.0'
77

8-
repositories {
9-
mavenCentral()
10-
}
118

129
dependencies {
1310
testImplementation platform('org.junit:junit-bom:5.10.0')

memshell-agent/memshell-agent-javassist/build.gradle

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ plugins {
55
group = 'com.reajason.javaweb'
66
version = '1.0.0'
77

8-
repositories {
9-
mavenCentral()
10-
}
11-
128
dependencies {
139
testImplementation platform('org.junit:junit-bom:5.10.0')
1410
testImplementation 'org.junit.jupiter:junit-jupiter'

settings.gradle

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@ plugins {
22
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0'
33
}
44

5+
dependencyResolutionManagement {
6+
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
7+
repositories {
8+
mavenCentral()
9+
maven { url 'https://jitpack.io' }
10+
}
11+
}
12+
513
rootProject.name = 'MemShellParty'
614

715
include 'bom'

vul/vul-springboot1/build.gradle

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@ java {
88
sourceCompatibility = JavaVersion.VERSION_1_8
99
}
1010

11-
repositories {
12-
mavenCentral()
13-
}
14-
1511
configurations {
1612
providedRuntime
1713
}

0 commit comments

Comments
 (0)