From 064fe6a628f23f21eb2c8f584215f439e54cfaec Mon Sep 17 00:00:00 2001 From: jeff Date: Wed, 24 Sep 2014 20:32:19 -0400 Subject: fixed in-jar detection for bridge-related methods --- src/cuchaz/enigma/Deobfuscator.java | 39 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 26 deletions(-) (limited to 'src/cuchaz/enigma/Deobfuscator.java') diff --git a/src/cuchaz/enigma/Deobfuscator.java b/src/cuchaz/enigma/Deobfuscator.java index f7f7448..9a33917 100644 --- a/src/cuchaz/enigma/Deobfuscator.java +++ b/src/cuchaz/enigma/Deobfuscator.java @@ -41,6 +41,8 @@ import cuchaz.enigma.analysis.SourceIndex; import cuchaz.enigma.analysis.SourceIndexVisitor; import cuchaz.enigma.analysis.Token; import cuchaz.enigma.mapping.ArgumentEntry; +import cuchaz.enigma.mapping.BehaviorEntry; +import cuchaz.enigma.mapping.BehaviorEntryFactory; import cuchaz.enigma.mapping.ClassEntry; import cuchaz.enigma.mapping.ClassMapping; import cuchaz.enigma.mapping.ConstructorEntry; @@ -165,6 +167,12 @@ public class Deobfuscator // methods for( MethodMapping methodMapping : Lists.newArrayList( classMapping.methods() ) ) { + // skip constructors + if( methodMapping.isConstructor() ) + { + continue; + } + MethodEntry methodEntry = new MethodEntry( obfClassEntry, methodMapping.getObfName(), methodMapping.getObfSignature() ); ClassEntry resolvedObfClassEntry = m_jarIndex.resolveEntryClass( methodEntry ); if( resolvedObfClassEntry != null && !resolvedObfClassEntry.equals( methodEntry.getClassEntry() ) ) @@ -228,33 +236,12 @@ public class Deobfuscator // check methods for( MethodMapping methodMapping : Lists.newArrayList( classMapping.methods() ) ) { - if( methodMapping.getObfName().equals( "" ) ) - { - // skip static initializers - continue; - } - else if( methodMapping.getObfName().equals( "" ) ) - { - ConstructorEntry constructorEntry = new ConstructorEntry( classEntry, methodMapping.getObfSignature() ); - if( !m_jarIndex.containsObfBehavior( constructorEntry ) ) - { - System.err.println( "WARNING: unable to find constructor " + constructorEntry + ". dropping mapping." ); - classMapping.removeMethodMapping( methodMapping ); - } - } - else + BehaviorEntry obfBehaviorEntry = BehaviorEntryFactory.createObf( classEntry, methodMapping ); + if( !m_jarIndex.containsObfBehavior( obfBehaviorEntry ) ) { - MethodEntry methodEntry = new MethodEntry( - classEntry, - methodMapping.getObfName(), - methodMapping.getObfSignature() - ); - if( !m_jarIndex.containsObfBehavior( methodEntry ) ) - { - System.err.println( "WARNING: unable to find method " + methodEntry + ". dropping mapping." ); - classMapping.removeMethodMapping( methodMapping ); - } - } + System.err.println( "WARNING: unable to find behavior " + obfBehaviorEntry + ". dropping mapping." ); + classMapping.removeMethodMapping( methodMapping ); + } } // check inner classes -- cgit v1.2.3