diff options
| author | 2014-10-02 22:18:23 -0400 | |
|---|---|---|
| committer | 2014-10-02 22:18:23 -0400 | |
| commit | 42e3b23f03a98a81ce7238bda96c4f046eab30be (patch) | |
| tree | 6593c9c00b70940b3444301f105f7a917b2d29d8 /src | |
| parent | fix inner classes test (diff) | |
| download | enigma-fork-42e3b23f03a98a81ce7238bda96c4f046eab30be.tar.gz enigma-fork-42e3b23f03a98a81ce7238bda96c4f046eab30be.tar.xz enigma-fork-42e3b23f03a98a81ce7238bda96c4f046eab30be.zip | |
fixed issue with decompiling inner classes
Diffstat (limited to 'src')
| -rw-r--r-- | src/cuchaz/enigma/Deobfuscator.java | 8 | ||||
| -rw-r--r-- | src/cuchaz/enigma/Main.java | 3 | ||||
| -rw-r--r-- | src/cuchaz/enigma/TranslatingTypeLoader.java | 2 | ||||
| -rw-r--r-- | src/cuchaz/enigma/analysis/JarIndex.java | 5 |
4 files changed, 12 insertions, 6 deletions
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 | |||
| 127 | Map<String,String> renames = Maps.newHashMap(); | 127 | Map<String,String> renames = Maps.newHashMap(); |
| 128 | for( ClassMapping classMapping : val.classes() ) | 128 | for( ClassMapping classMapping : val.classes() ) |
| 129 | { | 129 | { |
| 130 | String outerClassName = m_jarIndex.getOuterClass( classMapping.getObfName() ); | 130 | // make sure we strip the packages off of obfuscated inner classes |
| 131 | String innerClassName = new ClassEntry( classMapping.getObfName() ).getSimpleName(); | ||
| 132 | String outerClassName = m_jarIndex.getOuterClass( innerClassName ); | ||
| 131 | if( outerClassName != null ) | 133 | if( outerClassName != null ) |
| 132 | { | 134 | { |
| 133 | // build the composite class name | 135 | // build the composite class name |
| 134 | String newName = outerClassName + "$" + new ClassEntry( classMapping.getObfName() ).getSimpleName(); | 136 | String newName = outerClassName + "$" + innerClassName; |
| 135 | 137 | ||
| 136 | // add a rename | 138 | // add a rename |
| 137 | renames.put( classMapping.getObfName(), newName ); | 139 | renames.put( classMapping.getObfName(), newName ); |
| @@ -217,7 +219,7 @@ public class Deobfuscator | |||
| 217 | { | 219 | { |
| 218 | // check the class | 220 | // check the class |
| 219 | ClassEntry classEntry = new ClassEntry( classMapping.getObfName() ); | 221 | ClassEntry classEntry = new ClassEntry( classMapping.getObfName() ); |
| 220 | String outerClassName = m_jarIndex.getOuterClass( classMapping.getObfName() ); | 222 | String outerClassName = m_jarIndex.getOuterClass( classEntry.getSimpleName() ); |
| 221 | if( outerClassName != null ) | 223 | if( outerClassName != null ) |
| 222 | { | 224 | { |
| 223 | classEntry = new ClassEntry( outerClassName + "$" + classMapping.getObfName() ); | 225 | 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; | |||
| 13 | import java.io.File; | 13 | import java.io.File; |
| 14 | 14 | ||
| 15 | import cuchaz.enigma.gui.Gui; | 15 | import cuchaz.enigma.gui.Gui; |
| 16 | import cuchaz.enigma.mapping.ClassEntry; | ||
| 17 | 16 | ||
| 18 | public class Main | 17 | public class Main |
| 19 | { | 18 | { |
| @@ -33,7 +32,7 @@ public class Main | |||
| 33 | } | 32 | } |
| 34 | 33 | ||
| 35 | // DEBUG | 34 | // DEBUG |
| 36 | gui.getController().openDeclaration( new ClassEntry( "none/ry" ) ); | 35 | //gui.getController().openDeclaration( new ClassEntry( "none/ces" ) ); |
| 37 | } | 36 | } |
| 38 | 37 | ||
| 39 | private static File getFile( String path ) | 38 | 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 | |||
| 123 | ClassEntry obfClassEntry = m_obfuscatingTranslator.translateEntry( deobfClassEntry ); | 123 | ClassEntry obfClassEntry = m_obfuscatingTranslator.translateEntry( deobfClassEntry ); |
| 124 | 124 | ||
| 125 | // is this an inner class referenced directly? | 125 | // is this an inner class referenced directly? |
| 126 | String obfOuterClassName = m_jarIndex.getOuterClass( obfClassEntry.getName() ); | 126 | String obfOuterClassName = m_jarIndex.getOuterClass( obfClassEntry.getSimpleName() ); |
| 127 | if( obfOuterClassName != null ) | 127 | if( obfOuterClassName != null ) |
| 128 | { | 128 | { |
| 129 | // this class doesn't really exist. Reference it by outer$inner instead | 129 | // 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 | |||
| 885 | 885 | ||
| 886 | public String getOuterClass( String obfInnerClassName ) | 886 | public String getOuterClass( String obfInnerClassName ) |
| 887 | { | 887 | { |
| 888 | // make sure we use the right name | ||
| 889 | if( new ClassEntry( obfInnerClassName ).getPackageName() != null ) | ||
| 890 | { | ||
| 891 | throw new IllegalArgumentException( "Don't reference obfuscated inner classes using packages: " + obfInnerClassName ); | ||
| 892 | } | ||
| 888 | return m_outerClasses.get( obfInnerClassName ); | 893 | return m_outerClasses.get( obfInnerClassName ); |
| 889 | } | 894 | } |
| 890 | 895 | ||