From e8d6cb9e1ab61357ac26eb93a0a67917ded8a7b5 Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 2 Mar 2015 01:41:28 -0500 Subject: added simple renamer for local variable table --- src/cuchaz/enigma/TranslatingTypeLoader.java | 2 ++ .../enigma/bytecode/LocalVariableRenamer.java | 32 ++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/cuchaz/enigma/bytecode/LocalVariableRenamer.java diff --git a/src/cuchaz/enigma/TranslatingTypeLoader.java b/src/cuchaz/enigma/TranslatingTypeLoader.java index 94ad6eb..7b57cfa 100644 --- a/src/cuchaz/enigma/TranslatingTypeLoader.java +++ b/src/cuchaz/enigma/TranslatingTypeLoader.java @@ -36,6 +36,7 @@ import cuchaz.enigma.analysis.JarIndex; import cuchaz.enigma.bytecode.ClassRenamer; import cuchaz.enigma.bytecode.ClassTranslator; import cuchaz.enigma.bytecode.InnerClassWriter; +import cuchaz.enigma.bytecode.LocalVariableRenamer; import cuchaz.enigma.bytecode.MethodParameterWriter; import cuchaz.enigma.mapping.ClassEntry; import cuchaz.enigma.mapping.Translator; @@ -232,6 +233,7 @@ public class TranslatingTypeLoader implements ITypeLoader { // do all kinds of deobfuscating transformations on the class new BridgeMarker(m_jarIndex).markBridges(c); new MethodParameterWriter(m_deobfuscatingTranslator).writeMethodArguments(c); + new LocalVariableRenamer().rename(c); new ClassTranslator(m_deobfuscatingTranslator).translate(c); return c; diff --git a/src/cuchaz/enigma/bytecode/LocalVariableRenamer.java b/src/cuchaz/enigma/bytecode/LocalVariableRenamer.java new file mode 100644 index 0000000..53f207c --- /dev/null +++ b/src/cuchaz/enigma/bytecode/LocalVariableRenamer.java @@ -0,0 +1,32 @@ +package cuchaz.enigma.bytecode; + +import javassist.CtBehavior; +import javassist.CtClass; +import javassist.bytecode.ByteArray; +import javassist.bytecode.ConstPool; +import javassist.bytecode.LocalVariableAttribute; + + +public class LocalVariableRenamer { + + public void rename(CtClass c) { + for (CtBehavior behavior : c.getDeclaredBehaviors()) { + + // if there's a local variable table, just rename everything to v1, v2, v3, ... for now + LocalVariableAttribute table = (LocalVariableAttribute)behavior.getMethodInfo().getCodeAttribute().getAttribute(LocalVariableAttribute.tag); + if (table == null) { + continue; + } + + ConstPool constants = c.getClassFile().getConstPool(); + for (int i=0; i