diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 33f3a7a..02aeec5 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -22,6 +22,9 @@ jobs: #cache: maven - name: Build with Gradle run: | + cd org.ow2.asm + ./gradlew publishToMavenLocal --no-daemon + cd ../ ./gradlew shadowJar --no-daemon mkdir staging/ && cp dev.skidfuscator.client.standalone/build/libs/client-standalone-all.jar staging - name: Upload a Build Artifact diff --git a/.gitmodules b/.gitmodules index f955d03..cd2b44e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,2 +1,5 @@ [submodule "dev.xdark.ssvm"] url = git@github.com:terminalsin/SSVM.git +[submodule "org.ow2.asm"] + path = org.ow2.asm + url = https://gitlab.ow2.org/asm/asm.git diff --git a/build.gradle b/build.gradle index e20dc09..e772d09 100644 --- a/build.gradle +++ b/build.gradle @@ -35,9 +35,6 @@ allprojects { } ext { - asm = 'org.ow2.asm:asm:9.7.1' - asm_commons = 'org.ow2.asm:asm-commons:9.7.1' - asm_tree = 'org.ow2.asm:asm-tree:9.7.1' cafedude = 'com.github.Col-E:CAFED00D:2.1.1' slf4j_api = 'org.slf4j:slf4j-api:1.7.36' jlinker = 'com.github.xxDark:jlinker:1.0.7' diff --git a/dev.skidfuscator.obfuscator/build.gradle b/dev.skidfuscator.obfuscator/build.gradle index ac9091b..dd0b2f9 100644 --- a/dev.skidfuscator.obfuscator/build.gradle +++ b/dev.skidfuscator.obfuscator/build.gradle @@ -17,6 +17,7 @@ dependencies { testCompileOnly 'org.projectlombok:lombok:1.18.36' compileOnly 'org.projectlombok:lombok:1.18.36' + implementation 'dev.skidfuscator.asm:asm-tree:9.8-SNAPSHOT' api project(':commons') api project(':pure-analysis') diff --git a/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/skidasm/fake/FakeConditionalJumpStmt.java b/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/skidasm/fake/FakeConditionalJumpStmt.java index fc969d8..b32505b 100644 --- a/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/skidasm/fake/FakeConditionalJumpStmt.java +++ b/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/skidasm/fake/FakeConditionalJumpStmt.java @@ -4,6 +4,12 @@ import org.mapleir.ir.cfg.BasicBlock; import org.mapleir.ir.code.Expr; import org.mapleir.ir.code.stmt.ConditionalJumpStmt; +import org.mapleir.ir.codegen.BytecodeFrontend; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.MethodNode; +import org.objectweb.asm.util.CheckMethodAdapter; +import org.objectweb.asm.util.TraceMethodVisitor; public class FakeConditionalJumpStmt extends ConditionalJumpStmt { public FakeConditionalJumpStmt(Expr left, Expr right, BasicBlock trueSuccessor, ComparisonType type) { @@ -13,4 +19,17 @@ public FakeConditionalJumpStmt(Expr left, Expr right, BasicBlock trueSuccessor, public FakeConditionalJumpStmt(Expr left, Expr right, BasicBlock trueSuccessor, ComparisonType type, ConditionalJumpEdge edge) { super(left, right, trueSuccessor, type, edge); } + + @Override + public void toCode(MethodVisitor visitor, BytecodeFrontend assembler) { + super.toCode(new MethodVisitor(Opcodes.ASM9, visitor) { + @Override + public void visitMethodInsn(int opcode, String owner, String name, String descriptor, boolean isInterface) { + super.visitMethodInsn(opcode, owner, name, descriptor, isInterface); + if (visitor instanceof MethodNode methodNode) { + methodNode.instructions.getLast().setSkip(true); + } + } + }, assembler); + } } diff --git a/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/skidasm/fake/FakeUnconditionalJumpStmt.java b/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/skidasm/fake/FakeUnconditionalJumpStmt.java index a5a51e9..f730df3 100644 --- a/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/skidasm/fake/FakeUnconditionalJumpStmt.java +++ b/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/skidasm/fake/FakeUnconditionalJumpStmt.java @@ -3,9 +3,26 @@ import org.mapleir.flowgraph.edges.UnconditionalJumpEdge; import org.mapleir.ir.cfg.BasicBlock; import org.mapleir.ir.code.stmt.UnconditionalJumpStmt; +import org.mapleir.ir.codegen.BytecodeFrontend; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.MethodNode; public class FakeUnconditionalJumpStmt extends UnconditionalJumpStmt { public FakeUnconditionalJumpStmt(BasicBlock target, UnconditionalJumpEdge edge) { super(target, edge); } + + @Override + public void toCode(MethodVisitor visitor, BytecodeFrontend assembler) { + super.toCode(new MethodVisitor(Opcodes.ASM9, visitor) { + @Override + public void visitMethodInsn(int opcode, String owner, String name, String descriptor, boolean isInterface) { + super.visitMethodInsn(opcode, owner, name, descriptor, isInterface); + if (visitor instanceof MethodNode methodNode) { + methodNode.instructions.getLast().setSkip(true); + } + } + }, assembler); + } } diff --git a/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/transform/impl/flow/exception/BasicExceptionTransformer.java b/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/transform/impl/flow/exception/BasicExceptionTransformer.java index ba1908a..c2f735e 100644 --- a/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/transform/impl/flow/exception/BasicExceptionTransformer.java +++ b/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/transform/impl/flow/exception/BasicExceptionTransformer.java @@ -157,7 +157,9 @@ void handle(final RunMethodTransformEvent event) { // Todo change blocks to be skiddedblocks to add method to directly add these final ConstantExpr var_const = new AlertableConstantExpr(hash.getHash(), Type.INT_TYPE); - final ConditionalJumpStmt jump_stmt = new FakeConditionalJumpStmt(hash.getExpr(), var_const, fuckup, ConditionalJumpStmt.ComparisonType.NE); + final ConditionalJumpStmt jump_stmt = new FakeConditionalJumpStmt(hash.getExpr(), var_const, + RandomUtil.randomOfSet(cfg.vertices()), + ConditionalJumpStmt.ComparisonType.NE); if (entry.get(entry.size() - 1) instanceof UnconditionalJumpStmt) entry.add(entry.size() - 1, jump_stmt); diff --git a/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/util/RandomUtil.java b/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/util/RandomUtil.java index e8e75da..a1f1313 100644 --- a/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/util/RandomUtil.java +++ b/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/util/RandomUtil.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.util.Random; +import java.util.Set; @UtilityClass public class RandomUtil { @@ -52,6 +53,16 @@ public String randomAlphabeticalString(int size) { .toString(); } + public V randomOfSet(Set set) { + int index = nextInt(set.size()); + for (V v : set) { + if (index-- == 0) { + return v; + } + } + return null; + } + private final Class[] exceptionClasses = new Class[] { IllegalAccessException.class, IOException.class, diff --git a/dev.skidfuscator.obfuscator/src/test/resources/config/new.hocon b/dev.skidfuscator.obfuscator/src/test/resources/config/new.hocon index 135ba7e..eb80cc3 100644 --- a/dev.skidfuscator.obfuscator/src/test/resources/config/new.hocon +++ b/dev.skidfuscator.obfuscator/src/test/resources/config/new.hocon @@ -1,6 +1,6 @@ exclude: [ """ - @class dev.sim0n.app.* { + @class !dev.sim0n.app.* { !@class util.* !@class Main } diff --git a/org.mapleir.parent/org.mapleir.modasm/build.gradle b/org.mapleir.parent/org.mapleir.modasm/build.gradle index 2e0dd62..536cdad 100644 --- a/org.mapleir.parent/org.mapleir.modasm/build.gradle +++ b/org.mapleir.parent/org.mapleir.modasm/build.gradle @@ -2,12 +2,16 @@ plugins { id 'java' } +repositories { + mavenLocal() +} + dependencies { api project(':stdlib') - api 'org.ow2.asm:asm:9.7.1' - api 'org.ow2.asm:asm-tree:9.7.1' - api 'org.ow2.asm:asm-util:9.7.1' - api 'org.ow2.asm:asm-commons:9.7.1' + api 'dev.skidfuscator.asm:asm:9.8-SNAPSHOT' + api 'dev.skidfuscator.asm:asm-commons:9.8-SNAPSHOT' + api 'dev.skidfuscator.asm:asm-tree:9.8-SNAPSHOT' + api 'dev.skidfuscator.asm:asm-util:9.8-SNAPSHOT' } group = 'dev.skidfuscator.mapleir' diff --git a/org.ow2.asm b/org.ow2.asm new file mode 160000 index 0000000..c55dc7b --- /dev/null +++ b/org.ow2.asm @@ -0,0 +1 @@ +Subproject commit c55dc7bdd8e47a22d22ce74f9c66a1ea08e29050