http://www.2cto.com/kf/201312/264455.html

【起因】

公司需要对一个web项目进行加密之后出售,

大家都知道的,class很好反编译,

所以需要对class文件先进行加密,

然后使用自己的classloader进行解密并加载。

【步骤】

大概分两步:

1.对class文件进行加密

2.写解密class文件并加载的classloader

3.将这个classloader加入到tomcat中,也就是使tomcat可以调用到这个classloader

【加密】

1.思路

字节流读取class文件,进行简单的移位

2.实现

做了一个小程序,实现了对某文件夹下所有class文件字节流读取,并+2位的加密方式

3.说明

swing是使用myeclipse的插件做的,可能比较乱

4.代码&下载

加密程序的源代码和程序打包成jar文件上传到了这里,双击可以使用。

【classloader】

1.代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package com.uikoo9.loader;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.catalina.loader.WebappClassLoader;
/**
 * 自定义的classloader
 * 可以解密文件并加载
 * @author uikoo9
 */
public class UClassLoader extends WebappClassLoader{
     
    /**
     * 默认构造器
     */
    public UClassLoader() {
        super();
    }
    /**
     * 默认构造器
     * @param parent
     */
    public UClassLoader(ClassLoader parent) {
        super(parent);
    }
    /* (non-Javadoc)
     * @see org.apache.catalina.loader.WebappClassLoader#findClass(java.lang.String)
     */
    public Class<!--?--> findClass(String name) throws ClassNotFoundException {
        if(name.contains("uikoo9")){
            return findClassEncrypt(name);
        }else{
            return super.findClass(name);
        }
    }
     
    /**
     * 查找class
     * @param name
     * @return
     * @throws ClassNotFoundException
     */
    private Class<!--?--> findClassEncrypt(String name) throws ClassNotFoundException{
        byte[] classBytes = null;
        try {
            System.out.println("++++++" + name);
            classBytes = loadClassBytesEncrypt(name);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Class<!--?--> cl = defineClass(name, classBytes, 0, classBytes.length);
        if (cl == null)
            throw new ClassNotFoundException(name);
        return cl;
    }
     
    /**
     * 加载加密后的class字节流
     * @param name
     * @return
     * @throws IOException
     */
    private byte[] loadClassBytesEncrypt(String name) throws IOException {
        String basepath = "Z:/program/workspaces/_work_03_bzb/WebRoot/WEB-INF/classes/";// 项目物理地址
        String cname = basepath + name.replace('.', '/') + ".uikoo9";
        System.out.println(cname);
        FileInputStream in = new FileInputStream(cname);
        try {
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
            int ch;
            while ((ch = in.read()) != -1) {
                buffer.write((byte)(ch - 2));
            }
            in.close();
            return buffer.toByteArray();
        } finally {
            in.close();
        }
    }
}

【加入到tomcat】

1.context.xml

找到tomcat下contex.xml,在context之间加入以下代码:

?
1
<loader delegate="true" loaderclass="com.uikoo9.loader.UClassLoader"></loader>

其中loaderClass就是自己写loader,delegate=“true”的意思是只解密非系统的class和jar

2.添加loader

将自己写的loader的class文件放到tomcat\lib下

【开始】

1.使用加密程序对classes下所有文件加密,加密之后所有的class文件后缀变为uikoo9,可以自己修改源代码

2.将原classes文件夹删除,将加密后的classes文件夹复制进去

3.修改context.xml

4.tomcat\lib下添加loader.class

5.启动tomcat

经过实验是没问题的,如有疑问请留言。

javaee加密部署,tomcat使用自己的classloader解密相关推荐

  1. eclipse--eclipse(JavaEE版本)部署Tomcat工程(转)

    介绍如何在eclipse(JavaEE版本)中部署Tomcat工程, 转自"http://www.cnblogs.com/chenjunbiao/archive/2011/12/09/228 ...

  2. IntelliJ IDEA 部署Tomcat及创建一个web工程

