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文件放到tomcat\lib下
【开始】
1.使用加密程序对classes下所有文件加密,加密之后所有的class文件后缀变为uikoo9,可以自己修改源代码
2.将原classes文件夹删除,将加密后的classes文件夹复制进去
3.修改context.xml
4.tomcat\lib下添加loader.class
5.启动tomcat
经过实验是没问题的,如有疑问请留言。
javaee加密部署,tomcat使用自己的classloader解密的更多相关文章
- javaee加密部署,tomcat使用自己的classloader解密【正解】
[起因] 公司需要对一个web项目进行加密之后出售, 大家都知道的,class很好反编译, 所以需要对class文件先进行加密, 然后使用自己的classloader进行解密并加载. [步骤] 大概分 ...
- IntelliJ IDEA 15 部署Tomcat及创建一个简单的Web工程
一.部署Tomcat 二.创建一个简单的Web工程 2.1创建一个新工程 创建一个新工程 设置JDK及选择Web Application (创建的是Web工程) 点击Next,选择工作空间,起个工程名 ...
- IntelliJ IDEA 部署Tomcat及创建一个web工程
一.部署Tomcat 二.新建一个web工程 1.新建一个Project 2.现在建立一个简单的web工程,所以只勾选下面选中的,此外,本版本(IntelliJ IDEA 14.1.5只支持3.1版本 ...
- Eclipse使用Maven搭建Java Web项目,并直接部署Tomcat
1.环境: win10 Java 1.8 Maven 3.3.9 Eclipse IDE for Java EE Developers 2.准备: eclipse环境什么的不赘述,Maven环境还是要 ...
- 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 ...
- Eclipse使用Maven搭建Java Web项目并直接部署Tomcat
1.环境: Windows 10 Java 1.8 Maven 3.3.9 Eclipse IDE for Java EE Developers 2.准备: eclipse环境什么的不赘述,Maven ...
- 二十二. 安装部署Tomcat服务器、使用Tomcat部署虚拟主机、使用Varnish加速Web
web proxy web1 web2 1.安装部署Tomcat服务器 web1 1.1 使用RPM安装JDK环境 ]# yum -y install java-1.8.0-openjdk ]# ...
- 高级运维(四):Nginx常见问题处理、安装部署Tomcat服务器、使用Tomcat部署虚拟主机
一.Nginx常见问题处理 目标: 本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能: 1> 不显示Nginx软件版本号 2> 如果客户端访问服务器提示“Too many ...
- 安装部署Tomcat服务器
安装部署Tomcat服务器 案例1:安装部署Tomcat服务器 案例2:使用Tomcat部署虚拟主机 案例3:使用Varnish加速Web 1案例1:安装部署Tom ...
随机推荐
- 使用jq获取文字的宽度
获取字符串的长度很简单,但是如何获取一个字符串的字体宽度却是一个不太好操作的问题,今天查阅了许多资料,终于找到了解决方法: 1.首先,需要添加一个标签,HTML代码如下: <body> & ...
- Myeclipse下使用Maven搭建spring boot项目(第二篇)
现在需要搭建spring boot框架,并实现一个HelloWorld的项目,让程序真正运行起来. 一.在pom.xml中引入spring-boot-start-parent,spring官方的叫st ...
- 设置 SSH Key 登录服务器和 Git 服务器
设置 SSH Key 登录服务器 通过 ssh 登录服务器,一直都是用的账号和密码,今天看到一篇文章说这样不安全,使用 ssh key 的方式登录则是更好的选择,因此,研究实践了一下,并记录在这里. ...
- 知问前端——html+jq+jq_ui+mySql+ajax
**************************************************************************************************** ...
- 利用jquery跨域访问一般处理程序
$.getJSON('http://www.taik.com?Action=getservice&r=' + Math.random() + '&jsoncallback=?', fu ...
- DNS服务简介
一.域名系统 1.域名系统概述 域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址.域名系统其实就是名字系统.为什么不叫“名字” ...
- Codeforces Round #118 (Div. 1) A. Plant
A. Plant 题目链接:http://codeforces.com/problemset/problem/185/A 题意:一个植物会长,一开始是一个正三角形,每过一年,一个向上的正三角形会变成三 ...
- Quick UDP Internet Connections 让互联网更快的协议,QUIC在腾讯的实践及性能优化
https://mp.weixin.qq.com/s/44ysXnVBUq_nJByMyX9n5A 让互联网更快:通往QUIC之路 原创: 史天 翻译 云技术实践 8月15日 QUIC(Quick U ...
- Windows的445端口(文件共享)
周鸿祎:教育网大量电脑445端口暴露,导致中招_科技_腾讯网 http://tech.qq.com/a/20170513/016133.htm 互联网周鸿祎2017-05-13 12:04 据36 ...
- linux dpdk DDOS清洗和流量行为分析
http://www.linuxidc.com/Linux/2014-09/106285.htm http://www.th7.cn/system/lin/201403/51652.shtml DDO ...