Skip to content

Commit 1ffb0fb

Browse files
committed
feat: Integrated OpenRS2 transformers natively
1 parent 784da47 commit 1ffb0fb

File tree

114 files changed

+6381
-24
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+6381
-24
lines changed

build.gradle

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,33 @@
11
plugins {
22
id 'java'
3+
id 'org.jetbrains.kotlin.jvm' version '2.2.10'
4+
35
id 'application'
46
}
57

68
dependencies {
9+
// Profile
10+
implementation 'org.tomlj:tomlj:1.1.1'
11+
12+
// Bytecode
713
implementation 'org.ow2.asm:asm:9.7'
814
implementation 'org.ow2.asm:asm-commons:9.7'
915
implementation 'org.ow2.asm:asm-tree:9.7'
1016
implementation 'org.ow2.asm:asm-util:9.7'
1117

12-
// implementation 'com.jetbrains.intellij.java:java-decompiler-engine:241.15989.150'
13-
// implementation 'org.vineflower:vineflower:1.10.1'
14-
implementation 'org.openrs2:fernflower:1.1.1'
15-
18+
// AST
1619
implementation 'com.github.javaparser:javaparser-symbol-solver-core:3.26.0'
1720

18-
implementation 'org.tomlj:tomlj:1.1.1'
21+
// Decompiler
22+
// implementation 'com.jetbrains.intellij.java:java-decompiler-engine:253.30387.90'
23+
// implementation 'org.vineflower:vineflower:1.11.2'
24+
implementation 'org.openrs2:fernflower:1.1.1'
25+
26+
// OpenRS2
27+
implementation 'it.unimi.dsi:fastutil:8.5.16'
28+
implementation 'org.jgrapht:jgrapht-core:1.5.2'
29+
implementation 'com.fasterxml.jackson.core:jackson-databind:2.19.2'
30+
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.19.2'
1931
}
2032

2133
java {
@@ -35,8 +47,8 @@ jar {
3547
)
3648
}
3749

38-
from {
39-
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
50+
from(configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }) {
51+
exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
4052
}
4153
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
4254
}

