`
qingwei201314
  • 浏览: 162612 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

tomcat WebappClassLoader 加密class文件

阅读更多
对class文件时行加密,tomcat加载class文件时再进行解密.可以达到隐藏代码的目的.下面用commons-codec中的base64对class进行encode,再在tomcat加载时对class进行decode.
1.对要encode的class进行编码:
public static void main(String[] args) throws IOException {
FileInputStream file = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
file = new FileInputStream(
"./target/classes/kevin/ClassLoader.class");
bis = new BufferedInputStream(file);
byte[] b = new byte[bis.available()];
bis.read(b);
byte[] encodeB = Base64.encodeBase64(b);

fos = new FileOutputStream("ClassLoader.class");
bos = new BufferedOutputStream(fos);
bos.write(encodeB);
bos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
file.close();
bis.close();
fos.close();
bos.close();
}
}
2.将生成的class放入部署好的工程相应位置.
3.到tomcat.apache.org下载tomcat的源代码.
4.将eclipse.classpath, eclipse.project修改成.classpath, .project后,直接用eclipse导入工程apache-tomcat-6.0.32-src,再导入缺少的包.
5.在工程apache-tomcat-6.0.32-src中找到org.apache.catalina.loader.WebappClassLoader文件,再找到protected Class findClassInternal(String name) throws ClassNotFoundException 方法,将内容:
clazz = defineClass(name, entry.binaryContent, 0,
entry.binaryContent.length, new CodeSource(
entry.codeBase, entry.certificates));
修改为:
if (name.indexOf("ClassLoader") >= 0) {
byte[] base64Array = entry.binaryContent;
byte[] orginByteArray = Base64.decodeBase64(base64Array);
clazz = defineClass(name, orginByteArray, 0,
orginByteArray.length, new CodeSource(
entry.codeBase, entry.certificates));
} else {
clazz = defineClass(name, entry.binaryContent, 0,
entry.binaryContent.length, new CodeSource(
entry.codeBase, entry.certificates));
}
6.编译完成后,将WebappClassLoader.class及其子类文件替换运行时的tomcat/lib下的catalina.jar包中相同文件.
7.当tomcat运行需加载ClassLoader.class时,将会先对其进行decode,达到加密的目的.
分享到:
评论
1 楼 graduate2011 2011-11-21  
楼主你好,想问一下你编译tomcat源码是不是用ant?编译好之后WebappClassLoader调用的commons-codec那个jar包要放在tomcat的lib下吗?

相关推荐

    spring-instrument-tomcat-4.3.14.RELEASE.jar

    Tomcat's WebappClassLoader is currently not instrumentable, so Spring provides a custom ClassLoader that can be used by placing spring-instrument-tomcat.jar in $TOMCAT_HOME/lib and putting a loader ...

    Tomcat 检测内存泄漏实例详解

    这个要从热部署开始说起,因为tomcat提供了不必重启容器而只需重启web应用以达到热部署的功能,其实现是通过定义一个WebappClassLoader类加载器,当热部署时就将原来的类加载器废弃并重新实例化一个WebappCl

    借助Ehcache缓存框架实现对页面的缓存Demo

    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) at ...

    how-tomcat-works

    8.6 WebappClassLoader类 57 8.6.1 类缓存 58 8.6.2 载入类 59 8.6.3 应用程序 59 第9章 session管理 62 9.1 概述 62 9.2 Sessions 62 9.2.1 Session接口 62 9.2.2 StandardSession类 63 9.2.3 ...

    spring的jar包解决:DispatcherServlet

    at org.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java:1680) 严重: Servlet /LogMess threw load() exception java.lang.ClassNotFoundException: org.springframework.web....

    Problem with WebappClassLoader in background thread

    NULL 博文链接:https://pingfang.iteye.com/blog/1178075

    commons-beanutils-1.7.0

    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325) at org.apache.catalina...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    8.6 WebappClassLoader类 57 8.6.1 类缓存 58 8.6.2 载入类 59 8.6.3 应用程序 59 第9章 session管理 62 9.1 概述 62 9.2 Sessions 62 9.2.1 Session接口 62 9.2.2 StandardSession类 63 9.2.3 ...

    Proxool-0.9.1

    <listener-class>org.logicalcobwebs.proxool.configuration.ListenerConfigurator</listener-class> 与spring配合使用时,本加载需要放在spring前面 <listener-class>org.logicalcobwebs.proxool....

    信息: Deploying web application directory lx01

    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361) at org.apache.catalina....

    JettyWebSocketTest2

    在 onMessage 中,上下文类加载器将是 org.codehaus.plexus.classworlds.realm.ClassRealm 而不是 org.eclipse.jetty.webapp.WebAppClassLoader。 因此,从 Web 应用程序的 Jar 中查找类路径上的资源将失败。

Global site tag (gtag.js) - Google Analytics