diff options
| -rw-r--r-- | src/cuchaz/enigma/TranslatingTypeLoader.java | 2 | ||||
| -rw-r--r-- | src/cuchaz/enigma/bytecode/LocalVariableRenamer.java | 32 |
2 files changed, 34 insertions, 0 deletions
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; | |||
| 36 | import cuchaz.enigma.bytecode.ClassRenamer; | 36 | import cuchaz.enigma.bytecode.ClassRenamer; |
| 37 | import cuchaz.enigma.bytecode.ClassTranslator; | 37 | import cuchaz.enigma.bytecode.ClassTranslator; |
| 38 | import cuchaz.enigma.bytecode.InnerClassWriter; | 38 | import cuchaz.enigma.bytecode.InnerClassWriter; |
| 39 | import cuchaz.enigma.bytecode.LocalVariableRenamer; | ||
| 39 | import cuchaz.enigma.bytecode.MethodParameterWriter; | 40 | import cuchaz.enigma.bytecode.MethodParameterWriter; |
| 40 | import cuchaz.enigma.mapping.ClassEntry; | 41 | import cuchaz.enigma.mapping.ClassEntry; |
| 41 | import cuchaz.enigma.mapping.Translator; | 42 | import cuchaz.enigma.mapping.Translator; |
| @@ -232,6 +233,7 @@ public class TranslatingTypeLoader implements ITypeLoader { | |||
| 232 | // do all kinds of deobfuscating transformations on the class | 233 | // do all kinds of deobfuscating transformations on the class |
| 233 | new BridgeMarker(m_jarIndex).markBridges(c); | 234 | new BridgeMarker(m_jarIndex).markBridges(c); |
| 234 | new MethodParameterWriter(m_deobfuscatingTranslator).writeMethodArguments(c); | 235 | new MethodParameterWriter(m_deobfuscatingTranslator).writeMethodArguments(c); |
| 236 | new LocalVariableRenamer().rename(c); | ||
| 235 | new ClassTranslator(m_deobfuscatingTranslator).translate(c); | 237 | new ClassTranslator(m_deobfuscatingTranslator).translate(c); |
| 236 | 238 | ||
| 237 | return c; | 239 | 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 @@ | |||
| 1 | package cuchaz.enigma.bytecode; | ||
| 2 | |||
| 3 | import javassist.CtBehavior; | ||
| 4 | import javassist.CtClass; | ||
| 5 | import javassist.bytecode.ByteArray; | ||
| 6 | import javassist.bytecode.ConstPool; | ||
| 7 | import javassist.bytecode.LocalVariableAttribute; | ||
| 8 | |||
| 9 | |||
| 10 | public class LocalVariableRenamer { | ||
| 11 | |||
| 12 | public void rename(CtClass c) { | ||
| 13 | for (CtBehavior behavior : c.getDeclaredBehaviors()) { | ||
| 14 | |||
| 15 | // if there's a local variable table, just rename everything to v1, v2, v3, ... for now | ||
| 16 | LocalVariableAttribute table = (LocalVariableAttribute)behavior.getMethodInfo().getCodeAttribute().getAttribute(LocalVariableAttribute.tag); | ||
| 17 | if (table == null) { | ||
| 18 | continue; | ||
| 19 | } | ||
| 20 | |||
| 21 | ConstPool constants = c.getClassFile().getConstPool(); | ||
| 22 | for (int i=0; i<table.tableLength(); i++) { | ||
| 23 | renameVariable(table, i, constants.addUtf8Info("v" + i)); | ||
| 24 | } | ||
| 25 | } | ||
| 26 | } | ||
| 27 | |||
| 28 | private void renameVariable(LocalVariableAttribute table, int i, int stringId) { | ||
| 29 | // based off of LocalVariableAttribute.nameIndex() | ||
| 30 | ByteArray.write16bit(stringId, table.get(), i*10 + 6); | ||
| 31 | } | ||
| 32 | } | ||