diff options
Diffstat (limited to 'src/main/java')
9 files changed, 16 insertions, 36 deletions
diff --git a/src/main/java/cuchaz/enigma/Constants.java b/src/main/java/cuchaz/enigma/Constants.java index 5bdb3af..0473048 100644 --- a/src/main/java/cuchaz/enigma/Constants.java +++ b/src/main/java/cuchaz/enigma/Constants.java | |||
| @@ -16,5 +16,4 @@ public class Constants { | |||
| 16 | public static final String URL = "http://www.cuchazinteractive.com/enigma"; | 16 | public static final String URL = "http://www.cuchazinteractive.com/enigma"; |
| 17 | public static final int MiB = 1024 * 1024; // 1 mebibyte | 17 | public static final int MiB = 1024 * 1024; // 1 mebibyte |
| 18 | public static final int KiB = 1024; // 1 kebibyte | 18 | public static final int KiB = 1024; // 1 kebibyte |
| 19 | public static final String NONE_PACKAGE = "none"; | ||
| 20 | } | 19 | } |
diff --git a/src/main/java/cuchaz/enigma/Deobfuscator.java b/src/main/java/cuchaz/enigma/Deobfuscator.java index 2207999..e9a998d 100644 --- a/src/main/java/cuchaz/enigma/Deobfuscator.java +++ b/src/main/java/cuchaz/enigma/Deobfuscator.java | |||
| @@ -146,7 +146,7 @@ public class Deobfuscator { | |||
| 146 | if (!deobfClassEntry.equals(obfClassEntry)) { | 146 | if (!deobfClassEntry.equals(obfClassEntry)) { |
| 147 | // if the class has a mapping, clearly it's deobfuscated | 147 | // if the class has a mapping, clearly it's deobfuscated |
| 148 | deobfClasses.add(deobfClassEntry); | 148 | deobfClasses.add(deobfClassEntry); |
| 149 | } else if (!obfClassEntry.getPackageName().equals(Constants.NONE_PACKAGE)) { | 149 | } else if (obfClassEntry.getPackageName() != null) { |
| 150 | // also call it deobufscated if it's not in the none package | 150 | // also call it deobufscated if it's not in the none package |
| 151 | deobfClasses.add(obfClassEntry); | 151 | deobfClasses.add(obfClassEntry); |
| 152 | } else { | 152 | } else { |
diff --git a/src/main/java/cuchaz/enigma/TranslatingTypeLoader.java b/src/main/java/cuchaz/enigma/TranslatingTypeLoader.java index 13efbd5..e4c162d 100644 --- a/src/main/java/cuchaz/enigma/TranslatingTypeLoader.java +++ b/src/main/java/cuchaz/enigma/TranslatingTypeLoader.java | |||
| @@ -187,10 +187,6 @@ public class TranslatingTypeLoader implements ITypeLoader { | |||
| 187 | public List<String> getClassNamesToTry(ClassEntry obfClassEntry) { | 187 | public List<String> getClassNamesToTry(ClassEntry obfClassEntry) { |
| 188 | List<String> classNamesToTry = Lists.newArrayList(); | 188 | List<String> classNamesToTry = Lists.newArrayList(); |
| 189 | classNamesToTry.add(obfClassEntry.getName()); | 189 | classNamesToTry.add(obfClassEntry.getName()); |
| 190 | if (obfClassEntry.getPackageName().equals(Constants.NONE_PACKAGE)) { | ||
| 191 | // taking off the none package, if any | ||
| 192 | classNamesToTry.add(obfClassEntry.getSimpleName()); | ||
| 193 | } | ||
| 194 | if (obfClassEntry.isInnerClass()) { | 190 | if (obfClassEntry.isInnerClass()) { |
| 195 | // try just the inner class name | 191 | // try just the inner class name |
| 196 | classNamesToTry.add(obfClassEntry.getInnermostClassName()); | 192 | classNamesToTry.add(obfClassEntry.getInnermostClassName()); |
| @@ -201,10 +197,6 @@ public class TranslatingTypeLoader implements ITypeLoader { | |||
| 201 | public CtClass transformClass(CtClass c) | 197 | public CtClass transformClass(CtClass c) |
| 202 | throws IOException, NotFoundException, CannotCompileException { | 198 | throws IOException, NotFoundException, CannotCompileException { |
| 203 | 199 | ||
| 204 | // we moved a lot of classes out of the default package into the none package | ||
| 205 | // make sure all the class references are consistent | ||
| 206 | ClassRenamer.moveAllClassesOutOfDefaultPackage(c, Constants.NONE_PACKAGE); | ||
| 207 | |||
| 208 | // reconstruct inner classes | 200 | // reconstruct inner classes |
| 209 | new InnerClassWriter(this.jarIndex).write(c); | 201 | new InnerClassWriter(this.jarIndex).write(c); |
| 210 | 202 | ||
diff --git a/src/main/java/cuchaz/enigma/analysis/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/JarIndex.java index e501540..619d862 100644 --- a/src/main/java/cuchaz/enigma/analysis/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/JarIndex.java | |||
| @@ -59,17 +59,10 @@ public class JarIndex { | |||
| 59 | public void indexJar(JarFile jar, boolean buildInnerClasses) { | 59 | public void indexJar(JarFile jar, boolean buildInnerClasses) { |
| 60 | 60 | ||
| 61 | // step 1: read the class names | 61 | // step 1: read the class names |
| 62 | for (ClassEntry classEntry : JarClassIterator.getClassEntries(jar)) { | 62 | this.obfClassEntries.addAll(JarClassIterator.getClassEntries(jar)); |
| 63 | if (classEntry.isInDefaultPackage()) { | ||
| 64 | // move out of default package | ||
| 65 | classEntry = new ClassEntry(Constants.NONE_PACKAGE + "/" + classEntry.getName()); | ||
| 66 | } | ||
| 67 | this.obfClassEntries.add(classEntry); | ||
| 68 | } | ||
| 69 | 63 | ||
| 70 | // step 2: index field/method/constructor access | 64 | // step 2: index field/method/constructor access |
| 71 | for (CtClass c : JarClassIterator.classes(jar)) { | 65 | for (CtClass c : JarClassIterator.classes(jar)) { |
| 72 | ClassRenamer.moveAllClassesOutOfDefaultPackage(c, Constants.NONE_PACKAGE); | ||
| 73 | for (CtField field : c.getDeclaredFields()) { | 66 | for (CtField field : c.getDeclaredFields()) { |
| 74 | FieldEntry fieldEntry = EntryFactory.getFieldEntry(field); | 67 | FieldEntry fieldEntry = EntryFactory.getFieldEntry(field); |
| 75 | this.access.put(fieldEntry, Access.get(field)); | 68 | this.access.put(fieldEntry, Access.get(field)); |
| @@ -84,7 +77,6 @@ public class JarIndex { | |||
| 84 | 77 | ||
| 85 | // step 3: index extends, implements, fields, and methods | 78 | // step 3: index extends, implements, fields, and methods |
| 86 | for (CtClass c : JarClassIterator.classes(jar)) { | 79 | for (CtClass c : JarClassIterator.classes(jar)) { |
| 87 | ClassRenamer.moveAllClassesOutOfDefaultPackage(c, Constants.NONE_PACKAGE); | ||
| 88 | this.translationIndex.indexClass(c); | 80 | this.translationIndex.indexClass(c); |
| 89 | String className = Descriptor.toJvmName(c.getName()); | 81 | String className = Descriptor.toJvmName(c.getName()); |
| 90 | for (String interfaceName : c.getClassFile().getInterfaces()) { | 82 | for (String interfaceName : c.getClassFile().getInterfaces()) { |
| @@ -101,7 +93,6 @@ public class JarIndex { | |||
| 101 | 93 | ||
| 102 | // step 4: index field, method, constructor references | 94 | // step 4: index field, method, constructor references |
| 103 | for (CtClass c : JarClassIterator.classes(jar)) { | 95 | for (CtClass c : JarClassIterator.classes(jar)) { |
| 104 | ClassRenamer.moveAllClassesOutOfDefaultPackage(c, Constants.NONE_PACKAGE); | ||
| 105 | for (CtBehavior behavior : c.getDeclaredBehaviors()) { | 96 | for (CtBehavior behavior : c.getDeclaredBehaviors()) { |
| 106 | indexBehaviorReferences(behavior); | 97 | indexBehaviorReferences(behavior); |
| 107 | } | 98 | } |
| @@ -111,7 +102,6 @@ public class JarIndex { | |||
| 111 | 102 | ||
| 112 | // step 5: index inner classes and anonymous classes | 103 | // step 5: index inner classes and anonymous classes |
| 113 | for (CtClass c : JarClassIterator.classes(jar)) { | 104 | for (CtClass c : JarClassIterator.classes(jar)) { |
| 114 | ClassRenamer.moveAllClassesOutOfDefaultPackage(c, Constants.NONE_PACKAGE); | ||
| 115 | ClassEntry innerClassEntry = EntryFactory.getClassEntry(c); | 105 | ClassEntry innerClassEntry = EntryFactory.getClassEntry(c); |
| 116 | ClassEntry outerClassEntry = findOuterClass(c); | 106 | ClassEntry outerClassEntry = findOuterClass(c); |
| 117 | if (outerClassEntry != null) { | 107 | if (outerClassEntry != null) { |
diff --git a/src/main/java/cuchaz/enigma/convert/ClassIdentity.java b/src/main/java/cuchaz/enigma/convert/ClassIdentity.java index 0960c86..4d1b3ca 100644 --- a/src/main/java/cuchaz/enigma/convert/ClassIdentity.java +++ b/src/main/java/cuchaz/enigma/convert/ClassIdentity.java | |||
| @@ -58,7 +58,7 @@ public class ClassIdentity { | |||
| 58 | 58 | ||
| 59 | // classes not in the none package can be passed through | 59 | // classes not in the none package can be passed through |
| 60 | ClassEntry classEntry = new ClassEntry(className); | 60 | ClassEntry classEntry = new ClassEntry(className); |
| 61 | if (!classEntry.getPackageName().equals(Constants.NONE_PACKAGE)) { | 61 | if (!classEntry.getClassName().contains("/")) { |
| 62 | return className; | 62 | return className; |
| 63 | } | 63 | } |
| 64 | 64 | ||
diff --git a/src/main/java/cuchaz/enigma/convert/MappingsConverter.java b/src/main/java/cuchaz/enigma/convert/MappingsConverter.java index a80d9ce..01de9a5 100644 --- a/src/main/java/cuchaz/enigma/convert/MappingsConverter.java +++ b/src/main/java/cuchaz/enigma/convert/MappingsConverter.java | |||
| @@ -235,7 +235,7 @@ public class MappingsConverter { | |||
| 235 | 235 | ||
| 236 | // non obfuscated classes can be migrated | 236 | // non obfuscated classes can be migrated |
| 237 | ClassEntry classEntry = oldObfType.getClassEntry(); | 237 | ClassEntry classEntry = oldObfType.getClassEntry(); |
| 238 | if (!classEntry.getPackageName().equals(Constants.NONE_PACKAGE)) { | 238 | if (!classEntry.getClassName().contains("/")) { |
| 239 | return true; | 239 | return true; |
| 240 | } | 240 | } |
| 241 | 241 | ||
diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/src/main/java/cuchaz/enigma/gui/Gui.java index 0ccb3f7..a81ad06 100644 --- a/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/src/main/java/cuchaz/enigma/gui/Gui.java | |||
| @@ -574,8 +574,7 @@ public class Gui { | |||
| 574 | 574 | ||
| 575 | int offset = text.getText().lastIndexOf('/') + 1; | 575 | int offset = text.getText().lastIndexOf('/') + 1; |
| 576 | // If it's a class and isn't in the default package, assume that it's deobfuscated. | 576 | // If it's a class and isn't in the default package, assume that it's deobfuscated. |
| 577 | if (m_reference.getNameableEntry() instanceof ClassEntry && !text.getText().startsWith(Constants.NONE_PACKAGE) | 577 | if (m_reference.getNameableEntry() instanceof ClassEntry && text.getText().contains("/") && offset != 0) |
| 578 | && offset != 0) | ||
| 579 | text.select(offset, text.getText().length()); | 578 | text.select(offset, text.getText().length()); |
| 580 | else | 579 | else |
| 581 | text.selectAll(); | 580 | text.selectAll(); |
| @@ -778,9 +777,8 @@ public class Gui { | |||
| 778 | { | 777 | { |
| 779 | String oldEntry = deobfReference.entry.getClassEntry().getPackageName(); | 778 | String oldEntry = deobfReference.entry.getClassEntry().getPackageName(); |
| 780 | String newEntry = new ClassEntry(Descriptor.toJvmName(newName)).getPackageName(); | 779 | String newEntry = new ClassEntry(Descriptor.toJvmName(newName)).getPackageName(); |
| 781 | if (oldEntry != null && newEntry != null) | 780 | moveClassTree(deobfReference, newName, oldEntry == null, |
| 782 | moveClassTree(deobfReference, newName, oldEntry.equals(Constants.NONE_PACKAGE), | 781 | newEntry == null); |
| 783 | newEntry.equals(Constants.NONE_PACKAGE)); | ||
| 784 | } | 782 | } |
| 785 | 783 | ||
| 786 | public void moveClassTree(EntryReference<Entry, Entry> deobfReference, String newName, boolean isOldOb, boolean isNewOb) | 784 | public void moveClassTree(EntryReference<Entry, Entry> deobfReference, String newName, boolean isOldOb, boolean isNewOb) |
diff --git a/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java b/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java index d2e421e..30d8a9c 100644 --- a/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java +++ b/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | ******************************************************************************/ | 10 | ******************************************************************************/ |
| 11 | package cuchaz.enigma.gui.node; | 11 | package cuchaz.enigma.gui.node; |
| 12 | 12 | ||
| 13 | import com.strobel.annotations.Nullable; | ||
| 13 | import javassist.bytecode.Descriptor; | 14 | import javassist.bytecode.Descriptor; |
| 14 | 15 | ||
| 15 | import javax.swing.tree.DefaultMutableTreeNode; | 16 | import javax.swing.tree.DefaultMutableTreeNode; |
| @@ -18,8 +19,8 @@ public class ClassSelectorPackageNode extends DefaultMutableTreeNode { | |||
| 18 | 19 | ||
| 19 | private String packageName; | 20 | private String packageName; |
| 20 | 21 | ||
| 21 | public ClassSelectorPackageNode(String packageName) { | 22 | public ClassSelectorPackageNode(@Nullable String packageName) { |
| 22 | this.packageName = packageName; | 23 | this.packageName = packageName != null ? packageName : "(none)"; |
| 23 | } | 24 | } |
| 24 | 25 | ||
| 25 | public String getPackageName() { | 26 | public String getPackageName() { |
diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsSRGWriter.java b/src/main/java/cuchaz/enigma/mapping/MappingsSRGWriter.java index 229bf46..4d0c261 100644 --- a/src/main/java/cuchaz/enigma/mapping/MappingsSRGWriter.java +++ b/src/main/java/cuchaz/enigma/mapping/MappingsSRGWriter.java | |||
| @@ -34,25 +34,25 @@ public class MappingsSRGWriter { | |||
| 34 | if(innerClassMapping.getDeobfName() == null || innerClassMapping.getObfSimpleName() == null || innerClassMapping.getDeobfName() == null){ | 34 | if(innerClassMapping.getDeobfName() == null || innerClassMapping.getObfSimpleName() == null || innerClassMapping.getDeobfName() == null){ |
| 35 | continue; | 35 | continue; |
| 36 | } | 36 | } |
| 37 | String innerClassName = classMapping.getObfSimpleName() + "$" + innerClassMapping.getObfSimpleName().replace("none/", ""); | 37 | String innerClassName = classMapping.getObfSimpleName() + "$" + innerClassMapping.getObfSimpleName(); |
| 38 | String innerDebofClassName = classMapping.getDeobfName() + "$" + innerClassMapping.getDeobfName().replace("none/", ""); | 38 | String innerDeobfClassName = classMapping.getDeobfName() + "$" + innerClassMapping.getDeobfName(); |
| 39 | writer.write("CL: " + innerClassName + " " + classMapping.getDeobfName() + "$" + innerClassMapping.getDeobfName()); | 39 | writer.write("CL: " + innerClassName + " " + classMapping.getDeobfName() + "$" + innerClassMapping.getDeobfName()); |
| 40 | writer.write(System.lineSeparator()); | 40 | writer.write(System.lineSeparator()); |
| 41 | for (FieldMapping fieldMapping : sorted(innerClassMapping.fields())) { | 41 | for (FieldMapping fieldMapping : sorted(innerClassMapping.fields())) { |
| 42 | fieldMappings.add("FD: " + innerClassName + "/" + fieldMapping.getObfName() + " " + innerDebofClassName + "/" + fieldMapping.getDeobfName()); | 42 | fieldMappings.add("FD: " + innerClassName + "/" + fieldMapping.getObfName() + " " + innerDeobfClassName + "/" + fieldMapping.getDeobfName()); |
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | for (MethodMapping methodMapping : sorted(innerClassMapping.methods())) { | 45 | for (MethodMapping methodMapping : sorted(innerClassMapping.methods())) { |
| 46 | methodMappings.add("MD: " + innerClassName + "/" + methodMapping.getObfName() + " " + methodMapping.getObfSignature().toString().replace("none/", "") + " " + innerDebofClassName + "/" + methodMapping.getDeobfName() + " " + mappings.getTranslator(TranslationDirection.Deobfuscating, index).translateSignature(methodMapping.getObfSignature())); | 46 | methodMappings.add("MD: " + innerClassName + "/" + methodMapping.getObfName() + " " + methodMapping.getObfSignature().toString() + " " + innerDeobfClassName + "/" + methodMapping.getDeobfName() + " " + mappings.getTranslator(TranslationDirection.Deobfuscating, index).translateSignature(methodMapping.getObfSignature())); |
| 47 | } | 47 | } |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | for (FieldMapping fieldMapping : sorted(classMapping.fields())) { | 50 | for (FieldMapping fieldMapping : sorted(classMapping.fields())) { |
| 51 | fieldMappings.add("FD: " + classMapping.getObfFullName().replace("none/", "") + "/" + fieldMapping.getObfName() + " " + classMapping.getDeobfName() + "/" + fieldMapping.getDeobfName()); | 51 | fieldMappings.add("FD: " + classMapping.getObfFullName() + "/" + fieldMapping.getObfName() + " " + classMapping.getDeobfName() + "/" + fieldMapping.getDeobfName()); |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | for (MethodMapping methodMapping : sorted(classMapping.methods())) { | 54 | for (MethodMapping methodMapping : sorted(classMapping.methods())) { |
| 55 | methodMappings.add("MD: " + classMapping.getObfFullName().replace("none/", "") + "/" + methodMapping.getObfName() + " " + methodMapping.getObfSignature().toString().replace("none/", "") + " " + classMapping.getDeobfName() + "/" + methodMapping.getDeobfName() + " " + mappings.getTranslator(TranslationDirection.Deobfuscating, index).translateSignature(methodMapping.getObfSignature())); | 55 | methodMappings.add("MD: " + classMapping.getObfFullName() + "/" + methodMapping.getObfName() + " " + methodMapping.getObfSignature().toString() + " " + classMapping.getDeobfName() + "/" + methodMapping.getDeobfName() + " " + mappings.getTranslator(TranslationDirection.Deobfuscating, index).translateSignature(methodMapping.getObfSignature())); |
| 56 | } | 56 | } |
| 57 | } | 57 | } |
| 58 | for(String fd : fieldMappings){ | 58 | for(String fd : fieldMappings){ |