From 42e3b23f03a98a81ce7238bda96c4f046eab30be Mon Sep 17 00:00:00 2001 From: jeff Date: Thu, 2 Oct 2014 22:18:23 -0400 Subject: fixed issue with decompiling inner classes --- src/cuchaz/enigma/Deobfuscator.java | 8 +++++--- src/cuchaz/enigma/Main.java | 3 +-- src/cuchaz/enigma/TranslatingTypeLoader.java | 2 +- src/cuchaz/enigma/analysis/JarIndex.java | 5 +++++ 4 files changed, 12 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/cuchaz/enigma/Deobfuscator.java b/src/cuchaz/enigma/Deobfuscator.java index 7e0f092..82c786c 100644 --- a/src/cuchaz/enigma/Deobfuscator.java +++ b/src/cuchaz/enigma/Deobfuscator.java @@ -127,11 +127,13 @@ public class Deobfuscator Map renames = Maps.newHashMap(); for( ClassMapping classMapping : val.classes() ) { - String outerClassName = m_jarIndex.getOuterClass( classMapping.getObfName() ); + // make sure we strip the packages off of obfuscated inner classes + String innerClassName = new ClassEntry( classMapping.getObfName() ).getSimpleName(); + String outerClassName = m_jarIndex.getOuterClass( innerClassName ); if( outerClassName != null ) { // build the composite class name - String newName = outerClassName + "$" + new ClassEntry( classMapping.getObfName() ).getSimpleName(); + String newName = outerClassName + "$" + innerClassName; // add a rename renames.put( classMapping.getObfName(), newName ); @@ -217,7 +219,7 @@ public class Deobfuscator { // check the class ClassEntry classEntry = new ClassEntry( classMapping.getObfName() ); - String outerClassName = m_jarIndex.getOuterClass( classMapping.getObfName() ); + String outerClassName = m_jarIndex.getOuterClass( classEntry.getSimpleName() ); if( outerClassName != null ) { classEntry = new ClassEntry( outerClassName + "$" + classMapping.getObfName() ); diff --git a/src/cuchaz/enigma/Main.java b/src/cuchaz/enigma/Main.java index 371662b..73a12db 100644 --- a/src/cuchaz/enigma/Main.java +++ b/src/cuchaz/enigma/Main.java @@ -13,7 +13,6 @@ package cuchaz.enigma; import java.io.File; import cuchaz.enigma.gui.Gui; -import cuchaz.enigma.mapping.ClassEntry; public class Main { @@ -33,7 +32,7 @@ public class Main } // DEBUG - gui.getController().openDeclaration( new ClassEntry( "none/ry" ) ); + //gui.getController().openDeclaration( new ClassEntry( "none/ces" ) ); } private static File getFile( String path ) diff --git a/src/cuchaz/enigma/TranslatingTypeLoader.java b/src/cuchaz/enigma/TranslatingTypeLoader.java index 939e342..e69e5cf 100644 --- a/src/cuchaz/enigma/TranslatingTypeLoader.java +++ b/src/cuchaz/enigma/TranslatingTypeLoader.java @@ -123,7 +123,7 @@ public class TranslatingTypeLoader implements ITypeLoader ClassEntry obfClassEntry = m_obfuscatingTranslator.translateEntry( deobfClassEntry ); // is this an inner class referenced directly? - String obfOuterClassName = m_jarIndex.getOuterClass( obfClassEntry.getName() ); + String obfOuterClassName = m_jarIndex.getOuterClass( obfClassEntry.getSimpleName() ); if( obfOuterClassName != null ) { // this class doesn't really exist. Reference it by outer$inner instead diff --git a/src/cuchaz/enigma/analysis/JarIndex.java b/src/cuchaz/enigma/analysis/JarIndex.java index ba08206..0954564 100644 --- a/src/cuchaz/enigma/analysis/JarIndex.java +++ b/src/cuchaz/enigma/analysis/JarIndex.java @@ -885,6 +885,11 @@ public class JarIndex public String getOuterClass( String obfInnerClassName ) { + // make sure we use the right name + if( new ClassEntry( obfInnerClassName ).getPackageName() != null ) + { + throw new IllegalArgumentException( "Don't reference obfuscated inner classes using packages: " + obfInnerClassName ); + } return m_outerClasses.get( obfInnerClassName ); } -- cgit v1.2.3