From b0b11cf9c89b840bdd7a0145c0c756ce564c6c60 Mon Sep 17 00:00:00 2001 From: Tyler Bochard Date: Sun, 21 Apr 2019 21:51:25 -0400 Subject: [PATCH] ByteCodePatcher (#39) Adds ErrorTransform -This prevents the client from sending any stack traces to Jagex. (a huge client detection system they use) --- .../client/rs/bytecode/ByteCodePatcher.java | 7 ++-- .../bytecode/transformers/ErrorTransform.java | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/rs/bytecode/transformers/ErrorTransform.java diff --git a/runelite-client/src/main/java/net/runelite/client/rs/bytecode/ByteCodePatcher.java b/runelite-client/src/main/java/net/runelite/client/rs/bytecode/ByteCodePatcher.java index 1ab7c2da3e..abd4a970dc 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/bytecode/ByteCodePatcher.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/bytecode/ByteCodePatcher.java @@ -9,6 +9,7 @@ import net.runelite.client.RuneLite; import net.runelite.client.rs.ClientLoader; import net.runelite.client.rs.bytecode.transformers.ActorTransform; import net.runelite.client.rs.bytecode.transformers.ClientTransform; +import net.runelite.client.rs.bytecode.transformers.ErrorTransform; import net.runelite.client.rs.bytecode.transformers.PlayerTransform; import net.runelite.client.rs.bytecode.transformers.ProjectileTransform; import net.runelite.http.api.RuneLiteAPI; @@ -50,11 +51,13 @@ public class ByteCodePatcher { transformProjectile(projectileClass); Class playerClass = Class.forName(hooks.playerClass, false, child); transformPlayer(playerClass); - - //experimental Class clientClass = Class.forName("client", false, child); transformBlackjack(clientClass); + //Odds and ends + ErrorTransform et = new ErrorTransform(); + et.modify(null); + ByteCodeUtils.updateHijackedJar(); } catch (Exception e) { e.printStackTrace(); diff --git a/runelite-client/src/main/java/net/runelite/client/rs/bytecode/transformers/ErrorTransform.java b/runelite-client/src/main/java/net/runelite/client/rs/bytecode/transformers/ErrorTransform.java new file mode 100644 index 0000000000..0799613feb --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/rs/bytecode/transformers/ErrorTransform.java @@ -0,0 +1,36 @@ +package net.runelite.client.rs.bytecode.transformers; + +import javassist.CtClass; +import javassist.CtMethod; +import javassist.CtNewMethod; +import net.runelite.client.rs.bytecode.ByteCodePatcher; + +//This prevents the client from sending stack traces to Jagex at all, even classes outside of runelite. +public class ErrorTransform implements Transform { + public CtClass ct = null; + + //Where Runelites error interceptor is located, not auto-scraped. + private final String ERROR_INSTANCE_CLASS = "dp"; + private final String ERROR_INSTANCE_METHOD = "a"; + + @Override + public void modify(Class clazz) { + try { + System.out.println("[RuneLit] Transforming error method at class: "+ERROR_INSTANCE_CLASS); + ct = ByteCodePatcher.classPool.get(ERROR_INSTANCE_CLASS); + CtMethod error = ct.getDeclaredMethod(ERROR_INSTANCE_METHOD); + ct.removeMethod(error); + error = CtMethod.make("public static void a(String string, Throwable throwable, byte by) {"+ + " return;"+ + " }", ct); + ct.addMethod(error); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void transform() { + + } +}