jfinalQ-encrypt
1.简介
加密class文件,防止反编译,可自定义加密解密算法,支持tomcat部署,非spring框架。
2.原理
首先将class文件进行字节流加密,
然后自定义tomcat的ClassLoader,
最后通过自定义的ClassLoader解密并加载class。
3.下载
已经开源到github,地址:https://github/uikoo9/jfinalQ-encrypt
4.项目结构
QEncryptFrame.java是加密解密class的gui工具
QClassLoader.java是自定义的ClassLoader
loader.properties是配置文件
QClassUtil.java是加密解密算法,可以自行修改
准备工作
1.配置文件
配置文件中有两项:
encrypted_package=com.uikoo9.fore,com.uikoo9.manage,com.uikoo9.z
encrypted_class_path=Z\:/workspaces/jfinalq_01_blog/WebRoot/WEB-INF/classes/
encrypted_package
需要进行加密解密的包,
一般的javaee项目都比较大,对整个项目进行加密解密是不现实的,所以推荐对核心代码进行加密解密,
这里的包名就是核心代码的包名,多个包名用逗号分隔。
encrypted_class_path
tomcat中项目的classess文件夹路径
2.自定义加密解密算法
jfinalQ-encrypt中的加密解密算法如下:
package com.uikoo9;
/**
* 加密解密程序,可以自己定义算法
* @author qiaowenbin
*/
public class QClassUtil {
/**
* 加密程序,可以自己修改
* @param ch
* @return
*/
public static byte encrypt(int ch){
return (byte) (ch + 2);
}
/**
* 解密程序,可以自己修改
* @param ch
* @return
*/
public static byte decrypt(int ch){
return (byte) (ch - 2);
}
}
可以看到就是简单的对字节流进行移位,可以自己定义加密解密算法。
3.生成class代码
如果使用eclipse等,可以clean一下项目,这时会自动生成项目所有的class文件,
然后将需要加密的class文件拷贝出去,例如拷贝到e:/test下,
然后将需要加密的class文件拷贝出去,例如拷贝到e:/test下,
然后将需要加密的class文件拷贝出去,例如拷贝到e:/test下
加密代码
1.加密代码
以一个blog项目为例,项目结构:
这里选择加密com.uikoo9.fore.controller包,
所以需要修改之前提到的配置文件中:
encrypted_package=com.uikoo9.fore.controller
运行QEncryptFrame.java文件,如下:
其中e:/test下为要加密的包,如下:
点击加密按钮,会提示加密成功。
2.复制代码
将加密成功的class代码复制到tomcat部署项目中,如下
注意覆盖完成后,不要做修改代码,clean等操作,否则加密后的class会被再次覆盖。
注意覆盖完成后,不要做修改代码,clean等操作,否则加密后的class会被再次覆盖。
注意覆盖完成后,不要做修改代码,clean等操作,否则加密后的class会被再次覆盖。
自定义ClassLoader
1.修改配置文件
将配置文件进行对应的修改,加密包修改为对应的包,class路径修改为tomcat中项目路径,
encrypted_package=com.uikoo9.fore.controller
encrypted_class_path=Z\:/workspaces/jfinalq_01_blog/WebRoot/WEB-INF/classes/
2.打包
将jfinalQ-encrypt中的loader包和QClassUtil打包为一个jar,如下:
注意,只需要打包com.uikoo9.loader下的文件和QClassUtil,配置文件也要打包进去,
注意,只需要打包com.uikoo9.loader下的文件和QClassUtil,配置文件也要打包进去,
注意,只需要打包com.uikoo9.loader下的文件和QClassUtil,配置文件也要打包进去,
3.定义tomcat的loader
修改tomcat/conf/context.xml文件,添加如下代码:
<Loader loaderClass="com.uikoo9.loader.QClassLoader" delegate="true"></Loader>
添加完后,如下:
4.关于loader的jar命名
上面的Loader将tomcat的loader指向了com.uikoo9.loader.QClassLoader,
其实就是tomcat去tomcat/lib文件夹下去找这个类,
所以这个jar的命名是无关,这里将jar命名为了类似tomcat自带jar,tomcat-i18n-ia.jar,如下:
访问和校验
1.访问
启动tomcat,访问项目,发现可以正常访问,如下:
2.校验
用Java Decompiler对com.uikoo9.fore.controller下的class进行反编译,发现:
也就是没办法反编译了。
end
至此,对tomcat下非spring项目的加密部署实现。
至此,对tomcat下非spring项目的加密部署实现。
至此,对tomcat下非spring项目的加密部署实现。
jfinalQ2.0
官网:http://uikoo9/jfinalQ
源码:https://github/uikoo9/jfinalQ
更多精彩内容:http://uikoo9/
求打赏(长按图片即可识别)~ |
捐助列表:http://uikoo9/donate/ |
更多推荐
jfinalQ开发教程03-加密部署
发布评论