diff --git a/core/build.gradle.kts b/core/build.gradle.kts index f589207..eb0d6d7 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -21,5 +21,7 @@ dependencies { implementation("com.github.leibnitz27:cfr") { isChanging = true } implementation("ch.qos.logback:logback-classic") + implementation("com.github.Col-E:CAFED00D:1.8.0") + externalLib("fernflower-15-05-20") } diff --git a/core/src/main/java/me/nov/threadtear/io/Conversion.java b/core/src/main/java/me/nov/threadtear/io/Conversion.java index 458fadc..3c3b87c 100644 --- a/core/src/main/java/me/nov/threadtear/io/Conversion.java +++ b/core/src/main/java/me/nov/threadtear/io/Conversion.java @@ -4,6 +4,7 @@ import java.nio.file.Files; import me.nov.threadtear.logging.LogWrapper; +import me.nov.threadtear.util.asm.SignatureValidator; import org.objectweb.asm.*; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.util.TraceClassVisitor; @@ -41,6 +42,10 @@ public static ClassNode toNode(final byte[] bytez) { LogWrapper.logger.error("Failed to load class ", e2); } } + + // validate signatures + SignatureValidator.validateSignatures(cn); + return cn; } diff --git a/core/src/main/java/me/nov/threadtear/io/JarIO.java b/core/src/main/java/me/nov/threadtear/io/JarIO.java index 45a14f9..92f5f3b 100644 --- a/core/src/main/java/me/nov/threadtear/io/JarIO.java +++ b/core/src/main/java/me/nov/threadtear/io/JarIO.java @@ -6,6 +6,9 @@ import java.util.stream.Stream; import java.util.zip.ZipException; +import me.coley.cafedude.ClassFile; +import me.coley.cafedude.io.ClassFileReader; +import me.coley.cafedude.io.ClassFileWriter; import me.nov.threadtear.logging.LogWrapper; import org.apache.commons.io.IOUtils; import org.objectweb.asm.tree.ClassNode; @@ -29,8 +32,15 @@ private static ArrayList readEntry(JarFile jar, JarEntry en, ArrayList classNode.signature = null); + + for(MethodNode methodNode : classNode.methods) { + parseOr(methodNode.signature, () -> methodNode.signature = null); + + for(LocalVariableNode localVariableNode : methodNode.localVariables) { + parseOr(localVariableNode.signature, () -> localVariableNode.signature = null); + } + } + + for(FieldNode fieldNode : classNode.fields) { + parseOr(fieldNode.signature, () -> fieldNode.signature = null); + } + } + + private static void parseOr(String signature, Runnable runnable) { + SignatureReader signatureReader = new SignatureReader(signature); + try { + signatureReader.accept(new SignatureVisitor(Opcodes.ASM9) {}); + } catch (Exception ignored) { + runnable.run(); + } + } +} diff --git a/gradle.properties b/gradle.properties index 04c0ca1..c277561 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ commons-configuration2.version = 2.7 commons-beanutils.version = 1.9.4 darklaf.version = 2.6.1 darklaf.extensions.version = 0.3.4 -asm.version = 9.1 +asm.version = 9.2 cfr.version = -SNAPSHOT rsyntaxtextarea.version = 3.1.1 jgraphx.version = v4.0.0