    一.部署Tomcat 二.新建一个web工程 1.新建一个Project 2.现在建立一个简单的web工程,所以只勾选下面选中的,此外,本版本(IntelliJ IDEA 14.1.5只支持3.1版本 ...

  3. linux下部署tomcat没起成功,linux下部署tomcat 上线jpress博客系统

    tomcat Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器. tomcat有三个端口 开始部署 安装tomcat 第一步:下载tomcat 安装包 tomcat官网 ...

  4. IDEA从零到精通06之创建web项目及部署tomcat运行

    文章目录 作者简介 引言 导航 热门专栏推荐 视频讲解 概述 一.创建web项目 二.修改部署信息 三.启动服务 四.关闭服务 五.创建Servlet并访问 六.引入第三方jar包 小结 导航 热门专 ...

  5. 在docker上安装部署tomcat项目 超简单,拿来主义

    在docker中部署tomcat,非常简单,而且省去了手动安装jdk等步骤,只需要将war包复制在容器tomcat实例中的webapps下面即可.以下将详细讲解流程: 在windows中打好包以后用w ...

  6. ansible部署tomcat及 include机制

    1.本文尝试着使用ansible部署tomcat,test为测试工程 roles如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  7. 部署Tomcat服务时,解决Cannot invoke Tomcat Manager 异常

    部署Tomcat服务时,解决Cannot invoke Tomcat Manager 异常 参考文章: (1)部署Tomcat服务时,解决Cannot invoke Tomcat Manager 异常 ...

  8. 源码包部署tomcat

    JAVA 在openjdk下载 jre----痩身版的-------jdk java的容器----->tomcat,websphere(银行用的多),Jboss(12306),weblogic ...

  9. IDEA创建Web项目及部署Tomcat

    IDEA创建Web项目及部署Tomcat 说明:本文章适用于IDEA2020及以后版本 操作 IDEA创建Web项目及部署Tomcat:IDEA2020创建Web项目(及部署Tomcat) 细节补充 ...

  10. Docker Review - docker部署Tomcat Nginx

    文章目录 Docker 部署tomcat 搜索 tomcat 下载tomcat 启动tomcat 访问tomcat 查看webapps & 修复问题 重新访问tomcat Docker 部署N ...

最新文章

  1. [SQL] Query mystore start [ERR] 1005 - Can't create table 'mystore.admin' (errno: 150)
  2. VTK:图像高斯平滑用法实战
  3. Verizon发布2010年数据破坏调查报告
  4. python之时间日期time
  5. 相机成像原理_数码相机的工作原理
  6. 前端学习(1720):前端系列javascript之生命周期下
  7. Python实例讲解 -- 定时播放 (闹钟+音乐)
  8. FastDFS介绍并在centos7中安装
  9. 利用for循环打印出不同的三角形
  10. JavaScript 开发者经常忽略或误用的七个基础知识点
  11. MyEclipse+Tomcat+JSP开发环境配置
  12. STM32_OLED显示
  13. vue 怎么解析xml
  14. 百度云直链下载-IDM+网页解析(三)
  15. socketException之broken pipe
  16. sed -n使用变量
  17. 查询用户连续登录的天数
  18. 厦门新车上牌经验分享
  19. 区分Linux:eth0,eth1,eth2,lo
  20. 项目管理中,管理者如何打造团队执行力?

热门文章

  1. 通俗的语言解释一下什么是 RPC 框架
  2. pandas dataframe遍历_Pandas循环提速7万多倍!Python数据分析攻略!
  3. 闹钟流程_自考专升本1月份统考粤康码申报流程
  4. maven打包时加入依赖jar包
  5. 全网首发:CENTOS FreeSwitch集成NVIDIA CODEC
  6. VirtualBox 6.1.4的共享剪贴板确实有问题,6.1.0正常
  7. LINUX查看剪贴板有哪些内容
  8. JAVA的图形性能,慢在哪里之分析
  9. 成功的人不是最聪明的那个人,但绝对是一个交流很棒的人
  10. 用科学数据求真:月球的激光发射器有用吗?