From 5561478ec8ed06a26a2ac3440debb4328f927a8a Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 23 Aug 2015 18:35:45 -0400 Subject: [PATCH] Also direct assignment --- .../code/instructions/PutStatic.java | 12 ++++++++++++ .../deobfuscators/arithmetic/Encryption.java | 18 +++++++++++++++++- .../deobfuscators/arithmetic/ModArith.java | 13 ++++++++++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/runelite/deob/attributes/code/instructions/PutStatic.java b/src/main/java/net/runelite/deob/attributes/code/instructions/PutStatic.java index e95550f159..050af727ce 100644 --- a/src/main/java/net/runelite/deob/attributes/code/instructions/PutStatic.java +++ b/src/main/java/net/runelite/deob/attributes/code/instructions/PutStatic.java @@ -56,6 +56,18 @@ public class PutStatic extends Instruction implements SetFieldInstruction { Pair pair = encryption.getField(myField); InstructionContext ctx = object.getPushed(); + if (ctx.getInstruction() instanceof PushConstantInstruction && pair != null) + { + // field = encryptedvalue + // decrypt value by * getter + + PushConstantInstruction pci = (PushConstantInstruction) ctx.getInstruction(); + int value = (int) pci.getConstant().getObject(); + + value = value * pair.getter; + + encryption.change(pci, value); + } if (ctx.getInstruction() instanceof ISub) { List stackCtx = ctx.getPops(); diff --git a/src/main/java/net/runelite/deob/deobfuscators/arithmetic/Encryption.java b/src/main/java/net/runelite/deob/deobfuscators/arithmetic/Encryption.java index b05133f860..b71b502a94 100644 --- a/src/main/java/net/runelite/deob/deobfuscators/arithmetic/Encryption.java +++ b/src/main/java/net/runelite/deob/deobfuscators/arithmetic/Encryption.java @@ -10,10 +10,17 @@ public class Encryption { private Map fields = new HashMap<>(); private Map changes = new HashMap<>(); + int i; + private Pair p; + + public Encryption(int i) + { + this.i = i; + } public Pair getField(Field field) { - if (field.getName().equals("field1170")) + if (i == 0 && field.getName().equals("field1170")) { Pair p = new Pair(); p.field = field; @@ -22,6 +29,15 @@ public class Encryption assert p.setter == 1237096007; return p; } + if (i == 1 && field.getName().equals("field700")) + { + Pair p = new Pair(); + p.field = field; + p.getter = -478315765; + p.setter = DMath.modInverse(p.getter); + //assert p.setter == + return p; + } return null; //return fields.get(field); } diff --git a/src/main/java/net/runelite/deob/deobfuscators/arithmetic/ModArith.java b/src/main/java/net/runelite/deob/deobfuscators/arithmetic/ModArith.java index 43f3c5ed3f..244c1ff39c 100644 --- a/src/main/java/net/runelite/deob/deobfuscators/arithmetic/ModArith.java +++ b/src/main/java/net/runelite/deob/deobfuscators/arithmetic/ModArith.java @@ -179,7 +179,18 @@ public class ModArith implements Deobfuscator execution = new Execution(group); execution.populateInitialMethods(); - Encryption encr = new Encryption(); + Encryption encr = new Encryption(0); + execution.setEncryption(encr); + + execution.run(); + + encr.doChange(); + + + execution = new Execution(group); + execution.populateInitialMethods(); + + encr = new Encryption(1); execution.setEncryption(encr); execution.run();