自定义ClassLoader对Class加密并解密
来源:互联网 发布:s7200模拟量编程实例 编辑:程序博客网 时间:2024/06/12 00:05
前言:本博客内容由张孝祥Java高新技术整理而来
class加密部分
项目目录结构
ClassLoaderAttach
package com.dao.chu.myloader;import java.util.Date;@SuppressWarnings("serial")public class ClassLoaderAttach extends Date{@Overridepublic String toString() {return "this is ClassLoaderAttach";}}
MyClassLoader
package com.dao.chu.myloader;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class MyClassLoader {public static void main(String[] args) throws IOException {String srcPath = args[0];String destDir = args[1];String destFileName = srcPath.substring(srcPath.lastIndexOf("\\") + 1);String destFilePath = destDir + "\\" + destFileName;FileInputStream fin = new FileInputStream(srcPath);FileOutputStream fout = new FileOutputStream(destFilePath);cypher(fin,fout);fin.close();fout.close();}/*** <p>Title: cypher</p>* <p>Description:加密, 将原来的1改为0,0改为1</p>* @param in* @param out* @throws IOException */public static void cypher(InputStream in ,OutputStream out) throws IOException{int b=0;while ((b=in.read())!=-1) {out.write(b ^ 0xff);}}}
MyClassLoaderTest
package com.dao.chu.myloader;public class MyClassLoaderTest {public static void main(String[] args) {ClassLoaderAttach classLoaderAttach = new ClassLoaderAttach();System.out.println(classLoaderAttach.toString());}}
运行 MyClassLoader,输入ClassLoaderAttach.class的路径和要生成至的路径。
运行成功后可看到有加密后的class文件生成
执行MyClassLoaderTest,可看到正常输出
我们将加密的class文件与原来没加密过的class文件进行替换
再次执行MyClassLoaderTest,可看到报错信息。说明加密成功,用原来的类加载器不能运行,所以我们要用自己的类加载器运行
自定义ClassLoader部分
我们将MyClassLoader修改如下
package com.dao.chu.myloader;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class MyClassLoader extends ClassLoader{public static void main(String[] args) throws IOException {String srcPath = args[0];String destDir = args[1];String destFileName = srcPath.substring(srcPath.lastIndexOf("\\") + 1);String destFilePath = destDir + "\\" + destFileName;FileInputStream fin = new FileInputStream(srcPath);FileOutputStream fout = new FileOutputStream(destFilePath);cypher(fin,fout);fin.close();fout.close();}/*** <p>Title: cypher</p>* <p>Description:加密, 将原来的1改为0,0改为1</p>* @param in* @param out* @throws IOException */public static void cypher(InputStream in ,OutputStream out) throws IOException{int b=0;while ((b=in.read())!=-1) {out.write(b ^ 0xff);}}private String classDir;public MyClassLoader(){}public MyClassLoader(String classDir){this.classDir=classDir;}/** * 覆盖ClassLoader的findClass方法 */@SuppressWarnings("deprecation")@Overrideprotected Class<?> findClass(String name)throws ClassNotFoundException {String classFileName = classDir + "\\" + name + ".class";try {FileInputStream fin = new FileInputStream(classFileName);ByteArrayOutputStream baout = new ByteArrayOutputStream();//解密cypher(fin,baout);fin.close();//转为字节数组byte[] byteArray = baout.toByteArray();return defineClass(byteArray, 0, byteArray.length);} catch (Exception e) {}return null;}}
MyClassLoaderTest修改如下
package com.dao.chu.myloader;import java.util.Date;public class MyClassLoaderTest {@SuppressWarnings("rawtypes")public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {//ClassLoaderAttach classLoaderAttach = new ClassLoaderAttach();//System.out.println(classLoaderAttach.toString());Class c = new MyClassLoader("myloaderlib").loadClass("ClassLoaderAttach");Date d = (Date)c.newInstance();System.out.println(d);}}
测试前我们需将原来生成的ClassLoaderAttach.class删掉,避免父类加载影响结果
最后执行MyClassLoaderTest
正是我们想要的结果
阅读全文
0 0
- 自定义ClassLoader对Class加密并解密
- Tomcat自定义classLoader加密解密
- 利用自定义的 ClassLoader 加密 Java Class 文件
- 利用自定义的 ClassLoader 加密 Java Class 文件
- VC对自定义资源加密解密(AES)
- Java加密部署,使用自定义的classloader解密的方法实例
- 自定义ClassLoader动态加载Class
- 自定义classloader加密java程序
- 自定义classloader加密java程序
- java源程序加密解决方案(基于Classloader解密)
- 【加密解密】对字符串的加密解密
- Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
- Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
- ClassLoader对Java源码加解密
- classloader加载class的流程及自定义ClassLoader
- 图解classloader加载class的流程及自定义ClassLoader
- 图解classloader加载class的流程及自定义ClassLoader
- 图解classloader加载class的流程及自定义ClassLoader
- 4.27 leetcode -27 unique-binary-search-trees
- Python IDLE
- 第十三章:集合
- 项目总结一:页面弹出框+表单输入与校验形式,实现添加内容到页面
- 猜灯谜--蓝桥杯国赛历年真题
- 自定义ClassLoader对Class加密并解密
- 基于ATtiny85微控制器制作一款四通道温度计
- 杭电OJ_(2044)一只小蜜蜂..
- mysql的安装
- 【C语言】【unix c】编写代码实现cat的功能
- EM算法
- 根据radio选择的不同,跳转到不同的页面
- React Native的模态,AsyncStorage,DeviceEventEmitter
- iOS UIView的点击事件与触摸手势