From 3e5cf0680d27cd0862a211e84316ac119d853321 Mon Sep 17 00:00:00 2001 From: yelochick Date: Tue, 26 Aug 2025 16:18:45 +0800 Subject: [PATCH] feat: support rainbow v2025.3.4 --- privacy.conf.example | 7 +++-- .../LicensingFacadeTransformer.java | 6 ++-- .../com/novitechie/MethodTransformer.java | 2 ++ .../PluginManagerCoreTransformer.java | 3 +- .../java/com/novitechie/rules/ClassRule.java | 28 ------------------- .../com/novitechie/rules/IdeaPluginRule.java | 2 +- .../com/novitechie/rules/LoadClassRule.java | 2 +- .../com/novitechie/rules/ResourceRule.java | 2 +- .../java/com/novitechie/rules/SystemRule.java | 4 +-- .../com/novitechie/rules/VMOptionsRule.java | 1 + 10 files changed, 16 insertions(+), 41 deletions(-) delete mode 100644 src/main/java/com/novitechie/rules/ClassRule.java diff --git a/privacy.conf.example b/privacy.conf.example index 25cb0d6..62346e1 100644 --- a/privacy.conf.example +++ b/privacy.conf.example @@ -9,8 +9,9 @@ PREFIX,com.janetfilter PREFIX,jdk.internal.org.objectweb.asm [Hide_Resource] -EQUAL,/6c81ec87e55d331c267262e892427a3d93d76683.txt +# EQUAL,/6c81ec87e55d331c267262e892427a3d93d76683.txt PREFIX,/com/janetfilter +PREFIX,/com/novitechie [Hide_Env] EQUAL,IDEA_VM_OPTIONS @@ -37,8 +38,8 @@ EQUAL,janf.output [Ignore_Class] EQUAL,com.janetfilter.core.utils.StringUtils -EQUAL,com.janetfilter.core.utils.DateUtils +# EQUAL,com.janetfilter.core.utils.DateUtils [Ignore_Resource] EQUAL,/com/janetfilter/core/utils/StringUtils.class -EQUAL,/com/janetfilter/core/utils/DateUtils.class +# EQUAL,/com/janetfilter/core/utils/DateUtils.class diff --git a/src/main/java/com/novitechie/LicensingFacadeTransformer.java b/src/main/java/com/novitechie/LicensingFacadeTransformer.java index 9ff90fa..b846929 100644 --- a/src/main/java/com/novitechie/LicensingFacadeTransformer.java +++ b/src/main/java/com/novitechie/LicensingFacadeTransformer.java @@ -21,12 +21,12 @@ public class LicensingFacadeTransformer implements MyTransformer { for (MethodNode m : node.methods) { if ("getLicenseExpirationDate".equals(m.name)) { InsnList list = new InsnList(); + LabelNode L0 = new LabelNode(); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "hook", "()Ljava/util/Date;", false)); list.add(new InsnNode(DUP)); - LabelNode labelNode = new LabelNode(); - list.add(new JumpInsnNode(IFNULL, labelNode)); + list.add(new JumpInsnNode(IFNULL, L0)); list.add(new InsnNode(ARETURN)); - list.add(labelNode); + list.add(L0); list.add(new InsnNode(POP)); m.instructions.insert(list); } diff --git a/src/main/java/com/novitechie/MethodTransformer.java b/src/main/java/com/novitechie/MethodTransformer.java index 88d90ce..94ad6e9 100644 --- a/src/main/java/com/novitechie/MethodTransformer.java +++ b/src/main/java/com/novitechie/MethodTransformer.java @@ -42,7 +42,9 @@ public class MethodTransformer implements MyTransformer { list.add(new InsnNode(AALOAD)); list.add(new MethodInsnNode(INVOKESTATIC, "java/lang/String", "valueOf", "(Ljava/lang/Object;)Ljava/lang/String;", false)); list.add(new VarInsnNode(ASTORE, 3)); + // list.add(new LdcInsnNode("com.janetfilter")); list.add(new VarInsnNode(ALOAD, 3)); + // list.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/String", "startsWith", "(Ljava/lang/String;)Z", false)); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/BootstrapClassRule", "check", "(Ljava/lang/String;)Z", false)); list.add(new JumpInsnNode(IFEQ, L0)); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); diff --git a/src/main/java/com/novitechie/PluginManagerCoreTransformer.java b/src/main/java/com/novitechie/PluginManagerCoreTransformer.java index 37c21e8..ebe9244 100644 --- a/src/main/java/com/novitechie/PluginManagerCoreTransformer.java +++ b/src/main/java/com/novitechie/PluginManagerCoreTransformer.java @@ -31,8 +31,7 @@ public class PluginManagerCoreTransformer implements MyTransformer { LabelNode L3 = new LabelNode(); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); list.add(new JumpInsnNode(IFEQ, L0)); - list.add(new FieldInsnNode(GETSTATIC, "com/intellij/ide/plugins/PluginManagerCore", "INSTANCE", "Lcom/intellij/ide/plugins/PluginManagerCore;")); - list.add(new MethodInsnNode(INVOKEVIRTUAL, "com/intellij/ide/plugins/PluginManagerCore", "getPluginSet", "()Lcom/intellij/ide/plugins/PluginSet;", false)); + list.add(new MethodInsnNode(INVOKESTATIC, "com/intellij/ide/plugins/PluginManagerCore", "getPluginSet", "()Lcom/intellij/ide/plugins/PluginSet;", false)); list.add(new FieldInsnNode(GETFIELD, "com/intellij/ide/plugins/PluginSet", "allPlugins", "Ljava/util/Set;")); list.add(new VarInsnNode(ASTORE, 0)); list.add(new TypeInsnNode(NEW, "java/util/HashSet")); diff --git a/src/main/java/com/novitechie/rules/ClassRule.java b/src/main/java/com/novitechie/rules/ClassRule.java deleted file mode 100644 index c57836f..0000000 --- a/src/main/java/com/novitechie/rules/ClassRule.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.novitechie.rules; - -import com.janetfilter.core.commons.DebugInfo; -import com.novitechie.LogUtil; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author YeloChick - */ -public class ClassRule { - - - private static final List PREVENT_LOAD_METHOD = new ArrayList() { - { - add("findBootstrapClass"); - } - }; - - public static void checkMethod(String name) throws Exception { - if (PREVENT_LOAD_METHOD.stream().anyMatch(name::equals)) { - DebugInfo.output("======================LoadMethod: " + name); - LogUtil.printStackTrace(); - throw new NoSuchMethodException(); - } - } -} diff --git a/src/main/java/com/novitechie/rules/IdeaPluginRule.java b/src/main/java/com/novitechie/rules/IdeaPluginRule.java index 8fd3cac..b336192 100644 --- a/src/main/java/com/novitechie/rules/IdeaPluginRule.java +++ b/src/main/java/com/novitechie/rules/IdeaPluginRule.java @@ -20,7 +20,7 @@ public class IdeaPluginRule { public static boolean check(String name) { if (checkHidePlugin(name)) { - DebugInfo.output("======================LoadPlugin: " + name); + DebugInfo.output("======================Hide Plugin: " + name); LogUtil.printStackTrace(); return true; } diff --git a/src/main/java/com/novitechie/rules/LoadClassRule.java b/src/main/java/com/novitechie/rules/LoadClassRule.java index 9b5dd5c..4543a74 100644 --- a/src/main/java/com/novitechie/rules/LoadClassRule.java +++ b/src/main/java/com/novitechie/rules/LoadClassRule.java @@ -20,7 +20,7 @@ public class LoadClassRule { public static void check(String name) throws Exception { if (!checkIgnoreClass(name) && checkHidePackage(name)) { - DebugInfo.output("======================LoadClass: " + name); + DebugInfo.output("======================Hide Class: " + name); LogUtil.printStackTrace(); throw new ClassNotFoundException(name); } diff --git a/src/main/java/com/novitechie/rules/ResourceRule.java b/src/main/java/com/novitechie/rules/ResourceRule.java index 9ec16a0..070fcc1 100644 --- a/src/main/java/com/novitechie/rules/ResourceRule.java +++ b/src/main/java/com/novitechie/rules/ResourceRule.java @@ -23,7 +23,7 @@ public class ResourceRule { public static boolean check(String name) { if (!checkIgnoreResource(name) && checkHideResource(name) && StackTraceRule.check()) { - DebugInfo.output("======================LoadResource: " + name); + DebugInfo.output("======================Hide Resource: " + name); LogUtil.printStackTrace(); return true; } diff --git a/src/main/java/com/novitechie/rules/SystemRule.java b/src/main/java/com/novitechie/rules/SystemRule.java index 88a1309..40e7f94 100644 --- a/src/main/java/com/novitechie/rules/SystemRule.java +++ b/src/main/java/com/novitechie/rules/SystemRule.java @@ -23,7 +23,7 @@ public class SystemRule { public static boolean checkEnv(String name) { if (checkHideEnv(name) && StackTraceRule.check()) { - DebugInfo.output("======================LoadEnv: " + name); + DebugInfo.output("======================Hide Env: " + name); LogUtil.printStackTrace(); return true; } @@ -32,7 +32,7 @@ public class SystemRule { public static boolean checkProperty(String name) { if (checkHideProperty(name) && StackTraceRule.check()) { - DebugInfo.output("======================LoadProperty: " + name); + DebugInfo.output("======================Hide Property: " + name); LogUtil.printStackTrace(); return true; } diff --git a/src/main/java/com/novitechie/rules/VMOptionsRule.java b/src/main/java/com/novitechie/rules/VMOptionsRule.java index 5000dc6..3405e6c 100644 --- a/src/main/java/com/novitechie/rules/VMOptionsRule.java +++ b/src/main/java/com/novitechie/rules/VMOptionsRule.java @@ -13,6 +13,7 @@ import java.nio.file.Path; public class VMOptionsRule { public static Path hook() { + DebugInfo.output("======================Hide VMOptions"); String tmpdir = System.getProperty("java.io.tmpdir"); File file = new File(tmpdir, "fake.vmoptions"); if (file.exists()) {