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. javaee加密部署,tomcat使用自己的classloader解密【正解】

    [起因] 公司需要对一个web项目进行加密之后出售, 大家都知道的,class很好反编译, 所以需要对class文件先进行加密, 然后使用自己的classloader进行解密并加载. [步骤] 大概分 ...

  2. IntelliJ IDEA 15 部署Tomcat及创建一个简单的Web工程

    一.部署Tomcat 二.创建一个简单的Web工程 2.1创建一个新工程 创建一个新工程 设置JDK及选择Web Application (创建的是Web工程) 点击Next,选择工作空间,起个工程名 ...

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

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

  4. Eclipse使用Maven搭建Java Web项目,并直接部署Tomcat

    1.环境: win10 Java 1.8 Maven 3.3.9 Eclipse IDE for Java EE Developers 2.准备: eclipse环境什么的不赘述,Maven环境还是要 ...

  5. Eclipse使用Maven搭建Java Web项目,并直接部署Tomcat(转载)

    原文地址:http://www.cnblogs.com/hackyo/p/6527910.html 1.环境: win10 Java 1.8 Maven 3.3.9 Eclipse IDE for J ...

  6. Eclipse使用Maven搭建Java Web项目并直接部署Tomcat

    1.环境: Windows 10 Java 1.8 Maven 3.3.9 Eclipse IDE for Java EE Developers 2.准备: eclipse环境什么的不赘述,Maven ...

  7. 二十二. 安装部署Tomcat服务器、使用Tomcat部署虚拟主机、使用Varnish加速Web

    web proxy web1 web2   1.安装部署Tomcat服务器 web1 1.1 使用RPM安装JDK环境 ]# yum -y install java-1.8.0-openjdk ]# ...

  8. 高级运维(四):Nginx常见问题处理、安装部署Tomcat服务器、使用Tomcat部署虚拟主机

    一.Nginx常见问题处理 目标: 本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能: 1> 不显示Nginx软件版本号 2> 如果客户端访问服务器提示“Too many ...

  9. 安装部署Tomcat服务器

                      安装部署Tomcat服务器 案例1:安装部署Tomcat服务器 案例2:使用Tomcat部署虚拟主机 案例3:使用Varnish加速Web 1案例1:安装部署Tom ...

随机推荐

  1. hammer.js移动端手势库

    hammer.js 是一个多点触摸手势库,能够为网页加入Tap.Double Tap.Swipe.Hold.Pinch.Drag等多点触摸事件,免去自己监听底层touchstart.touchmove ...

  2. springmvc常用注解标签详解(转载)

    1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...

  3. 浏览器中使用 ES6 import

    html 中的 head 标签引入: <script src="test.js" type="module"></script> tes ...

  4. 160614、Eclipse下JRebel6.2.0热部署插件安装、破解及配置

    标签: 这两天在做后台管理系统,前端框架用Bootstrap,后端用SpringMVC+Velocity.在开发过程中,经常需要对界面进行微调,调整传参等,每次更改一次java代码,就得重新部署一次, ...

  5. Python--进阶处理4

    #================第四章:迭代器和生成器=================== # 函数 itertools.islice()适用于在迭代器和生成器上做切片操作. import ite ...

  6. jstree的checkbox实例+详解

    jstree的checkbox实例较少,思索后决定进行一下整理,先上代码 $("#filtrate_row").on("loaded.jstree",funct ...

  7. fiddler弱网测试

    模拟低速网路环境…启用方法如下: Rules → Performances → Simulate Modem Speeds (如下图)· 勾选之后,你会发现你的网路瞬间慢超多… (想当年国中时我们的网 ...

  8. sersync+rsync原理及部署

    标签:sersync+rsync部署文档 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liubao0312.blog.51ct ...

  9. C# 使用KingAOP面向切面编程

    1. 在Nuget中安装KingAOP 2. 日志DEMO public class Test : IDynamicMetaObjectProvider { [LogAspec] public voi ...

  10. TFS中工作项的定制-修改面板

    上一篇文章我们讲到了<TFS 中工作项的订制-修改工作流>,工作流只要我们设计出来,就可以进行定制修改了.这次通过简单的案例,了解一下,工作项的面板如何定制.     1.软件准备     ...