From f1f7c80655745612dda0645d1460f007ba3d0098 Mon Sep 17 00:00:00 2001 From: dntam00 Date: Thu, 10 Jul 2025 12:56:47 +0700 Subject: [PATCH] load and decrypt class file --- .../java/club/shengsheng/MyClassLoader.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/main/java/club/shengsheng/MyClassLoader.java b/src/main/java/club/shengsheng/MyClassLoader.java index 21026cf..24bd748 100644 --- a/src/main/java/club/shengsheng/MyClassLoader.java +++ b/src/main/java/club/shengsheng/MyClassLoader.java @@ -1,9 +1,52 @@ package club.shengsheng; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.IOException; + /** * @author gongxuanzhangmelt@gmail.com **/ public class MyClassLoader extends ClassLoader { + private static final String classFile = "加密.class"; + + @Override + public Class loadClass(String name) throws ClassNotFoundException { + if (name != null && name.startsWith("java.")) { + return super.loadClass(name); + } + return findClass(name); + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + byte[] classData = null; + try { + classData = readClassFile(); + } catch (IOException e) { + throw new ClassNotFoundException("Could not read class file: " + classFile); + } + return defineClass(name, classData, 0, classData.length); + } + + private byte[] readClassFile() throws IOException { + try (FileInputStream fis = new FileInputStream(classFile); + ByteArrayOutputStream byteArrStream = new ByteArrayOutputStream()) { + + byte[] buffer = new byte[1024]; + int bytesRead; + + while ((bytesRead = fis.read(buffer)) != -1) { + byteArrStream.write(buffer, 0, bytesRead); + } + + byte[] byteArray = byteArrStream.toByteArray(); + for (int i = 0; i < byteArray.length; i++) { + byteArray[i] = (byte)(byteArray[i] - 1); + } + return byteArray; + } + } }