ClassLoader加密技术改进研究.pdfVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ClassLoader加密技术改进研究.pdf

ClassLoader 加密技术改进研究 1 1,2 1,2 徐首泽 ,金瓯 ,贺建飚 1 中南大学信息科学与工程学院,湖南长沙(410082) 2 湖南省金融货币识别与自助服务平台工程技术研究中心,湖南长沙(410082) E-mail :xushouze2006@163.com 摘 要:ClassLoader 加密技术是 Java 当中用的比较广泛的代码保护技术,本文分析了 ClassLoader 加密技术的原理,发现并分析了现有方法存在的漏洞,同时根据这个漏洞的特 点对原有方法进行了的改进。 关键字:类加载器;Java 本地接口;混淆 1. 引言 Java 源代码编译后生成的不是真正的二进制文件, 而是一种有自己格式的中间代码, 这 种代码极易被反编译,而且反编译后的代码和源代码几乎没有差别。因此一些重要的算法或 是专利会泄漏出去。近年来, 已经有许多公司和开发人员对Java 类文件和虚拟机进行了深入 的分析, 产生了一些Java 类文件的保护方法,如代码隔离技术、本地编译技术、代码混淆技 术、ClassLoader(类加载器)加密技术以及数字水印技术等保护方法[1], 但是都有各自的局限 性。目前使用比较多的是ClassLoader 加密技术,然而ClassLoader 加密技术存在一个致命的 漏洞,程序员可以绕过加密的ClassLoader 和加密的Java 类文件直接得到解密后的Java 类文 件,使加密完全失去其作用。本文分析这个漏洞存在的原因,同时提出了自己的改进方法。 2. ClassLoader 加密原理 [2] Java 类文件加密技术是借助于 Java 中的类加载机制 。Java 虚拟机通过一个称为 ClassLoader 的对象来装载类文件的字节码,它根据类名在classpath 中找到该类的文件,读 取文件,并把它转换成一个Class 对象。ClassLoader 可以由Java 程序员自己定制,并借助 于ClassLoader 对需要保护的Java 类文件进行加密。加密的方法可以由用户自己定,如PGP, RSA , MD5 等,加密后的 Java 类文件就无法被反编译,起到了保护的作用。加密后的文 件在被 ClassLoader 读取之后,先对其进行解密,然后才能转换成一个 Class 对象,否则虚 拟机无法将其转换成Class 对象。 其具体步骤大体分三步: 将需要保护的class 文件加密,加密算法可以任意选择。 定制自己的ClassLoader 。自己定制的ClassLoader 需要继承自java.lang.ClassLoader 类, 然后覆盖其findClass 方法或loadClass 方法即可。在这两个方法中需要从classpath 中读 取已经加密文件,然后对这些加密的文件进行解密,最后调用父类中的 defineClass 方 法得到一个Class 对象,这是最为关键的一步。主要步骤如下: protected Class findClass(String name) throws ClassNotFoundException { …… byte[] b = null ,classBytes=null; b = loadClassData(name); //从环境变量中读取要加载的经过加密的class文件数据 classBytes = decrypt(classBytes); //解密 …… return defineClass(name, classBytes, 0, classBytes.length); //关键的一步,得到需要的Class对象 } 最后在自己定应用程序中使用自己的ClassLoader 加载器。如: - 1 -

文档评论(0)

wuyouwulu + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档