关键词:
Java字节码
混淆
软件水印
程序切片
摘要:
Java程序由于平台无关性得以在Internet上迅速发布,但同时Java程序也面临着两个严重的安全问题:第一,侵权使用。Java编译器将每一个类编译成一个单独的class文件,这一特点让侵权使用Java class文件变的容易;第二,逆向工程。目前Java字节码的反编译技术已经很成熟,出现了许多Java反编译工具,这些工具能很好的把Java字节码反编译成Java源代码。
为了保护Java字节码的安全,本文提出了一种新的保护模型:利用代码混淆和软件水印技术对Java字节码实施双重保护,从而保护了Java程序的知识产权。混淆Java字节码是在保持程序语义的前提下隐藏程序的内部信息,使得Java程序员很难读懂反编译后的Java源代码甚至于不能被正确的重新编译更甚者不能反编译。在Java字节码中嵌入水印就是将含有标识意义的信息嵌入到Java class文件中。也就是说利用混淆技术来阻止Java字节码的逆向工程,利用软件水印为Java class文件提供版权保护。
研究了现有的代码混淆技术,在此基础上设计了词法转换算法、类的假重构算法,改进和完善了类拆分算法,总结了类型隐藏混淆的本质和与接口回调技术的区别,分析、细节化了三种能使反编译失败的控制流混淆算法,并针对程序切片严重威胁控制流混淆的问题找出了两种抵抗程序切片的混淆策略。研究了现有的一种针对Java字节码的水印算法。通过对水印算法的改进,提高了水印算法的鲁棒性、透明性。
利用研究成果,设计并实现了名为JOCOW(Java Tool which combines obfuscation and Watermark technology)的系统,用户可使用该系统对Java class文件进行双重保护。
保证Java字节码的绝对安全是不可能的,但是本文的研究可以给Java字节码提供版权保护和使Java字节码逆向工程价值减小。