From eee8c73a5b845551dc1a9f9e0bccd19a99b4ad75 Mon Sep 17 00:00:00 2001 From: Lucwousin Date: Thu, 2 Jan 2020 13:41:35 +0100 Subject: [PATCH] Modify src debuginfo to make stacktraces less cryptical --- build.gradle.kts | 11 ---- .../java/com/openosrs/injector/Injection.java | 15 +++++ .../openosrs/injector/InjectorValidator.java | 9 +-- .../com/openosrs/injector/Injexception.java | 2 +- .../injector/injectors/AbstractInjector.java | 7 +- .../transformers/InjectTransformer.java | 42 ++++++++++++ .../injector/transformers/SourceChanger.java | 39 +++++++++++ .../transformers/SourceChangerTest.java | 64 +++++++++++++++++++ .../srcchangeclasses/NewName.java | 16 +++++ .../srcchangeclasses/OldName.java | 16 +++++ 10 files changed, 198 insertions(+), 23 deletions(-) create mode 100644 src/main/java/com/openosrs/injector/transformers/InjectTransformer.java create mode 100644 src/main/java/com/openosrs/injector/transformers/SourceChanger.java create mode 100644 src/test/java/com/openosrs/injector/transformers/SourceChangerTest.java create mode 100644 src/test/java/com/openosrs/injector/transformers/srcchangeclasses/NewName.java create mode 100644 src/test/java/com/openosrs/injector/transformers/srcchangeclasses/OldName.java diff --git a/build.gradle.kts b/build.gradle.kts index a4dd1b3..36da6ff 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -66,14 +66,3 @@ val compileTestKotlin: KotlinCompile by tasks compileTestKotlin.kotlinOptions { jvmTarget = "1.8" } - -publishing { - repositories { - mavenLocal() - } - publications { - register("asd", MavenPublication::class) { - from(components["java"]) - } - } -} \ No newline at end of file diff --git a/src/main/java/com/openosrs/injector/Injection.java b/src/main/java/com/openosrs/injector/Injection.java index 652ea2c..80ee04b 100644 --- a/src/main/java/com/openosrs/injector/Injection.java +++ b/src/main/java/com/openosrs/injector/Injection.java @@ -23,6 +23,8 @@ import com.openosrs.injector.injectors.raw.RasterizerAlpha; import com.openosrs.injector.injectors.raw.RenderDraw; import com.openosrs.injector.injectors.raw.ScriptVM; import com.openosrs.injector.rsapi.RSApi; +import com.openosrs.injector.transformers.InjectTransformer; +import com.openosrs.injector.transformers.SourceChanger; import java.io.File; import java.io.IOException; import net.runelite.deob.util.JarUtil; @@ -78,6 +80,8 @@ public class Injection extends InjectData implements InjectTaskHandler inject(new HidePlayerAttacks(this)); validate(new InjectorValidator(this)); + + transform(new SourceChanger(this)); } public void save(File outputJar) throws IOException @@ -113,6 +117,17 @@ public class Injection extends InjectData implements InjectTaskHandler } } + private void transform(InjectTransformer transformer) + { + final String name = transformer.getName(); + + log.info("Starting {}", name); + + transformer.transform(); + + log.lifecycle("{} {}", name, transformer.getCompletionMsg()); + } + public void runChildInjector(Injector injector) throws Injexception { inject(injector); diff --git a/src/main/java/com/openosrs/injector/InjectorValidator.java b/src/main/java/com/openosrs/injector/InjectorValidator.java index 713006b..931a859 100644 --- a/src/main/java/com/openosrs/injector/InjectorValidator.java +++ b/src/main/java/com/openosrs/injector/InjectorValidator.java @@ -9,14 +9,16 @@ package com.openosrs.injector; import com.openosrs.injector.injection.InjectData; import com.openosrs.injector.rsapi.RSApi; -import static com.openosrs.injector.rsapi.RSApi.API_BASE; import com.openosrs.injector.rsapi.RSApiClass; import com.openosrs.injector.rsapi.RSApiMethod; +import lombok.RequiredArgsConstructor; import net.runelite.asm.ClassFile; import net.runelite.asm.pool.Class; import org.gradle.api.logging.Logger; import org.gradle.api.logging.Logging; +import static com.openosrs.injector.rsapi.RSApi.API_BASE; +@RequiredArgsConstructor public class InjectorValidator implements Validator { private static final Logger log = Logging.getLogger(InjectorValidator.class); @@ -25,11 +27,6 @@ public class InjectorValidator implements Validator private int missing = 0, okay = 0, wtf = 0; - InjectorValidator(InjectData inject) - { - this.inject = inject; - } - public boolean validate() { final RSApi rsApi = inject.getRsApi(); diff --git a/src/main/java/com/openosrs/injector/Injexception.java b/src/main/java/com/openosrs/injector/Injexception.java index 0dd69ed..eae1ac5 100644 --- a/src/main/java/com/openosrs/injector/Injexception.java +++ b/src/main/java/com/openosrs/injector/Injexception.java @@ -7,7 +7,7 @@ */ package com.openosrs.injector; -public class Injexception extends Exception +public class Injexception extends RuntimeException { public Injexception(String message) { diff --git a/src/main/java/com/openosrs/injector/injectors/AbstractInjector.java b/src/main/java/com/openosrs/injector/injectors/AbstractInjector.java index c2f02da..b1c645c 100644 --- a/src/main/java/com/openosrs/injector/injectors/AbstractInjector.java +++ b/src/main/java/com/openosrs/injector/injectors/AbstractInjector.java @@ -9,20 +9,17 @@ package com.openosrs.injector.injectors; import com.google.common.base.Stopwatch; import com.openosrs.injector.injection.InjectData; +import lombok.RequiredArgsConstructor; import org.gradle.api.logging.Logger; import org.gradle.api.logging.Logging; +@RequiredArgsConstructor public abstract class AbstractInjector implements Injector { protected final InjectData inject; protected final Logger log = Logging.getLogger(this.getClass()); private Stopwatch stopwatch; - protected AbstractInjector(InjectData inject) - { - this.inject = inject; - } - public void start() { stopwatch = Stopwatch.createStarted(); diff --git a/src/main/java/com/openosrs/injector/transformers/InjectTransformer.java b/src/main/java/com/openosrs/injector/transformers/InjectTransformer.java new file mode 100644 index 0000000..270b8b7 --- /dev/null +++ b/src/main/java/com/openosrs/injector/transformers/InjectTransformer.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2020, Lucas + * All rights reserved. + * + * This code is licensed under GPL3, see the complete license in + * the LICENSE file in the root directory of this source tree. + */ +package com.openosrs.injector.transformers; + +import com.google.common.base.Stopwatch; +import com.openosrs.injector.injection.InjectData; +import lombok.RequiredArgsConstructor; +import net.runelite.asm.Named; +import org.gradle.api.logging.Logger; +import org.gradle.api.logging.Logging; + +@RequiredArgsConstructor +public abstract class InjectTransformer implements Named +{ + protected final InjectData inject; + protected final Logger log = Logging.getLogger(this.getClass()); + private Stopwatch stopwatch; + + public final void transform() + { + stopwatch = Stopwatch.createStarted(); + transformImpl(); + } + + abstract void transformImpl(); + + public final String getCompletionMsg() + { + return "finished in " + stopwatch.toString(); + } + + @Override + public final String getName() + { + return this.getClass().getSimpleName(); + } +} diff --git a/src/main/java/com/openosrs/injector/transformers/SourceChanger.java b/src/main/java/com/openosrs/injector/transformers/SourceChanger.java new file mode 100644 index 0000000..c53b87a --- /dev/null +++ b/src/main/java/com/openosrs/injector/transformers/SourceChanger.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2020, Lucas + * All rights reserved. + * + * This code is licensed under GPL3, see the complete license in + * the LICENSE file in the root directory of this source tree. + */ +package com.openosrs.injector.transformers; + +import com.openosrs.injector.injection.InjectData; +import net.runelite.asm.ClassFile; + +/** + * This class changes the java source file debug information to the rs-client file name + */ +public class SourceChanger extends InjectTransformer +{ + private int n = 0; + + public SourceChanger(InjectData inject) + { + super(inject); + } + + @Override + void transformImpl() + { + inject.forEachPair(this::rename); + log.info("Changed source file debug information for {} classes", n); + } + + private void rename(ClassFile rsclient, ClassFile vanilla) + { + ++n; + final String newSrc = rsclient.getSource(); + log.debug("Changing src from {} to {}", vanilla.getSource(), newSrc); + vanilla.setSource(newSrc); + } +} diff --git a/src/test/java/com/openosrs/injector/transformers/SourceChangerTest.java b/src/test/java/com/openosrs/injector/transformers/SourceChangerTest.java new file mode 100644 index 0000000..1ad48b5 --- /dev/null +++ b/src/test/java/com/openosrs/injector/transformers/SourceChangerTest.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2020, Lucas + * All rights reserved. + * + * This code is licensed under GPL3, see the complete license in + * the LICENSE file in the root directory of this source tree. + */ +package com.openosrs.injector.transformers; + +import com.openosrs.injector.Injexception; +import com.openosrs.injector.injection.InjectData; +import com.openosrs.injector.injectors.Injector; +import com.openosrs.injector.transformers.srcchangeclasses.NewName; +import com.openosrs.injector.transformers.srcchangeclasses.OldName; +import java.lang.invoke.MethodHandles; +import java.util.function.BiConsumer; +import net.runelite.asm.ClassFile; +import net.runelite.asm.ClassGroup; +import net.runelite.asm.objectwebasm.NonloadingClassWriter; +import net.runelite.asm.visitors.ClassFileVisitor; +import org.junit.Ignore; +import org.junit.Test; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassWriter; + +public class SourceChangerTest +{ + private static final String PACKAGE = "com.openosrs.injector.transformers.srcchangeclasses."; + + @Test + @Ignore // Ignored because it's not really testing anything atm, but it works! + public void test() throws Exception + { + final ClassFileVisitor deob = new ClassFileVisitor(), vann = new ClassFileVisitor(); + new ClassReader(PACKAGE + "NewName").accept(deob, ClassReader.SKIP_FRAMES); + new ClassReader(PACKAGE + "OldName").accept(vann, ClassReader.SKIP_FRAMES); + + new SourceChanger( + new InjectData(new ClassGroup(), new ClassGroup(), null, null) { + public void runChildInjector(Injector injector) throws Injexception {} + + @Override + public void forEachPair(BiConsumer consumer) + { + consumer.accept(deob.getClassFile(), vann.getClassFile()); + } + }).transformImpl(); + + final ClassGroup group = new ClassGroup(); + group.addClass(vann.getClassFile()); + + final ClassWriter cw = new NonloadingClassWriter(group, 0); + vann.getClassFile().accept(cw); + + OldName obj = (OldName) MethodHandles.privateLookupIn( + NewName.class, + MethodHandles.lookup()) + .defineClass(cw.toByteArray()) + .getDeclaredConstructor() + .newInstance(); + + obj.obfMethodName(); + } +} diff --git a/src/test/java/com/openosrs/injector/transformers/srcchangeclasses/NewName.java b/src/test/java/com/openosrs/injector/transformers/srcchangeclasses/NewName.java new file mode 100644 index 0000000..7578ed7 --- /dev/null +++ b/src/test/java/com/openosrs/injector/transformers/srcchangeclasses/NewName.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2020, Lucas + * All rights reserved. + * + * This code is licensed under GPL3, see the complete license in + * the LICENSE file in the root directory of this source tree. + */ +package com.openosrs.injector.transformers.srcchangeclasses; + +public class NewName +{ + public void deobMethodName() + { + // do something interesting + } +} diff --git a/src/test/java/com/openosrs/injector/transformers/srcchangeclasses/OldName.java b/src/test/java/com/openosrs/injector/transformers/srcchangeclasses/OldName.java new file mode 100644 index 0000000..b8adde5 --- /dev/null +++ b/src/test/java/com/openosrs/injector/transformers/srcchangeclasses/OldName.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2020, Lucas + * All rights reserved. + * + * This code is licensed under GPL3, see the complete license in + * the LICENSE file in the root directory of this source tree. + */ +package com.openosrs.injector.transformers.srcchangeclasses; + +public class OldName +{ + public void obfMethodName() + { + new RuntimeException().printStackTrace(); + } +}