diff options
| author | 2018-07-17 19:14:08 +0200 | |
|---|---|---|
| committer | 2018-07-17 19:14:08 +0200 | |
| commit | a88175ffc95792b88a8724f66db6dda2b8cc32ee (patch) | |
| tree | 65895bbc6cf1766f4ca01e1257619ab1993e71dc /src/main/java/cuchaz/enigma/gui/GuiController.java | |
| parent | Merge pull request #3 from thiakil/src-jar (diff) | |
| download | enigma-fork-a88175ffc95792b88a8724f66db6dda2b8cc32ee.tar.gz enigma-fork-a88175ffc95792b88a8724f66db6dda2b8cc32ee.tar.xz enigma-fork-a88175ffc95792b88a8724f66db6dda2b8cc32ee.zip | |
ASM Based Class Translator (#1)
* Initial port to ASM
* Package updates
* Annotation + inner class translation
* Fix inner class mapping
* More bytecode translation
* Signature refactoring
* Fix highlighting of mapped names
* Fix parameter name offset
* Fix anonymous class generation
* Fix issues with inner class signature transformation
* Fix bridged method detection
* Fix compile issues
* Resolve all failed tests
* Apply deobfuscated name to transformed classes
* Fix class signatures not being translated
* Fix frame array type translation
* Fix frame array type translation
* Fix array translation in method calls
* Fix method reference and bridge detection
* Fix handling of null deobf mappings
* Parameter translation in interfaces
* Fix enum parameter index offset
* Fix parsed local variable indexing
* Fix stackoverflow on rebuilding method names
* Ignore invalid decompiled variable indices
* basic source jar
* Output directly to file on source export
* Make decompile parallel
* fix incorrect super calls
* Use previous save state to delete old mapping files
* Fix old mappings not properly being removed
* Fix old mappings not properly being removed
* make isMethodProvider public
(cherry picked from commit ebad6a9)
* speed up Deobfuscator's getSources by using a single TranslatingTypeloader and caching the ClassLoaderTypeloader
* ignore .idea project folders
* move SynchronizedTypeLoader to a non-inner
* fix signature remap of inners for now
* index & resolve method/field references for usages view
* Allow reader/writer subclasses to provide the underlying file operations
* fix giving obf classes a name not removing them from the panel
* buffer the ParsedJar class entry inputstream, allow use with a jarinputstream
* make CachingClasspathTypeLoader public
* make CachingClasspathTypeLoader public
* support enum switches with obfuscated SwitchMaps
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/GuiController.java')
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/GuiController.java | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/src/main/java/cuchaz/enigma/gui/GuiController.java index 6d98743..ae1b652 100644 --- a/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/src/main/java/cuchaz/enigma/gui/GuiController.java | |||
| @@ -18,6 +18,10 @@ import cuchaz.enigma.Deobfuscator; | |||
| 18 | import cuchaz.enigma.analysis.*; | 18 | import cuchaz.enigma.analysis.*; |
| 19 | import cuchaz.enigma.gui.dialog.ProgressDialog; | 19 | import cuchaz.enigma.gui.dialog.ProgressDialog; |
| 20 | import cuchaz.enigma.mapping.*; | 20 | import cuchaz.enigma.mapping.*; |
| 21 | import cuchaz.enigma.mapping.entry.ClassEntry; | ||
| 22 | import cuchaz.enigma.mapping.entry.Entry; | ||
| 23 | import cuchaz.enigma.mapping.entry.FieldEntry; | ||
| 24 | import cuchaz.enigma.mapping.entry.MethodEntry; | ||
| 21 | import cuchaz.enigma.throwables.MappingParseException; | 25 | import cuchaz.enigma.throwables.MappingParseException; |
| 22 | import cuchaz.enigma.utils.ReadableToken; | 26 | import cuchaz.enigma.utils.ReadableToken; |
| 23 | 27 | ||
| @@ -51,10 +55,10 @@ public class GuiController { | |||
| 51 | return this.isDirty; | 55 | return this.isDirty; |
| 52 | } | 56 | } |
| 53 | 57 | ||
| 54 | public void openJar(final JarFile jar) { | 58 | public void openJar(final JarFile jar) throws IOException { |
| 55 | this.gui.onStartOpenJar(); | 59 | this.gui.onStartOpenJar(); |
| 56 | this.deobfuscator = new Deobfuscator(jar); | 60 | this.deobfuscator = new Deobfuscator(jar); |
| 57 | this.gui.onFinishOpenJar(this.deobfuscator.getJarName()); | 61 | this.gui.onFinishOpenJar(jar.getName()); |
| 58 | refreshClasses(); | 62 | refreshClasses(); |
| 59 | } | 63 | } |
| 60 | 64 | ||
| @@ -161,24 +165,24 @@ public class GuiController { | |||
| 161 | 165 | ||
| 162 | public ClassInheritanceTreeNode getClassInheritance(ClassEntry deobfClassEntry) { | 166 | public ClassInheritanceTreeNode getClassInheritance(ClassEntry deobfClassEntry) { |
| 163 | ClassEntry obfClassEntry = this.deobfuscator.obfuscateEntry(deobfClassEntry); | 167 | ClassEntry obfClassEntry = this.deobfuscator.obfuscateEntry(deobfClassEntry); |
| 164 | ClassInheritanceTreeNode rootNode = this.deobfuscator.getJarIndex().getClassInheritance(this.deobfuscator.getTranslator(TranslationDirection.Deobfuscating), obfClassEntry); | 168 | ClassInheritanceTreeNode rootNode = this.deobfuscator.getJarIndex().getClassInheritance(this.deobfuscator.getTranslator(TranslationDirection.DEOBFUSCATING), obfClassEntry); |
| 165 | return ClassInheritanceTreeNode.findNode(rootNode, obfClassEntry); | 169 | return ClassInheritanceTreeNode.findNode(rootNode, obfClassEntry); |
| 166 | } | 170 | } |
| 167 | 171 | ||
| 168 | public ClassImplementationsTreeNode getClassImplementations(ClassEntry deobfClassEntry) { | 172 | public ClassImplementationsTreeNode getClassImplementations(ClassEntry deobfClassEntry) { |
| 169 | ClassEntry obfClassEntry = this.deobfuscator.obfuscateEntry(deobfClassEntry); | 173 | ClassEntry obfClassEntry = this.deobfuscator.obfuscateEntry(deobfClassEntry); |
| 170 | return this.deobfuscator.getJarIndex().getClassImplementations(this.deobfuscator.getTranslator(TranslationDirection.Deobfuscating), obfClassEntry); | 174 | return this.deobfuscator.getJarIndex().getClassImplementations(this.deobfuscator.getTranslator(TranslationDirection.DEOBFUSCATING), obfClassEntry); |
| 171 | } | 175 | } |
| 172 | 176 | ||
| 173 | public MethodInheritanceTreeNode getMethodInheritance(MethodEntry deobfMethodEntry) { | 177 | public MethodInheritanceTreeNode getMethodInheritance(MethodEntry deobfMethodEntry) { |
| 174 | MethodEntry obfMethodEntry = this.deobfuscator.obfuscateEntry(deobfMethodEntry); | 178 | MethodEntry obfMethodEntry = this.deobfuscator.obfuscateEntry(deobfMethodEntry); |
| 175 | MethodInheritanceTreeNode rootNode = this.deobfuscator.getJarIndex().getMethodInheritance(this.deobfuscator.getTranslator(TranslationDirection.Deobfuscating), obfMethodEntry); | 179 | MethodInheritanceTreeNode rootNode = this.deobfuscator.getJarIndex().getMethodInheritance(this.deobfuscator.getTranslator(TranslationDirection.DEOBFUSCATING), obfMethodEntry); |
| 176 | return MethodInheritanceTreeNode.findNode(rootNode, obfMethodEntry); | 180 | return MethodInheritanceTreeNode.findNode(rootNode, obfMethodEntry); |
| 177 | } | 181 | } |
| 178 | 182 | ||
| 179 | public MethodImplementationsTreeNode getMethodImplementations(MethodEntry deobfMethodEntry) { | 183 | public MethodImplementationsTreeNode getMethodImplementations(MethodEntry deobfMethodEntry) { |
| 180 | MethodEntry obfMethodEntry = this.deobfuscator.obfuscateEntry(deobfMethodEntry); | 184 | MethodEntry obfMethodEntry = this.deobfuscator.obfuscateEntry(deobfMethodEntry); |
| 181 | List<MethodImplementationsTreeNode> rootNodes = this.deobfuscator.getJarIndex().getMethodImplementations(this.deobfuscator.getTranslator(TranslationDirection.Deobfuscating), obfMethodEntry); | 185 | List<MethodImplementationsTreeNode> rootNodes = this.deobfuscator.getJarIndex().getMethodImplementations(this.deobfuscator.getTranslator(TranslationDirection.DEOBFUSCATING), obfMethodEntry); |
| 182 | if (rootNodes.isEmpty()) { | 186 | if (rootNodes.isEmpty()) { |
| 183 | return null; | 187 | return null; |
| 184 | } | 188 | } |
| @@ -190,14 +194,14 @@ public class GuiController { | |||
| 190 | 194 | ||
| 191 | public FieldReferenceTreeNode getFieldReferences(FieldEntry deobfFieldEntry) { | 195 | public FieldReferenceTreeNode getFieldReferences(FieldEntry deobfFieldEntry) { |
| 192 | FieldEntry obfFieldEntry = this.deobfuscator.obfuscateEntry(deobfFieldEntry); | 196 | FieldEntry obfFieldEntry = this.deobfuscator.obfuscateEntry(deobfFieldEntry); |
| 193 | FieldReferenceTreeNode rootNode = new FieldReferenceTreeNode(this.deobfuscator.getTranslator(TranslationDirection.Deobfuscating), obfFieldEntry); | 197 | FieldReferenceTreeNode rootNode = new FieldReferenceTreeNode(this.deobfuscator.getTranslator(TranslationDirection.DEOBFUSCATING), obfFieldEntry); |
| 194 | rootNode.load(this.deobfuscator.getJarIndex(), true); | 198 | rootNode.load(this.deobfuscator.getJarIndex(), true); |
| 195 | return rootNode; | 199 | return rootNode; |
| 196 | } | 200 | } |
| 197 | 201 | ||
| 198 | public BehaviorReferenceTreeNode getMethodReferences(BehaviorEntry deobfBehaviorEntry) { | 202 | public MethodReferenceTreeNode getMethodReferences(MethodEntry deobfMethodEntry) { |
| 199 | BehaviorEntry obfBehaviorEntry = this.deobfuscator.obfuscateEntry(deobfBehaviorEntry); | 203 | MethodEntry obfMethodEntry = this.deobfuscator.obfuscateEntry(deobfMethodEntry); |
| 200 | BehaviorReferenceTreeNode rootNode = new BehaviorReferenceTreeNode(this.deobfuscator.getTranslator(TranslationDirection.Deobfuscating), obfBehaviorEntry); | 204 | MethodReferenceTreeNode rootNode = new MethodReferenceTreeNode(this.deobfuscator.getTranslator(TranslationDirection.DEOBFUSCATING), obfMethodEntry); |
| 201 | rootNode.load(this.deobfuscator.getJarIndex(), true); | 205 | rootNode.load(this.deobfuscator.getJarIndex(), true); |
| 202 | return rootNode; | 206 | return rootNode; |
| 203 | } | 207 | } |