• javaee加密部署,tomcat使用自己的classloader解密


    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文件放到tomcatlib下

    【开始】

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

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

    3.修改context.xml

    4.tomcatlib下添加loader.class

    5.启动tomcat

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

  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/jukan/p/7388831.html
Copyright © 2020-2023  润新知