From 1a7b92eff5168a0a8676bd32613b8e619541cbe3 Mon Sep 17 00:00:00 2001 From: stitchgk Date: Tue, 3 Jun 2025 15:16:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20implement=20MyClassLoade?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/club/shengsheng/MyClassLoader.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/main/java/club/shengsheng/MyClassLoader.java b/src/main/java/club/shengsheng/MyClassLoader.java index 21026cf..f3ce688 100644 --- a/src/main/java/club/shengsheng/MyClassLoader.java +++ b/src/main/java/club/shengsheng/MyClassLoader.java @@ -1,9 +1,50 @@ package club.shengsheng; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + /** * @author gongxuanzhangmelt@gmail.com **/ public class MyClassLoader extends ClassLoader { + protected Class loadClass(String name, boolean resolve) + throws ClassNotFoundException + { + synchronized (getClassLoadingLock(name)) { + Class c = findLoadedClass(name); + if (c == null) { + if (name.startsWith("tech")) { + c = findClass(name); + } else { + c = getParent().loadClass(name); + } + } + if (resolve) { + resolveClass(c); + } + return c; + } + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + String path = "加密.class"; + File classFile = new File(path); + try { + byte[] bytes = decrypt(Files.readAllBytes(classFile.toPath())); + return defineClass(name, bytes, 0, bytes.length); + } catch (IOException e) { + throw new ClassNotFoundException(name); + } + } + + private byte[] decrypt(byte[] bytes) { + for (int i = 0; i < bytes.length; i++) { + bytes[i] = (byte) (bytes[i] - 1); + } + return bytes; + } }