init
This commit is contained in:
9
src/main/java/com/novitechie/LoadClassRule.java
Normal file
9
src/main/java/com/novitechie/LoadClassRule.java
Normal file
@@ -0,0 +1,9 @@
|
||||
package com.novitechie;
|
||||
|
||||
public class LoadClassRule {
|
||||
public static void check(String name) throws Exception {
|
||||
if (name.startsWith("com.janetfilter")) {
|
||||
throw new ClassNotFoundException(name);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,37 @@
|
||||
package com.novitechie;
|
||||
|
||||
import com.janetfilter.core.plugin.MyTransformer;
|
||||
import jdk.internal.org.objectweb.asm.*;
|
||||
import jdk.internal.org.objectweb.asm.commons.AdviceAdapter;
|
||||
|
||||
import static jdk.internal.org.objectweb.asm.Opcodes.ASM5;
|
||||
|
||||
public class PluginClassLoaderTransformer implements MyTransformer {
|
||||
@Override
|
||||
public String getHookClassName() {
|
||||
return "com/intellij/ide/plugins/cl/PluginClassLoader";
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] transform(String className, byte[] classBytes, int order) throws Exception {
|
||||
ClassReader cr = new ClassReader(classBytes);
|
||||
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES);
|
||||
cr.accept(new ClassVisitor(ASM5, cw) {
|
||||
@Override
|
||||
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
|
||||
if (name.equals("loadClass")) {
|
||||
MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
|
||||
return new AdviceAdapter(api, mv, access, name, desc) {
|
||||
@Override
|
||||
protected void onMethodEnter() {
|
||||
mv.visitVarInsn(ALOAD, 1);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "com/novitechie/LoadClassRule", "check", "(Ljava/lang/String;)V", false);
|
||||
}
|
||||
};
|
||||
}
|
||||
return super.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
}, 6);
|
||||
return cw.toByteArray();
|
||||
}
|
||||
}
|
24
src/main/java/com/novitechie/PrivacyPlugin.java
Normal file
24
src/main/java/com/novitechie/PrivacyPlugin.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package com.novitechie;
|
||||
|
||||
import com.janetfilter.core.plugin.MyTransformer;
|
||||
import com.janetfilter.core.plugin.PluginEntry;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class PrivacyPlugin implements PluginEntry {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "PRIVACY";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthor() {
|
||||
return "novice.li";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MyTransformer> getTransformers() {
|
||||
return Arrays.asList(new VMOptionsTransformer(),new PluginClassLoaderTransformer());
|
||||
}
|
||||
}
|
13
src/main/java/com/novitechie/StackTraceRule.java
Normal file
13
src/main/java/com/novitechie/StackTraceRule.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package com.novitechie;
|
||||
|
||||
public class StackTraceRule {
|
||||
public static boolean check() {
|
||||
RuntimeException e = new RuntimeException();
|
||||
for (StackTraceElement stackTraceElement : e.getStackTrace()) {
|
||||
if (stackTraceElement.getFileName() == null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
41
src/main/java/com/novitechie/VMOptionsTransformer.java
Normal file
41
src/main/java/com/novitechie/VMOptionsTransformer.java
Normal file
@@ -0,0 +1,41 @@
|
||||
package com.novitechie;
|
||||
|
||||
import com.janetfilter.core.plugin.MyTransformer;
|
||||
import jdk.internal.org.objectweb.asm.*;
|
||||
import jdk.internal.org.objectweb.asm.commons.AdviceAdapter;
|
||||
|
||||
import static jdk.internal.org.objectweb.asm.Opcodes.ASM5;
|
||||
|
||||
public class VMOptionsTransformer implements MyTransformer {
|
||||
@Override
|
||||
public String getHookClassName() {
|
||||
return "com/intellij/diagnostic/VMOptions";
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] transform(String className, byte[] classBytes, int order) throws Exception {
|
||||
ClassReader cr = new ClassReader(classBytes);
|
||||
ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES);
|
||||
cr.accept(new ClassVisitor(ASM5, cw) {
|
||||
@Override
|
||||
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
|
||||
if (name.equals("getUserOptionsFile")) {
|
||||
MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
|
||||
return new AdviceAdapter(api, mv, access, name, desc) {
|
||||
@Override
|
||||
protected void onMethodEnter() {
|
||||
mv.visitMethodInsn(INVOKESTATIC, "com/novitechie/StackTraceRule", "check", "()Z", false);
|
||||
Label l0 = new Label();
|
||||
mv.visitJumpInsn(IFEQ, l0);
|
||||
mv.visitInsn(ACONST_NULL);
|
||||
mv.visitInsn(ARETURN);
|
||||
mv.visitLabel(l0);
|
||||
}
|
||||
};
|
||||
}
|
||||
return super.visitMethod(access, name, desc, signature, exceptions);
|
||||
}
|
||||
}, 6);
|
||||
return cw.toByteArray();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user