From 9f37feae24b60a34c8fcc8c71731e4039dbb17c8 Mon Sep 17 00:00:00 2001 From: Florian Warzecha Date: Thu, 8 Feb 2018 21:15:09 +0100 Subject: [PATCH] letzte Anderungen fuer die Facharbeit Alle hiernach gemachten Aenderungen duerfen nicht mehr in den Code fuer die Facharbeit mit eingehen! --- build.gradle | 2 +- .../names/NameChangeAdapter.java | 1 - .../florian/simpleJavaObfuscator/run/Run.java | 3 +- .../util/files/Content.java | 1 - .../util/obfuscation/DefaultMappings.java | 51 +++++++------------ .../util/obfuscation/Descriptors.java | 4 +- .../util/obfuscation/INameGenerator.java | 2 - .../util/run/ObfuscationTypeParam.java | 1 - 8 files changed, 23 insertions(+), 42 deletions(-) diff --git a/build.gradle b/build.gradle index 075ca58..aedd31a 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ apply plugin: 'idea' apply plugin: 'application' group 'florian.simpleJavaObfuscator' -version '1.0' +version 'facharbeit' mainClassName = 'florian.simpleJavaObfuscator.run.Run' diff --git a/src/main/java/florian/simpleJavaObfuscator/names/NameChangeAdapter.java b/src/main/java/florian/simpleJavaObfuscator/names/NameChangeAdapter.java index 551d7be..79b8064 100644 --- a/src/main/java/florian/simpleJavaObfuscator/names/NameChangeAdapter.java +++ b/src/main/java/florian/simpleJavaObfuscator/names/NameChangeAdapter.java @@ -1,6 +1,5 @@ package florian.simpleJavaObfuscator.names; - import florian.simpleJavaObfuscator.util.obfuscation.INameGenerator; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; diff --git a/src/main/java/florian/simpleJavaObfuscator/run/Run.java b/src/main/java/florian/simpleJavaObfuscator/run/Run.java index e3686af..0b1292b 100644 --- a/src/main/java/florian/simpleJavaObfuscator/run/Run.java +++ b/src/main/java/florian/simpleJavaObfuscator/run/Run.java @@ -15,8 +15,7 @@ * @date 14. Januar 2018 */ public class Run { - - public static void main(String[] args) throws IOException { + public static void main(String[] args) { Parameter[] params = new Parameter[]{new ObfuscationTypeParam()}; diff --git a/src/main/java/florian/simpleJavaObfuscator/util/files/Content.java b/src/main/java/florian/simpleJavaObfuscator/util/files/Content.java index 547ca56..67d62c5 100644 --- a/src/main/java/florian/simpleJavaObfuscator/util/files/Content.java +++ b/src/main/java/florian/simpleJavaObfuscator/util/files/Content.java @@ -10,7 +10,6 @@ * @date 02 of Februar 2018 */ public class Content { - public static byte[] getFileContent(File file) throws IOException { byte[] input = new byte[(int) file.length()]; InputStream in = new FileInputStream(file); diff --git a/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/DefaultMappings.java b/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/DefaultMappings.java index 4f3f66d..8b480b2 100644 --- a/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/DefaultMappings.java +++ b/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/DefaultMappings.java @@ -23,13 +23,13 @@ public class DefaultMappings implements INameGenerator { private PrintWriter printWriter; private Hashtable obfuscatedClassNames = new Hashtable<>(); - private Hashtable>> obfuscatedMethodNames = new Hashtable<>(); // class, desc, name + private Hashtable>> obfuscatedMethodNames = new Hashtable<>(); // class, params, name private Hashtable> obfuscatedFieldNames = new Hashtable<>(); // class, name private Hashtable> methodDescs = new Hashtable<>(); // class private char[] classLetters; - private Hashtable> methodLetters; // class, desc + private Hashtable> methodLetters; // class, params private Hashtable fieldLetters; // class private int maxNumberOfAutoOverloading = 3; @@ -59,11 +59,6 @@ public void setLog(PrintWriter printWriter) { } } - /** - * - * @param orig The fully qualified class name. - * @return - */ @Override public void createClassName(String orig) { String result; @@ -73,9 +68,9 @@ public void createClassName(String orig) { origArr[i] = new StringBuilder(origArr[i]).reverse().toString(); } - result = origArr[1] + "/" + this.toString(this.classLetters); + result = origArr[1] + "/" + new String(this.classLetters); } else { - result = this.toString(this.classLetters); + result = new String(this.classLetters); } obfuscatedClassNames.put(orig, result); @@ -92,7 +87,7 @@ public String getClassName(String orig) { @Override public void createMethodName(String orig, String className, String descriptor) { - descriptor = descriptor.split("\\)")[0]; // only when parameters are different + String params = descriptor.split("\\)")[0]; // only when parameters are different // if this is the first field from the class, initialize if (!methodDescs.containsKey(className)) { @@ -102,35 +97,35 @@ public void createMethodName(String orig, String className, String descriptor) { } // replace global ones with local ones that dont contain all classes HashSet methodDescs = this.methodDescs.get(className); - Hashtable> obfuscatedMethodNames = this.obfuscatedMethodNames.get(className); // desc, name + Hashtable> obfuscatedMethodNames = this.obfuscatedMethodNames.get(className); // params, name Hashtable methodLetters = this.methodLetters.get(className); // desc - // grouping methods by descriptor, only methods with new descriptor from need new name - if (!methodDescs.contains(descriptor)) { + // grouping methods by descriptor, only methods with known params need new name + if (!methodDescs.contains(params)) { // initializing letter array and new hashables - obfuscatedMethodNames.put(descriptor, new Hashtable<>()); + obfuscatedMethodNames.put(params, new Hashtable<>()); int additionalOffset = methodDescs.size() / maxNumberOfAutoOverloading; // start new names for methods with a new descriptor with another letter after certain number of overloads char[] methodLettersChar = new char[]{'a'}; for (int i = 0; i < additionalOffset; i++) { methodLettersChar = generateNextName(methodLettersChar); } - methodLetters.put(descriptor, methodLettersChar); + methodLetters.put(params, methodLettersChar); - methodDescs.add(descriptor); + methodDescs.add(params); } - String result = this.toString(methodLetters.get(descriptor)); - obfuscatedMethodNames.get(descriptor).put(orig, result); - methodLetters.put(descriptor, this.generateNextName(methodLetters.get(descriptor))); + String result = new String(methodLetters.get(params)); + obfuscatedMethodNames.get(params).put(orig, result); + methodLetters.put(params, this.generateNextName(methodLetters.get(params))); } public String getMethodName(String orig, String className, String descriptor) { - descriptor = descriptor.split("\\)")[0]; + String params = descriptor.split("\\)")[0]; if (obfuscatedMethodNames.containsKey(className) && // check if methods from class are obfuscated - obfuscatedMethodNames.get(className).containsKey(descriptor) && // check if desc is obfuscated - obfuscatedMethodNames.get(className).get(descriptor).containsKey(orig)) { // check if method is obfuscated - return obfuscatedMethodNames.get(className).get(descriptor).get(orig); + obfuscatedMethodNames.get(className).containsKey(params) && // check if desc is obfuscated + obfuscatedMethodNames.get(className).get(params).containsKey(orig)) { // check if method is obfuscated + return obfuscatedMethodNames.get(className).get(params).get(orig); } return orig; } @@ -147,7 +142,7 @@ public void createFieldName(String orig, String className) { Hashtable obfuscatedFieldNames = this.obfuscatedFieldNames.get(className); // store obfuscated name and generate next one - String result = this.toString(fieldLetters); + String result = new String(fieldLetters); obfuscatedFieldNames.put(orig, result); this.fieldLetters.put(className, generateNextName(fieldLetters)); } @@ -183,12 +178,4 @@ private char[] generateNextName(char[] letters) { return letters; } - - private String toString(char[] letters) { - StringBuilder name = new StringBuilder(); - for (char letter : letters) { - name.append(letter); - } - return name.toString(); - } } diff --git a/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/Descriptors.java b/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/Descriptors.java index c519ce8..6a7acd7 100644 --- a/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/Descriptors.java +++ b/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/Descriptors.java @@ -93,10 +93,10 @@ public static String getObfuscatedFieldTypeDescriptor(String orig, INameGenerato } parts[classIndex] = "L" + mappings.getClassName(parts[classIndex].substring(0, parts[classIndex].length() - 1)) + ";"; // remove semicolon (last char) [.substring()] if (classIndex == 0) { // either class name at index 0 - System.out.println("Replaced '" + orig + "' with '" + parts[classIndex] + "'."); + mappings.getLog().println("Replaced '" + orig + "' with '" + parts[classIndex] + "'."); return parts[classIndex]; } else { // or class name at index 1, array declaration at index 0 - System.out.println("Replaced '" + orig + "' with '" + parts[0] + parts[classIndex] + "'."); + mappings.getLog().println("Replaced '" + orig + "' with '" + parts[0] + parts[classIndex] + "'."); return parts[0] + parts[classIndex]; } } diff --git a/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/INameGenerator.java b/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/INameGenerator.java index f5ba855..dccd027 100644 --- a/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/INameGenerator.java +++ b/src/main/java/florian/simpleJavaObfuscator/util/obfuscation/INameGenerator.java @@ -10,7 +10,6 @@ * @date 12. Januar 2018 */ public interface INameGenerator { - void createClassName(String orig); String getClassName(String orig); @@ -22,5 +21,4 @@ public interface INameGenerator { PrintWriter getLog(); void setLog(PrintWriter printWriter); - } diff --git a/src/main/java/florian/simpleJavaObfuscator/util/run/ObfuscationTypeParam.java b/src/main/java/florian/simpleJavaObfuscator/util/run/ObfuscationTypeParam.java index 817f6b4..388e58f 100644 --- a/src/main/java/florian/simpleJavaObfuscator/util/run/ObfuscationTypeParam.java +++ b/src/main/java/florian/simpleJavaObfuscator/util/run/ObfuscationTypeParam.java @@ -9,7 +9,6 @@ * @date 24. Januar 2018 */ public class ObfuscationTypeParam extends Parameter { - @Override public String getId() { return "obfuscationType";