关键词:
软件保护
字节码
运行机制
混淆性能
数据变换
摘要:
Java语言编译后的字节码文件中含有很多源程序的信息,反编译很容易。现在已经有很多的Java反编译工具,开源的有Jad,Jode,Jadclipse,JavaDecompiler等等,商业的Java反编译工具大多是以Jad,Jode为核心。防止反编译的方法主要有三种,一种是字节码加密,需要开发者自行开发classloader,用于在JVM运行字节码之前先行解密,这个方法需要管理密钥和classloader;一种方法是把核心代码用JNI本地代码实现,这种方法破坏了Jaya的可移植性;还有一种方法就是字节码混淆,就是分析字节码的结构和信息,重组字节码文件,使得反编译后的源码变得极难阅读或者反编译之后无法再编译,但重组的前提是不改变原程序的运行结果和性能。字节码混淆技术应用非常广泛。 这篇论文首先研究了字节码的结构和JVM运行机制,重点分析了字节码混淆技术中的几个主流的混淆技术,外形变换,数据变换,控制变换,类重组,预防变换五种,通过对比,选择实现了对原程序影响最小的外形变换中的词法变换,标识符替换,静态方法重载等,通过对开源的混淆工具proguard的研究,在proguard本身实现的词法变换的基础上,另外再实现了标识符滥用算法,类型变换算法,非法标识符替换算法,静态方法改写,重载无关联方法算法,实现了一个混淆器Xljproguard。最后通过对一些程序混淆前后运行性能的比较,分析Xljproguard的混淆性能。 这篇论文的目的是设计并实现一个混淆后不会带来额外运行代价的混淆器,故而并没有实现混淆技术中的其他混淆变换,数据变换和控制变换都会引来额外的开销,以后的工作,可以适当采用成熟的数据变换和控制变换,类重组等等,在代价可控的前提下加大反编译的难度。