summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/Deobfuscator.java
diff options
context:
space:
mode:
authorGravatar jeff2014-09-01 22:52:07 -0400
committerGravatar jeff2014-09-01 22:52:07 -0400
commit360bbd1c2fca8cbd575907b7d930a8072fccb0c2 (patch)
tree93d0f3c4a0901411427df580c5ddb75cf27440f1 /src/cuchaz/enigma/Deobfuscator.java
parentadded copyright notice (diff)
downloadenigma-fork-360bbd1c2fca8cbd575907b7d930a8072fccb0c2.tar.gz
enigma-fork-360bbd1c2fca8cbd575907b7d930a8072fccb0c2.tar.xz
enigma-fork-360bbd1c2fca8cbd575907b7d930a8072fccb0c2.zip
refactored jar,translation index. fixed bug with field renaming when fields are shadowed by subclasses
Diffstat (limited to 'src/cuchaz/enigma/Deobfuscator.java')
-rw-r--r--src/cuchaz/enigma/Deobfuscator.java43
1 files changed, 27 insertions, 16 deletions
diff --git a/src/cuchaz/enigma/Deobfuscator.java b/src/cuchaz/enigma/Deobfuscator.java
index 49aa1ff..0356f92 100644
--- a/src/cuchaz/enigma/Deobfuscator.java
+++ b/src/cuchaz/enigma/Deobfuscator.java
@@ -15,10 +15,12 @@ import java.io.FileWriter;
15import java.io.IOException; 15import java.io.IOException;
16import java.io.StringWriter; 16import java.io.StringWriter;
17import java.util.List; 17import java.util.List;
18import java.util.Map;
18import java.util.jar.JarFile; 19import java.util.jar.JarFile;
19 20
20import javassist.bytecode.Descriptor; 21import javassist.bytecode.Descriptor;
21 22
23import com.google.common.collect.Maps;
22import com.strobel.assembler.metadata.MetadataSystem; 24import com.strobel.assembler.metadata.MetadataSystem;
23import com.strobel.assembler.metadata.TypeDefinition; 25import com.strobel.assembler.metadata.TypeDefinition;
24import com.strobel.decompiler.DecompilerContext; 26import com.strobel.decompiler.DecompilerContext;
@@ -42,7 +44,7 @@ import cuchaz.enigma.mapping.FieldEntry;
42import cuchaz.enigma.mapping.Mappings; 44import cuchaz.enigma.mapping.Mappings;
43import cuchaz.enigma.mapping.MethodEntry; 45import cuchaz.enigma.mapping.MethodEntry;
44import cuchaz.enigma.mapping.MethodMapping; 46import cuchaz.enigma.mapping.MethodMapping;
45import cuchaz.enigma.mapping.Renamer; 47import cuchaz.enigma.mapping.MappingsRenamer;
46import cuchaz.enigma.mapping.TranslationDirection; 48import cuchaz.enigma.mapping.TranslationDirection;
47import cuchaz.enigma.mapping.Translator; 49import cuchaz.enigma.mapping.Translator;
48 50
@@ -59,8 +61,8 @@ public class Deobfuscator
59 private DecompilerSettings m_settings; 61 private DecompilerSettings m_settings;
60 private JarIndex m_jarIndex; 62 private JarIndex m_jarIndex;
61 private Mappings m_mappings; 63 private Mappings m_mappings;
62 private Renamer m_renamer; 64 private MappingsRenamer m_renamer;
63 private TranslatingTypeLoader m_typeLoader; 65 private Map<TranslationDirection,Translator> m_translatorCache;
64 66
65 public Deobfuscator( File file ) 67 public Deobfuscator( File file )
66 throws IOException 68 throws IOException
@@ -78,6 +80,9 @@ public class Deobfuscator
78 // DEBUG 80 // DEBUG
79 //m_settings.setShowSyntheticMembers( true ); 81 //m_settings.setShowSyntheticMembers( true );
80 82
83 // init defaults
84 m_translatorCache = Maps.newTreeMap();
85
81 // init mappings 86 // init mappings
82 setMappings( new Mappings() ); 87 setMappings( new Mappings() );
83 } 88 }
@@ -134,21 +139,19 @@ public class Deobfuscator
134 } 139 }
135 140
136 m_mappings = val; 141 m_mappings = val;
137 m_renamer = new Renamer( m_jarIndex, m_mappings ); 142 m_renamer = new MappingsRenamer( m_jarIndex, m_mappings );
138 143 m_translatorCache.clear();
139 // update decompiler options
140 m_typeLoader = new TranslatingTypeLoader(
141 m_jar,
142 m_jarIndex,
143 getTranslator( TranslationDirection.Obfuscating ),
144 getTranslator( TranslationDirection.Deobfuscating )
145 );
146 m_settings.setTypeLoader( m_typeLoader );
147 } 144 }
148 145
149 public Translator getTranslator( TranslationDirection direction ) 146 public Translator getTranslator( TranslationDirection direction )
150 { 147 {
151 return m_mappings.getTranslator( m_jarIndex.getAncestries(), direction ); 148 Translator translator = m_translatorCache.get( direction );
149 if( translator == null )
150 {
151 translator = m_mappings.getTranslator( m_jarIndex.getTranslationIndex(), direction );
152 m_translatorCache.put( direction, translator );
153 }
154 return translator;
152 } 155 }
153 156
154 public void getSeparatedClasses( List<ClassEntry> obfClasses, List<ClassEntry> deobfClasses ) 157 public void getSeparatedClasses( List<ClassEntry> obfClasses, List<ClassEntry> deobfClasses )
@@ -192,6 +195,14 @@ public class Deobfuscator
192 className = classMapping.getDeobfName(); 195 className = classMapping.getDeobfName();
193 } 196 }
194 197
198 // set the type loader
199 m_settings.setTypeLoader( new TranslatingTypeLoader(
200 m_jar,
201 m_jarIndex,
202 getTranslator( TranslationDirection.Obfuscating ),
203 getTranslator( TranslationDirection.Deobfuscating )
204 ) );
205
195 // decompile it! 206 // decompile it!
196 TypeDefinition resolvedType = new MetadataSystem( m_settings.getTypeLoader() ).lookupType( className ).resolve(); 207 TypeDefinition resolvedType = new MetadataSystem( m_settings.getTypeLoader() ).lookupType( className ).resolve();
197 DecompilerContext context = new DecompilerContext(); 208 DecompilerContext context = new DecompilerContext();
@@ -350,8 +361,8 @@ public class Deobfuscator
350 throw new Error( "Unknown entry type: " + obfEntry.getClass().getName() ); 361 throw new Error( "Unknown entry type: " + obfEntry.getClass().getName() );
351 } 362 }
352 363
353 // clear the type loader cache 364 // clear caches
354 m_typeLoader.clearCache(); 365 m_translatorCache.clear();
355 } 366 }
356 367
357 public boolean hasMapping( Entry obfEntry ) 368 public boolean hasMapping( Entry obfEntry )