From ff574a9a87af37515390639380c8a78d0a48b2de Mon Sep 17 00:00:00 2001 From: dachui <1042804103@qq.com> Date: Sun, 8 Jun 2025 16:37:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=87=AA=E5=AE=9A=E4=B9=89=E7=B1=BB?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E5=99=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/club/shengsheng/MyClassLoader.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/main/java/club/shengsheng/MyClassLoader.java b/src/main/java/club/shengsheng/MyClassLoader.java index 21026cf..c743762 100644 --- a/src/main/java/club/shengsheng/MyClassLoader.java +++ b/src/main/java/club/shengsheng/MyClassLoader.java @@ -1,9 +1,53 @@ package club.shengsheng; +import java.io.File; +import java.nio.file.Files; /** * @author gongxuanzhangmelt@gmail.com **/ public class MyClassLoader extends ClassLoader { + private static final String MY_CLASS_NAME = "tech.insight.ShengSheng"; + + private static final String MY_CLASS_PATH = "加密.class"; + + // 修改加载类的逻辑 当前这个类由我们自己定义的类加载器定义 + @Override + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + synchronized (getClassLoadingLock(name)) { + Class c = findLoadedClass(name); + if (c == null) { + try { + if(name.startsWith(MY_CLASS_NAME)) { + c = findClass(name); + } else { + return super.loadClass(name, resolve); + } + } catch (ClassNotFoundException e) { + // ClassNotFoundException thrown if class not found + // from the non-null parent class loader + } + } + if (resolve) { + resolveClass(c); + } + return c; + } + } + + @Override + protected Class findClass(final String name) + throws ClassNotFoundException { + try { + File classFile = new File(".", MY_CLASS_PATH); + byte[] bytes = Files.readAllBytes(classFile.toPath()); + for(int i = 0; i < bytes.length; i++) { + bytes[i]--; + } + return defineClass(name, bytes, 0, bytes.length); + } catch (Exception e) { + throw new ClassNotFoundException(name); + } + } }