Skip to content

Commit bdee13d

Browse files
committed
feat: add custom asm for funny time fuckery
1 parent adeb6e7 commit bdee13d

File tree

11 files changed

+67
-9
lines changed

11 files changed

+67
-9
lines changed

.github/workflows/gradle.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ jobs:
2222
#cache: maven
2323
- name: Build with Gradle
2424
run: |
25+
cd org.ow2.asm
26+
./gradlew publishToMavenLocal --no-daemon
27+
cd ../
2528
./gradlew shadowJar --no-daemon
2629
mkdir staging/ && cp dev.skidfuscator.client.standalone/build/libs/client-standalone-all.jar staging
2730
- name: Upload a Build Artifact

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
[submodule "dev.xdark.ssvm"]
22
url = [email protected]:terminalsin/SSVM.git
3+
[submodule "org.ow2.asm"]
4+
path = org.ow2.asm
5+
url = https://gitlab.ow2.org/asm/asm.git

build.gradle

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ allprojects {
3535
}
3636

3737
ext {
38-
asm = 'org.ow2.asm:asm:9.7.1'
39-
asm_commons = 'org.ow2.asm:asm-commons:9.7.1'
40-
asm_tree = 'org.ow2.asm:asm-tree:9.7.1'
4138
cafedude = 'com.github.Col-E:CAFED00D:2.1.1'
4239
slf4j_api = 'org.slf4j:slf4j-api:1.7.36'
4340
jlinker = 'com.github.xxDark:jlinker:1.0.7'

dev.skidfuscator.obfuscator/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ dependencies {
1717
testCompileOnly 'org.projectlombok:lombok:1.18.36'
1818
compileOnly 'org.projectlombok:lombok:1.18.36'
1919

20+
implementation 'dev.skidfuscator.asm:asm-tree:9.8-SNAPSHOT'
2021
api project(':commons')
2122
api project(':pure-analysis')
2223

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/skidasm/fake/FakeConditionalJumpStmt.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
import org.mapleir.ir.cfg.BasicBlock;
55
import org.mapleir.ir.code.Expr;
66
import org.mapleir.ir.code.stmt.ConditionalJumpStmt;
7+
import org.mapleir.ir.codegen.BytecodeFrontend;
8+
import org.objectweb.asm.MethodVisitor;
9+
import org.objectweb.asm.Opcodes;
10+
import org.objectweb.asm.tree.MethodNode;
11+
import org.objectweb.asm.util.CheckMethodAdapter;
12+
import org.objectweb.asm.util.TraceMethodVisitor;
713

814
public class FakeConditionalJumpStmt extends ConditionalJumpStmt {
915
public FakeConditionalJumpStmt(Expr left, Expr right, BasicBlock trueSuccessor, ComparisonType type) {
@@ -13,4 +19,17 @@ public FakeConditionalJumpStmt(Expr left, Expr right, BasicBlock trueSuccessor,
1319
public FakeConditionalJumpStmt(Expr left, Expr right, BasicBlock trueSuccessor, ComparisonType type, ConditionalJumpEdge<BasicBlock> edge) {
1420
super(left, right, trueSuccessor, type, edge);
1521
}
22+
23+
@Override
24+
public void toCode(MethodVisitor visitor, BytecodeFrontend assembler) {
25+
super.toCode(new MethodVisitor(Opcodes.ASM9, visitor) {
26+
@Override
27+
public void visitMethodInsn(int opcode, String owner, String name, String descriptor, boolean isInterface) {
28+
super.visitMethodInsn(opcode, owner, name, descriptor, isInterface);
29+
if (visitor instanceof MethodNode methodNode) {
30+
methodNode.instructions.getLast().setSkip(true);
31+
}
32+
}
33+
}, assembler);
34+
}
1635
}

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/skidasm/fake/FakeUnconditionalJumpStmt.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,26 @@
33
import org.mapleir.flowgraph.edges.UnconditionalJumpEdge;
44
import org.mapleir.ir.cfg.BasicBlock;
55
import org.mapleir.ir.code.stmt.UnconditionalJumpStmt;
6+
import org.mapleir.ir.codegen.BytecodeFrontend;
7+
import org.objectweb.asm.MethodVisitor;
8+
import org.objectweb.asm.Opcodes;
9+
import org.objectweb.asm.tree.MethodNode;
610

711
public class FakeUnconditionalJumpStmt extends UnconditionalJumpStmt {
812
public FakeUnconditionalJumpStmt(BasicBlock target, UnconditionalJumpEdge<BasicBlock> edge) {
913
super(target, edge);
1014
}
15+
16+
@Override
17+
public void toCode(MethodVisitor visitor, BytecodeFrontend assembler) {
18+
super.toCode(new MethodVisitor(Opcodes.ASM9, visitor) {
19+
@Override
20+
public void visitMethodInsn(int opcode, String owner, String name, String descriptor, boolean isInterface) {
21+
super.visitMethodInsn(opcode, owner, name, descriptor, isInterface);
22+
if (visitor instanceof MethodNode methodNode) {
23+
methodNode.instructions.getLast().setSkip(true);
24+
}
25+
}
26+
}, assembler);
27+
}
1128
}

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/transform/impl/flow/exception/BasicExceptionTransformer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,9 @@ void handle(final RunMethodTransformEvent event) {
157157

158158
// Todo change blocks to be skiddedblocks to add method to directly add these
159159
final ConstantExpr var_const = new AlertableConstantExpr(hash.getHash(), Type.INT_TYPE);
160-
final ConditionalJumpStmt jump_stmt = new FakeConditionalJumpStmt(hash.getExpr(), var_const, fuckup, ConditionalJumpStmt.ComparisonType.NE);
160+
final ConditionalJumpStmt jump_stmt = new FakeConditionalJumpStmt(hash.getExpr(), var_const,
161+
RandomUtil.randomOfSet(cfg.vertices()),
162+
ConditionalJumpStmt.ComparisonType.NE);
161163

162164
if (entry.get(entry.size() - 1) instanceof UnconditionalJumpStmt)
163165
entry.add(entry.size() - 1, jump_stmt);

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/util/RandomUtil.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.io.IOException;
77
import java.util.Random;
8+
import java.util.Set;
89

910
@UtilityClass
1011
public class RandomUtil {
@@ -52,6 +53,16 @@ public String randomAlphabeticalString(int size) {
5253
.toString();
5354
}
5455

56+
public <V> V randomOfSet(Set<V> set) {
57+
int index = nextInt(set.size());
58+
for (V v : set) {
59+
if (index-- == 0) {
60+
return v;
61+
}
62+
}
63+
return null;
64+
}
65+
5566
private final Class<?>[] exceptionClasses = new Class<?>[] {
5667
IllegalAccessException.class,
5768
IOException.class,

dev.skidfuscator.obfuscator/src/test/resources/config/new.hocon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
exclude: [
22
"""
3-
@class dev.sim0n.app.* {
3+
@class !dev.sim0n.app.* {
44
!@class util.*
55
!@class Main
66
}

org.mapleir.parent/org.mapleir.modasm/build.gradle

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@ plugins {
22
id 'java'
33
}
44

5+
repositories {
6+
mavenLocal()
7+
}
8+
59
dependencies {
610
api project(':stdlib')
7-
api 'org.ow2.asm:asm:9.7.1'
8-
api 'org.ow2.asm:asm-tree:9.7.1'
9-
api 'org.ow2.asm:asm-util:9.7.1'
10-
api 'org.ow2.asm:asm-commons:9.7.1'
11+
api 'dev.skidfuscator.asm:asm:9.8-SNAPSHOT'
12+
api 'dev.skidfuscator.asm:asm-commons:9.8-SNAPSHOT'
13+
api 'dev.skidfuscator.asm:asm-tree:9.8-SNAPSHOT'
14+
api 'dev.skidfuscator.asm:asm-util:9.8-SNAPSHOT'
1115
}
1216

1317
group = 'dev.skidfuscator.mapleir'

0 commit comments

Comments
 (0)