settings.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
pluginManagement {
2+
plugins {
3+
id 'org.jetbrains.kotlin.jvm' version '2.2.10'
4+
}
5+
}
6+
17
dependencyResolutionManagement {
28
repositories {
39
mavenCentral()

src/main/java/rs/lostcity/asm/transform/Transformer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
import org.objectweb.asm.tree.ClassNode;
44
import org.objectweb.asm.tree.FieldNode;
55
import org.objectweb.asm.tree.MethodNode;
6+
import org.openrs2.asm.classpath.ClassPath;
67
import rs.lostcity.asm.InsnNodeUtil;
78
import org.tomlj.TomlParseResult;
89

910
import java.util.List;
1011

1112
public class Transformer {
1213
protected TomlParseResult profile;
14+
public ClassPath classPath;
1315

1416
public void provide(TomlParseResult profile) {
1517
this.profile = profile;
@@ -34,7 +36,7 @@ public void transform(List<ClassNode> classes) {
3436
}
3537

3638
for (MethodNode method : clazz.methods) {
37-
changed |= this.transformMethod(classes, clazz, method);
39+
changed |= this.preTransformMethod(classes, clazz, method);
3840

3941
if (InsnNodeUtil.hasCode(method)) {
4042
changed |= this.transformCode(classes, clazz, method);
@@ -67,7 +69,7 @@ public boolean transformField(List<ClassNode> classes, ClassNode clazz, FieldNod
6769
return false;
6870
}
6971

70-
public boolean transformMethod(List<ClassNode> classes, ClassNode clazz, MethodNode method) {
72+
public boolean preTransformMethod(List<ClassNode> classes, ClassNode clazz, MethodNode method) {
7173
return false;
7274
}
7375

src/main/java/rs/lostcity/deob/bytecode/BytecodeDeobfuscator.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package rs.lostcity.deob.bytecode;
22

33
import org.objectweb.asm.tree.ClassNode;
4+
import org.openrs2.asm.classpath.ClassPath;
5+
import org.openrs2.asm.classpath.Library;
6+
import org.openrs2.deob.bytecode.transform.*;
47
import rs.lostcity.asm.transform.Transformer;
58
import rs.lostcity.deob.bytecode.transform.*;
69
import org.tomlj.TomlArray;
@@ -22,17 +25,48 @@ public BytecodeDeobfuscator(TomlParseResult profile) {
2225

2326
registerTransformer(new RlMathTransformer());
2427
registerTransformer(new SortClassesLegacyTransformer());
28+
registerTransformer(new StringDecryptionTransformer());
2529

26-
// openrs2
30+
// openrs2 (kotlin)
2731
registerTransformer(new BitShiftTransformer());
32+
registerTransformer(new BitwiseOpTransformer());
33+
registerTransformer(new CanvasTransformer());
34+
registerTransformer(new ClassLiteralTransformer());
35+
registerTransformer(new ConstantArgTransformer());
36+
registerTransformer(new CopyPropagationTransformer());
37+
registerTransformer(new CounterTransformer());
38+
registerTransformer(new EmptyClassTransformer());
2839
registerTransformer(new ExceptionObfuscationTransformer());
2940
registerTransformer(new ExceptionTracingTransformer());
3041
registerTransformer(new FernflowerExceptionTransformer());
42+
registerTransformer(new FieldOrderTransformer());
43+
registerTransformer(new FinalClassTransformer());
44+
registerTransformer(new FinalFieldTransformer());
45+
registerTransformer(new FinalMethodTransformer());
46+
registerTransformer(new InvokeSpecialTransformer());
47+
registerTransformer(new MethodOrderTransformer());
3148
registerTransformer(new MonitorTransformer());
49+
registerTransformer(new MultipleAssignmentTransformer());
3250
registerTransformer(new OpaquePredicateTransformer());
51+
registerTransformer(new OriginalNameTransformer());
52+
registerTransformer(new OverrideTransformer());
53+
registerTransformer(new ResetTransformer());
3354
registerTransformer(new RedundantGotoTransformer());
55+
registerTransformer(new UnusedArgTransformer());
56+
registerTransformer(new UnusedLocalTransformer());
57+
registerTransformer(new UnusedMethodTransformer());
3458
registerTransformer(new VisibilityTransformer());
3559

60+
// openrs2 (ported to java)
61+
registerTransformer(new BitShiftTransformerPort());
62+
registerTransformer(new ExceptionObfuscationTransformerPort());
63+
registerTransformer(new ExceptionTracingTransformerPort());
64+
registerTransformer(new FernflowerExceptionTransformerPort());
65+
registerTransformer(new MonitorTransformerPort());
66+
registerTransformer(new OpaquePredicateTransformerPort());
67+
registerTransformer(new RedundantGotoTransformerPort());
68+
registerTransformer(new VisibilityTransformerPort());
69+
3670
// zwyz
3771
registerTransformer(new AnnotationRemoverTransformer()); // runelite
3872
registerTransformer(new DeleteInvokeDynamicTransformer()); // runelite
@@ -67,6 +101,18 @@ public void run(List<ClassNode> classes) throws IOException {
67101

68102
Transformer transformer = this.allTransformers.get(name);
69103
if (transformer != null) {
104+
// openrs2 compat:
105+
Library client = new Library("client");
106+
for (ClassNode clazz : classes) {
107+
client.add(clazz);
108+
}
109+
ClassPath classpath = new ClassPath(
110+
ClassLoader.getPlatformClassLoader(),
111+
List.of(),
112+
List.of(client)
113+
);
114+
transformer.classPath = classpath;
115+
70116
System.out.println("Applying " + name + " transformer");
71117
transformer.transform(classes);
72118
} else {

src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/BitShiftTransformer.java renamed to src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/BitShiftTransformerPort.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
import java.util.List;
1212

13-
public class BitShiftTransformer extends Transformer {
13+
public class BitShiftTransformerPort extends Transformer {
1414
private final InsnMatcher CONST_SHIFT_MATCHER = InsnMatcher.compile(
1515
"(ICONST | BIPUSH | SIPUSH | LDC) (ISHL | ISHR | IUSHR | LSHL | LSHR | LUSHR)"
1616
);

src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/ExceptionObfuscationTransformer.java renamed to src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/ExceptionObfuscationTransformerPort.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* immediately re-throw them. The exception handlers are inserted in locations
1616
* where there is no Java source code equivalent, confusing decompilers.
1717
*/
18-
public class ExceptionObfuscationTransformer extends Transformer {
18+
public class ExceptionObfuscationTransformerPort extends Transformer {
1919
private int handlers = 0;
2020

2121
@Override

src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/ExceptionTracingTransformer.java renamed to src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/ExceptionTracingTransformerPort.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
* obfuscation, it is clearly automatically-generated and thus we remove these
2222
* exception handlers too.
2323
*/
24-
public class ExceptionTracingTransformer extends Transformer {
24+
public class ExceptionTracingTransformerPort extends Transformer {
2525
private final InsnMatcher CATCH_MATCHER = InsnMatcher.compile(
2626
"""
2727
ASTORE? ALOAD?

src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/FernflowerExceptionTransformer.java renamed to src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/FernflowerExceptionTransformerPort.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import java.util.List;
1111

12-
public class FernflowerExceptionTransformer extends Transformer {
12+
public class FernflowerExceptionTransformerPort extends Transformer {
1313
private int nopsInserted = 0;
1414

1515
@Override

src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/MonitorTransformer.java renamed to src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/MonitorTransformerPort.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
* handler pointing to the same `MONITOREXIT` sequence. Adding this isn't
3636
* necessary for Fernflower compatibility.
3737
*/
38-
public class MonitorTransformer extends Transformer {
38+
public class MonitorTransformerPort extends Transformer {
3939
// relies on JsrInliner rewriting RET into GOTO
4040
private final InsnMatcher JSR_MATCHER = InsnMatcher.compile("ACONST_NULL GOTO");
4141
private final InsnMatcher SUBROUTINE_MATCHER = InsnMatcher.compile("ASTORE ALOAD MONITOREXIT GOTO");

src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/OpaquePredicateTransformer.java renamed to src/main/java/rs/lostcity/deob/bytecode/transform/openrs2/OpaquePredicateTransformerPort.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
/*
1515
* Remove opaque predicates
1616
*/
17-
public class OpaquePredicateTransformer extends Transformer {
17+
public class OpaquePredicateTransformerPort extends Transformer {
1818
private final InsnMatcher FLOW_OBSTRUCTOR_INITIALIZER_MATCHER = InsnMatcher.compile(
1919
"""
2020
(GETSTATIC | ILOAD)

0 commit comments

Comments
 (0)