Java加密部署,使用自定义的classloader解密的方法实例
来源:互联网 发布:理查德拉米雷斯 知乎 编辑:程序博客网 时间:2024/06/05 13:34
一、前言
1. 简介
使用jfinalQ-encrypt开源软件。对项目的class文件加密,防止反编译,可自定义加密解密算法,支持tomcat部署。
2.jfinalQ-encrypt 项目结构
3. 流程
2.1 首先将class文件进行字节流加密;
2.2 然后自定义tomcat的ClassLoader;
2.3 最后通过自定义的ClassLoader解密并加载class。
二、加密
本节以Test项目为例,对其class文件进行加密。并用自定义的classloader进行解密。
1. Test项目目录结构
1.1 web.xml 配置
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.demo.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping></web-app>
1.2 HelloServlet代码
package com.demo;import java.io.IOException;/** * 请求地址 :http://localhost:8080/Test/HelloServlet */public class HelloServlet extends HttpServlet { // handle post request private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("userName"); response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.println("欢迎你: "+new String(name.getBytes("ISO-8859-1"), "UTF-8")+ "!"); } // destroy public void destroy() { }}
1.3 前端页面代码
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java"%><!-- 请求地址: localhost:8080/Test/index.jsp --><html><head><title>HelloServlet</title></head><body> <form action="HelloServlet" name="form" method="post"> 姓名:<input type="text" name="userName"><br> <input type="submit" value="登录"> </form></body></html>
此时部署成功后经测试,tomcat下class文件可以轻松反编译,JSP页面可正常访问servlet文件。接下来对class文件进行加密。
2. 加密解密算法,可修改
3. 运行QEncryptFrame.java文件
- 选择需要加密的文件
- 加密成功后显示
4. 把生成的加密后的class文件拷贝到源class文件的位置。
覆盖完成后,不要做修改代码,clean等操作,否则加密后的class会被再次覆盖。
5. 测试
- 此时再对class文件进行反编译,则如下报错
- 并且JSP文件不可正常请求servlet
- 点击登录后返回
三、解密
1. 配置 loader.properties 文件
此配置文件指定了自定义的ClassLoader需要进行解析的classs文件范围。
encrypted_package=com.demoencrypted_class_path=D\:/apache-tomcat-7.0.70/webapps/Test/WEB-INF/classes/
- encrypted_package 需要进行解密的包,多个包名用逗号分隔;
- encrypted_class_path tomcat中项目的classess文件夹路径。
2. 打包自定义classloader文件
将jfinalQ-encrypt中的loader包和QClassUtil打为一个jar,并命名为++classloaderQ.jar++,如下图所示:
3. 更改tomcat的默认loader,改为自定义classloader
- 修改tomcat/conf/context.xml文件,添加如下代码:
<Loader loaderClass="com.uikoo9.loader.QClassLoader" delegate="true"></Loader>
4. 替换jar包
把classloaderQ.jar放到Tomcat的lib(D:\apache-tomcat-7.0.70\lib)文件夹下面。
5. 测试
- 对class文件进行反编译,报错
- JSP文件可正常请求servlet.
- 点击登录后返回页面
- 测试成功
四、源码
- 源码下载
五、后记
由于时间原因,jfinalQ-encrypt源代码没能细读,只能做到初步应用,此文有待逐步后续完善。
阅读全文
0 0
- Java加密部署,使用自定义的classloader解密的方法实例
- javaee加密部署,tomcat使用自己的classloader解密【正解】
- javaee加密部署,tomcat使用自己的classloader解密
- javaee加密,tomcat使用自己的classloader解密
- Tomcat自定义classLoader加密解密
- 一个简单的加密解密方法实例
- javaee加密部署项目通过tomcat使用自定义的classload解密
- 利用自定义的 ClassLoader 加密 Java Class 文件
- 利用自定义的 ClassLoader 加密 Java Class 文件
- 使用DES加密和解密的方法
- java的简单加密/解密方法
- java 常用方法的加密解密
- java常用的加密解密方法
- java常用的加密解密方法
- java常用的加密解密方法
- 自定义ClassLoader对Class加密并解密
- 古典密码中的Vigenere加密方法的解密实例
- 自定义classloader加密java程序
- lucene读取索引文件到内存
- 安卓7.0 系统服务启动流程
- 5.综合运用:实现用户登录
- BZOJ 1006: [HNOI2008]神奇的国度 最大势算法
- Java对xml文件的读取并解析的基本认识
- Java加密部署,使用自定义的classloader解密的方法实例
- 在Ubuntu中添加中文man包
- 字典树应用
- ffmpeg SDL2.0播放音频
- 动态规划:从新手到专家
- java mongdodb API增删改查操作
- 浅谈Linux用户权限管理之一(用户与组的概念)
- ListView的优化(一)
- Android图形处理--PorterDuff.Mode那些事儿