`
qingwei201314
  • 浏览: 167952 次
  • 性别: 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下吗?

相关推荐

    tomcat 源码分析系列文档

    【文件名称列表】中的每个文档都对应一个特定主题: 1. "Tomcat处理HTTP请求源码分析.doc":详细阐述了Tomcat接收到HTTP请求后,如何解析请求头、执行请求方法、构造响应的过程,包括Servlet生命周期和请求转发等。...

    tomcat6异常问题

    6. **使用Class-Path**:在`MANIFEST.MF`文件中指定额外的jar路径,可以解决特定应用的jar依赖。 7. **使用隔离的类加载器**:通过设置不同的类加载策略,例如Web应用的`WebappClassLoader`,可以避免不同应用之间...

    tomcat8源码

    Tomcat通过JaasRealm和Realm接口实现用户认证,支持多种认证机制如文件系统、数据库等。此外,还可以配置访问控制和角色权限。 8. **JSP与Servlet处理** - **Jasper**:负责JSP文件的编译,将JSP转换为Java源代码...

    Tomcat8.0底层源码

    `WebappClassLoader`则负责加载应用的类和资源文件。 四、线程模型 Tomcat采用基于线程池的并发模型,`Executor`接口及其实现类`ThreadPoolExecutor`用于管理线程。默认情况下,Tomcat使用`AprLifecycleListener`...

    Tomcat7 负载Jar包

    在Tomcat7中,JAR包的加载是通过Classloading机制来实现的。Classloading是Java运行时环境的一部分,负责查找、加载和初始化类。在Tomcat中,这个过程涉及到`WEB-INF/lib`目录下的所有JAR文件。每个Web应用都有自己...

    howtomcatworks tomcat运行内幕

    Tomcat的类加载机制遵循“父类加载优先”原则,通过`CommonLoader`、`CatalinaLoader`、`SharedLoader`和`WebappClassLoader`四个层次进行加载,保证了不同Web应用之间的类隔离。 8. **安全性** Tomcat支持多种...

    简单的Tomcat源码实现

    2. **类加载机制**:Tomcat使用自定义的类加载器,如`CommonClassLoader`、`WebappClassLoader`等,以实现不同Web应用间的隔离。 3. **请求处理**:` CoyoteAdapter`是Servlet容器与Tomcat网络接口(Coyote)之间的...

    tomcat源码学习

    在【压缩包子文件的文件名称列表】中,"tomcat-source-maven-master"可能是一个包含Tomcat源码的Maven项目。Maven是一个流行的Java项目管理和构建工具,它的项目结构清晰,便于理解和编译源码。 学习Tomcat源码,...

    Maven工程Tomcat热部署详解.pdf

    一旦检测到变化,Tomcat会停止应用的启动线程,清除引用,并将加载该应用的WebappClassLoader置为null,然后创建一个新的WebappClassLoader实例重新加载应用。 在Maven工程中配置Tomcat热部署,需要在pom.xml文件中...

    Tomcat 5.0.18 ClassLoader source code insight

    在Tomcat的源码中,`org.apache.catalina.loader.WebappClassLoader`是实现这一功能的关键类。它继承自`java.lang.ClassLoader`,并重写了`loadClass()`方法来实现上述的类加载逻辑。`loadClass()`方法首先会检查...

    细说Tomcat如何打破双亲委派(有源码和图)

    `classloader2.vsd`文件可能是类加载器层次结构的Visio绘图文件,它能直观地展示上述类加载器之间的关系和加载顺序。遗憾的是,由于这是一个文本环境,我们无法直接查看或解析图像内容,但你可以根据文件名自行打开...

    Problem with WebappClassLoader in background thread

    在Java的Web应用开发中,WebappClassLoader是Tomcat等Servlet容器用于加载应用中类的特定类加载器。它负责加载Web应用程序的类和资源,确保每个Web应用都有自己的类加载器实例,从而实现类的隔离。 该问题可能涉及...

Global site tag (gtag.js) - Google Analytics