From 448685653e90415ebe10b08e8335462b81c30421 Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 2 Feb 2015 21:26:10 -0500 Subject: fix issue with bridge methods --- src/cuchaz/enigma/CommandMain.java | 9 ++-- src/cuchaz/enigma/Deobfuscator.java | 8 ++-- src/cuchaz/enigma/TranslatingTypeLoader.java | 4 +- src/cuchaz/enigma/analysis/BridgeFixer.java | 72 ---------------------------- src/cuchaz/enigma/gui/Gui.java | 3 +- src/cuchaz/enigma/gui/GuiController.java | 5 +- 6 files changed, 14 insertions(+), 87 deletions(-) delete mode 100644 src/cuchaz/enigma/analysis/BridgeFixer.java (limited to 'src') diff --git a/src/cuchaz/enigma/CommandMain.java b/src/cuchaz/enigma/CommandMain.java index 74bd4991..1ec2ad23 100644 --- a/src/cuchaz/enigma/CommandMain.java +++ b/src/cuchaz/enigma/CommandMain.java @@ -2,6 +2,7 @@ package cuchaz.enigma; import java.io.File; import java.io.FileReader; +import java.util.jar.JarFile; import cuchaz.enigma.Deobfuscator.ProgressListener; import cuchaz.enigma.mapping.Mappings; @@ -78,7 +79,7 @@ public class CommandMain { File fileMappings = getReadableFile(getArg(args, 1, "mappings file")); File fileJarIn = getReadableFile(getArg(args, 2, "in jar")); File fileJarOut = getWritableFolder(getArg(args, 3, "out folder")); - Deobfuscator deobfuscator = getDeobfuscator(fileMappings, fileJarIn); + Deobfuscator deobfuscator = getDeobfuscator(fileMappings, new JarFile(fileJarIn)); deobfuscator.writeSources(fileJarOut, new ConsoleProgressListener()); } @@ -87,16 +88,16 @@ public class CommandMain { File fileMappings = getReadableFile(getArg(args, 1, "mappings file")); File fileJarIn = getReadableFile(getArg(args, 2, "in jar")); File fileJarOut = getWritableFile(getArg(args, 3, "out jar")); - Deobfuscator deobfuscator = getDeobfuscator(fileMappings, fileJarIn); + Deobfuscator deobfuscator = getDeobfuscator(fileMappings, new JarFile(fileJarIn)); deobfuscator.writeJar(fileJarOut, new ConsoleProgressListener()); } - private static Deobfuscator getDeobfuscator(File fileMappings, File fileJar) + private static Deobfuscator getDeobfuscator(File fileMappings, JarFile jar) throws Exception { System.out.println("Reading mappings..."); Mappings mappings = new MappingsReader().read(new FileReader(fileMappings)); System.out.println("Reading jar..."); - Deobfuscator deobfuscator = new Deobfuscator(fileJar); + Deobfuscator deobfuscator = new Deobfuscator(jar); deobfuscator.setMappings(mappings); return deobfuscator; } diff --git a/src/cuchaz/enigma/Deobfuscator.java b/src/cuchaz/enigma/Deobfuscator.java index 22c517a1..62c062a5 100644 --- a/src/cuchaz/enigma/Deobfuscator.java +++ b/src/cuchaz/enigma/Deobfuscator.java @@ -68,7 +68,6 @@ public class Deobfuscator { void onProgress(int numDone, String message); } - private File m_file; private JarFile m_jar; private DecompilerSettings m_settings; private JarIndex m_jarIndex; @@ -76,9 +75,8 @@ public class Deobfuscator { private MappingsRenamer m_renamer; private Map m_translatorCache; - public Deobfuscator(File file) throws IOException { - m_file = file; - m_jar = new JarFile(m_file); + public Deobfuscator(JarFile jar) throws IOException { + m_jar = jar; // build the jar index m_jarIndex = new JarIndex(); @@ -100,7 +98,7 @@ public class Deobfuscator { } public String getJarName() { - return m_file.getName(); + return m_jar.getName(); } public JarIndex getJarIndex() { diff --git a/src/cuchaz/enigma/TranslatingTypeLoader.java b/src/cuchaz/enigma/TranslatingTypeLoader.java index 091f916d..9287999b 100644 --- a/src/cuchaz/enigma/TranslatingTypeLoader.java +++ b/src/cuchaz/enigma/TranslatingTypeLoader.java @@ -29,7 +29,6 @@ import com.strobel.assembler.metadata.Buffer; import com.strobel.assembler.metadata.ClasspathTypeLoader; import com.strobel.assembler.metadata.ITypeLoader; -import cuchaz.enigma.analysis.BridgeFixer; import cuchaz.enigma.analysis.JarIndex; import cuchaz.enigma.bytecode.ClassRenamer; import cuchaz.enigma.bytecode.ClassTranslator; @@ -168,7 +167,7 @@ public class TranslatingTypeLoader implements ITypeLoader { assertClassName(c, deobfClassEntry); // DEBUG - // Util.writeClass( c ); + Util.writeClass( c ); // we have a transformed class! return c.toBytecode(); @@ -196,7 +195,6 @@ public class TranslatingTypeLoader implements ITypeLoader { assertClassName(c, obfClassEntry); // do all kinds of deobfuscating transformations on the class - new BridgeFixer(m_jarIndex).fixBridges(c); new MethodParameterWriter(m_deobfuscatingTranslator).writeMethodArguments(c); new ClassTranslator(m_deobfuscatingTranslator).translate(c); diff --git a/src/cuchaz/enigma/analysis/BridgeFixer.java b/src/cuchaz/enigma/analysis/BridgeFixer.java deleted file mode 100644 index ad23b000..00000000 --- a/src/cuchaz/enigma/analysis/BridgeFixer.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ -package cuchaz.enigma.analysis; - -import javassist.CtClass; -import javassist.CtMethod; -import javassist.bytecode.ConstPool; -import javassist.bytecode.Descriptor; -import cuchaz.enigma.bytecode.ConstPoolEditor; -import cuchaz.enigma.mapping.BehaviorEntry; -import cuchaz.enigma.mapping.BehaviorEntryFactory; -import cuchaz.enigma.mapping.ClassEntry; -import cuchaz.enigma.mapping.MethodEntry; - -public class BridgeFixer { - - private JarIndex m_index; - - public BridgeFixer(JarIndex index) { - m_index = index; - } - - public void fixBridges(CtClass c) { - // rename declared methods - for (CtMethod method : c.getDeclaredMethods()) { - // get the method entry - MethodEntry methodEntry = new MethodEntry( - new ClassEntry(Descriptor.toJvmName(c.getName())), - method.getName(), - method.getSignature() - ); - MethodEntry bridgeMethodEntry = m_index.getBridgeMethod(methodEntry); - if (bridgeMethodEntry != null) { - // fix this bridged method - method.setName(bridgeMethodEntry.getName()); - } - } - - // rename method references - // translate all the field and method references in the code by editing the constant pool - ConstPool constants = c.getClassFile().getConstPool(); - ConstPoolEditor editor = new ConstPoolEditor(constants); - for (int i = 1; i < constants.getSize(); i++) { - switch (constants.getTag(i)) { - case ConstPool.CONST_Methodref: - case ConstPool.CONST_InterfaceMethodref: { - BehaviorEntry behaviorEntry = BehaviorEntryFactory.create(Descriptor.toJvmName(editor.getMemberrefClassname(i)), editor.getMemberrefName(i), editor.getMemberrefType(i)); - - if (behaviorEntry instanceof MethodEntry) { - MethodEntry methodEntry = (MethodEntry)behaviorEntry; - - // translate the name and type - MethodEntry bridgeMethodEntry = m_index.getBridgeMethod(methodEntry); - if (bridgeMethodEntry != null) { - // FIXIT FIXIT FIXIT FIXIT FIXIT FIXIT FIXIT - editor.changeMemberrefNameAndType(i, bridgeMethodEntry.getName(), bridgeMethodEntry.getSignature()); - } - } - } - break; - } - } - } -} diff --git a/src/cuchaz/enigma/gui/Gui.java b/src/cuchaz/enigma/gui/Gui.java index 86ba93b2..e652202c 100644 --- a/src/cuchaz/enigma/gui/Gui.java +++ b/src/cuchaz/enigma/gui/Gui.java @@ -33,6 +33,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Vector; +import java.util.jar.JarFile; import javax.swing.BorderFactory; import javax.swing.JEditorPane; @@ -499,7 +500,7 @@ public class Gui { @Override public void run() { try { - m_controller.openJar(m_jarFileChooser.getSelectedFile()); + m_controller.openJar(new JarFile(m_jarFileChooser.getSelectedFile())); } catch (IOException ex) { throw new Error(ex); } diff --git a/src/cuchaz/enigma/gui/GuiController.java b/src/cuchaz/enigma/gui/GuiController.java index 908c16fa..61fea9c0 100644 --- a/src/cuchaz/enigma/gui/GuiController.java +++ b/src/cuchaz/enigma/gui/GuiController.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.util.Collection; import java.util.Deque; import java.util.List; +import java.util.jar.JarFile; import com.google.common.collect.Lists; import com.google.common.collect.Queues; @@ -66,9 +67,9 @@ public class GuiController { return m_isDirty; } - public void openJar(final File file) throws IOException { + public void openJar(final JarFile jar) throws IOException { m_gui.onStartOpenJar(); - m_deobfuscator = new Deobfuscator(file); + m_deobfuscator = new Deobfuscator(jar); m_gui.onFinishOpenJar(m_deobfuscator.getJarName()); refreshClasses(); } -- cgit v1.2.3