如何有效防止Java程序源码被人偷窥?
http://tech.ddvip.com 2007年08月08日 社区交流
内容摘要:Java程序的源代码很容易被别人偷看,只要有一个反编译器,任何人都可以分析别人的代码。本文讨论如何在不修改原有程序的情况下,通过加密技术保护源代码。
如前所述,定制ClassLoader只需先获取类文件的数据,然后把字节码传递给运行时系统,由后者完成余下的任务。
ClassLoader有几个重要的方法。创建定制的ClassLoader时,我们只需覆盖其中的一个,即loadClass,提供获取原始类文件数据的代码。这个方法有两个参数:类的名字,以及一个表示JVM是否要求解析类名字的标记(即是否同时装入有依赖关系的类)。如果这个标记是true,我们只需在返回JVM之前调用resolveClass。
【Listing 2:ClassLoader.loadClass()的一个简单实现】
以下是引用片段:
publicClassloadClass(Stringname,booleanresolve)
throwsClassNotFoundException{
try{
//我们要创建的Class对象
Classclasz=null;
//必需的步骤1:如果类已经在系统缓冲之中,
//我们不必再次装入它
clasz=findLoadedClass(name);
if(clasz!=null)
returnclasz;
//下面是定制部分
byteclassData[]=/*通过某种方法获取字节码数据*/;
if(classData!=null){
//成功读取字节码数据,现在把它转换成一个Class对象
clasz=defineClass(name,classData,0,classData.length);
}
//必需的步骤2:如果上面没有成功,
//我们尝试用默认的ClassLoader装入它
if(clasz==null)
clasz=findSystemClass(name);
//必需的步骤3:如有必要,则装入相关的类
if(resolve&&clasz!=null)
resolveClass(clasz);
//把类返回给调用者
returnclasz;
}catch(IOExceptionie){
thrownewClassNotFoundException(ie.toString());
}catch(GeneralSecurityExceptiongse){
thrownewClassNotFoundException(gse.toString());
}
}
责编:豆豆技术应用
正在加载评论...