From 813b1e0898f5aee0bcee63915175c3ee056b0047 Mon Sep 17 00:00:00 2001 From: Shanyu Thibaut Juneja Date: Fri, 13 Dec 2024 14:28:45 -0500 Subject: [PATCH] fix: improve failsafes, fix dep analyzer --- .../dev/skidfuscator/config/DefaultSkidConfig.java | 5 ++++- .../build.gradle | 9 ++++++++- .../dependanalysis/DependencyAnalyzer.java | 11 +++++++---- dev.skidfuscator.obfuscator.pureanalysis/build.gradle | 2 +- .../dev/skidfuscator/obfuscator/Skidfuscator.java | 8 ++++++-- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/dev.skidfuscator.commons/src/main/java/dev/skidfuscator/config/DefaultSkidConfig.java b/dev.skidfuscator.commons/src/main/java/dev/skidfuscator/config/DefaultSkidConfig.java index 25c6f44..55544dd 100644 --- a/dev.skidfuscator.commons/src/main/java/dev/skidfuscator/config/DefaultSkidConfig.java +++ b/dev.skidfuscator.commons/src/main/java/dev/skidfuscator/config/DefaultSkidConfig.java @@ -15,7 +15,10 @@ public boolean isDriver() { } public File[] getLibs() { - return this.getStringList("libraries", Collections.emptyList()) + return this.getStringList("libraries", + // [failsafe] i fucking made this mistake too + this.getStringList("libs", Collections.emptyList()) + ) .stream() .map(File::new) .distinct() diff --git a/dev.skidfuscator.obfuscator.dependanalysis/build.gradle b/dev.skidfuscator.obfuscator.dependanalysis/build.gradle index 31f3355..1c8ee97 100644 --- a/dev.skidfuscator.obfuscator.dependanalysis/build.gradle +++ b/dev.skidfuscator.obfuscator.dependanalysis/build.gradle @@ -1,5 +1,8 @@ plugins { - id 'java' + id 'java-library' + id 'application' + // shadowJar + id 'com.github.johnrengelman.shadow' version '7.1.2' } group = 'dev.skidfuscator.community' @@ -10,6 +13,10 @@ repositories { maven { url 'https://jitpack.io' } } +application { + mainClass = 'dev.skidfuscator.dependanalysis.Main' +} + dependencies { api project(':modasm') diff --git a/dev.skidfuscator.obfuscator.dependanalysis/src/main/java/dev/skidfuscator/dependanalysis/DependencyAnalyzer.java b/dev.skidfuscator.obfuscator.dependanalysis/src/main/java/dev/skidfuscator/dependanalysis/DependencyAnalyzer.java index 37f34ed..06feb10 100644 --- a/dev.skidfuscator.obfuscator.dependanalysis/src/main/java/dev/skidfuscator/dependanalysis/DependencyAnalyzer.java +++ b/dev.skidfuscator.obfuscator.dependanalysis/src/main/java/dev/skidfuscator/dependanalysis/DependencyAnalyzer.java @@ -83,12 +83,14 @@ private void resolveHierarchy(String className, // Resolve superclass if (hierarchy.superName != null && !hierarchy.superName.isEmpty()) { + System.out.println("Resolving superclass of " + className); Path jarForSuper = hierarchy.isMainJarClass ? mainJar : classToLibraryMap.get(hierarchy.superName); if (jarForSuper == null && hierarchy.superName != null) { jarForSuper = classToLibraryMap.get(hierarchy.superName); } if (jarForSuper != null) { String superReason = "needed as superclass of " + className; + System.out.printf("%s -> %s%n", className, hierarchy.superName); resolveHierarchy(hierarchy.superName, requiredJars, jarForSuper, visited, superReason); } } @@ -129,6 +131,7 @@ private DependencyResult buildResult(Set requiredJars) { * Load the class hierarchy of a given class. If cached, use the cache. */ private DependencyClassHierarchy loadDependencyClassHierarchy(String className, Path presumedJar) throws IOException { + System.out.println("Loading hierarchy for " + className); if (cache.containsKey(className)) { return cache.get(className); } @@ -164,8 +167,8 @@ private DependencyClassHierarchy loadDependencyClassHierarchy(String className, DependencyClassHierarchy hierarchy = new DependencyClassHierarchy( className, - visitor.superName, - visitor.interfaces, + visitor.superName.replace('.', '/'), + Arrays.stream(visitor.interfaces).map(s -> s.replace('.', '/')).toArray(String[]::new), fromMainJar, fromMainJar ? null : jarSource ); @@ -184,7 +187,7 @@ private void indexLibraries() throws IOException { while (entries.hasMoreElements()) { JarEntry entry = entries.nextElement(); if (!entry.isDirectory() && entry.getName().endsWith(".class")) { - String className = entry.getName().replace('/', '.').replace(".class", ""); + String className = entry.getName().replace(".class", "").replace('.', '/'); classToLibraryMap.put(className, jar); } } @@ -203,7 +206,7 @@ private Set loadClassesFromJar(Path jarPath) throws IOException { while (entries.hasMoreElements()) { JarEntry entry = entries.nextElement(); if (!entry.isDirectory() && entry.getName().endsWith(".class")) { - String className = entry.getName().replace('/', '.').replace(".class", ""); + String className = entry.getName().replace(".class", "").replace('.', '/'); classes.add(className); } } diff --git a/dev.skidfuscator.obfuscator.pureanalysis/build.gradle b/dev.skidfuscator.obfuscator.pureanalysis/build.gradle index 99156ca..40391bf 100644 --- a/dev.skidfuscator.obfuscator.pureanalysis/build.gradle +++ b/dev.skidfuscator.obfuscator.pureanalysis/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'java' + id 'java-library' } group = 'dev.skidfuscator.community' diff --git a/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/Skidfuscator.java b/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/Skidfuscator.java index 27ae606..7428c24 100644 --- a/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/Skidfuscator.java +++ b/dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/Skidfuscator.java @@ -528,7 +528,8 @@ protected void _importJvm() { } LOGGER.post("✓ Success"); } - LOGGER.log("Finished importing the JVM!"); + LOGGER.log("Finished importing the JVM"); + LOGGER.log(String.format("Imported %d jvm classes!", jvmClassSource.size())); } protected void _importClasspath() { @@ -609,7 +610,7 @@ protected void _importClasspath() { LOGGER.log("✓ Finished importing libs!"); } - if (session.getMappings() == null && config.getLibs().length > 0) { + if (config.getLibs().length > 0) { final File[] libs = Arrays.stream(config.getLibs()) .filter(e -> e.getAbsolutePath().endsWith(".jar")) .toArray(File[]::new); @@ -625,6 +626,9 @@ protected void _importClasspath() { )); } LOGGER.log("✓ Finished importing config libs!"); + LOGGER.log(String.format("✓ Imported %d config libs!", libs.length)); + } else { + LOGGER.warn("! No libraries were imported! If this is normal, ignore this."); } /*