From 6e9934a442394a9d0a81404c7480b8001939d92b Mon Sep 17 00:00:00 2001 From: Thog Date: Wed, 24 Aug 2016 01:59:26 +0200 Subject: Add mapping converter to command line system --- src/main/java/cuchaz/enigma/CommandMain.java | 28 +++++++++++++++++++++- src/main/java/cuchaz/enigma/gui/GuiController.java | 4 ++-- src/main/java/cuchaz/enigma/mapping/Mappings.java | 12 ++++++++++ .../cuchaz/enigma/mapping/MappingsSRGWriter.java | 9 +++---- 4 files changed, 46 insertions(+), 7 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/cuchaz/enigma/CommandMain.java b/src/main/java/cuchaz/enigma/CommandMain.java index 0678458..54f2707 100644 --- a/src/main/java/cuchaz/enigma/CommandMain.java +++ b/src/main/java/cuchaz/enigma/CommandMain.java @@ -65,7 +65,10 @@ public class CommandMain { protectify(args); } else if (command.equalsIgnoreCase("publify")) { publify(args); - } else { + } else if (command.equalsIgnoreCase("convertmappings")) { + convertMappings(args); + } + else { throw new IllegalArgumentException("Command not recognized: " + command); } } catch (IllegalArgumentException ex) { @@ -82,6 +85,8 @@ public class CommandMain { System.out.println("\t\tdeobfuscate []"); System.out.println("\t\tdecompile []"); System.out.println("\t\tprotectify "); + System.out.println("\t\tpublify "); + System.out.println("\t\tconvertmappings "); } private static void decompile(String[] args) throws Exception { @@ -125,6 +130,27 @@ public class CommandMain { return deobfuscator; } + private static void convertMappings(String[] args) throws Exception { + File fileMappings = getReadableFile(getArg(args, 1, "enigma mapping", true)); + File result = getWritableFile(getArg(args, 2, "enigma mapping", true)); + String name = getArg(args, 3, "format type", true); + Mappings.FormatType formatType = Mappings.FormatType.valueOf(name.toUpperCase()); + if (formatType == null) + throw new IllegalArgumentException(name + "is not a valid mapping format!"); + System.out.println("Reading mappings..."); + Mappings mappings = new MappingsEnigmaReader().read(fileMappings); + System.out.println("Saving new mappings..."); + switch (formatType) + { + case SRG_FILE: + mappings.saveSRGMappings(result); + break; + default: + mappings.saveEnigmaMappings(result, Mappings.FormatType.ENIGMA_FILE != formatType); + break; + } + } + private static String getArg(String[] args, int i, String name, boolean required) { if (i >= args.length) { if (required) { diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/src/main/java/cuchaz/enigma/gui/GuiController.java index 4d428ac..d6c170b 100644 --- a/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/src/main/java/cuchaz/enigma/gui/GuiController.java @@ -84,12 +84,12 @@ public class GuiController { } public void saveEnigmaMappings(File file, boolean isDirectoryFormat) throws IOException { - new MappingsEnigmaWriter().write(file, this.deobfuscator.getMappings(), isDirectoryFormat); + this.deobfuscator.getMappings().saveEnigmaMappings(file, isDirectoryFormat); this.isDirty = false; } public void saveSRGMappings(File file) throws IOException { - new MappingsSRGWriter().write(file, this.deobfuscator); + this.deobfuscator.getMappings().saveSRGMappings(file); this.isDirty = false; } diff --git a/src/main/java/cuchaz/enigma/mapping/Mappings.java b/src/main/java/cuchaz/enigma/mapping/Mappings.java index 171ddf1..47c4232 100644 --- a/src/main/java/cuchaz/enigma/mapping/Mappings.java +++ b/src/main/java/cuchaz/enigma/mapping/Mappings.java @@ -13,6 +13,8 @@ package cuchaz.enigma.mapping; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -202,6 +204,16 @@ public class Mappings { return originMapping; } + public void saveEnigmaMappings(File file, boolean isDirectoryFormat) throws IOException + { + new MappingsEnigmaWriter().write(file, this, isDirectoryFormat); + } + + public void saveSRGMappings(File file) throws IOException + { + new MappingsSRGWriter().write(file, this); + } + public enum FormatType { ENIGMA_FILE, ENIGMA_DIRECTORY, SRG_FILE diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsSRGWriter.java b/src/main/java/cuchaz/enigma/mapping/MappingsSRGWriter.java index a05b915..cede1c2 100644 --- a/src/main/java/cuchaz/enigma/mapping/MappingsSRGWriter.java +++ b/src/main/java/cuchaz/enigma/mapping/MappingsSRGWriter.java @@ -2,6 +2,7 @@ package cuchaz.enigma.mapping; import com.google.common.base.Charsets; import cuchaz.enigma.Deobfuscator; +import cuchaz.enigma.analysis.TranslationIndex; import java.io.*; import java.util.ArrayList; @@ -13,13 +14,13 @@ import java.util.List; */ public class MappingsSRGWriter { - public void write(File file, Deobfuscator deobfuscator) throws IOException { + public void write(File file, Mappings mappings) throws IOException { if(file.exists()){ file.delete(); } file.createNewFile(); - Mappings mappings = deobfuscator.getMappings(); + TranslationIndex index = new TranslationIndex(); PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), Charsets.UTF_8)); List fieldMappings = new ArrayList<>(); @@ -43,7 +44,7 @@ public class MappingsSRGWriter { } for (MethodMapping methodMapping : sorted(innerClassMapping.methods())) { - methodMappings.add("MD: " + innerClassName + "/" + methodMapping.getObfName() + " " + methodMapping.getObfSignature().toString().replace("none/", "") + " " + innerDebofClassName + "/" + methodMapping.getDeobfName() + " " + deobfuscator.getTranslator(TranslationDirection.Deobfuscating).translateSignature(methodMapping.getObfSignature())); + methodMappings.add("MD: " + innerClassName + "/" + methodMapping.getObfName() + " " + methodMapping.getObfSignature().toString().replace("none/", "") + " " + innerDebofClassName + "/" + methodMapping.getDeobfName() + " " + mappings.getTranslator(TranslationDirection.Deobfuscating, index).translateSignature(methodMapping.getObfSignature())); } } @@ -52,7 +53,7 @@ public class MappingsSRGWriter { } for (MethodMapping methodMapping : sorted(classMapping.methods())) { - methodMappings.add("MD: " + classMapping.getObfFullName().replace("none/", "") + "/" + methodMapping.getObfName() + " " + methodMapping.getObfSignature().toString().replace("none/", "") + " " + classMapping.getDeobfName() + "/" + methodMapping.getDeobfName() + " " + deobfuscator.getTranslator(TranslationDirection.Deobfuscating).translateSignature(methodMapping.getObfSignature())); + 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())); } } for(String fd : fieldMappings){ -- cgit v1.2.3