如何有效防止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());
  }
  }

责编:豆豆技术应用

正在加载评论...