Java类文件保护的研究及其实现 - 图文 联系客服

发布时间 : 星期六 文章Java类文件保护的研究及其实现 - 图文更新完毕开始阅读7b50e7e210661ed9ac51f356

Java类文件保护的研究及其实现浙江火学硕上学位论文2.客户机应用程序的传统保护方法Java开发的客户机应用程序是也俗称单机应用程序,其特征就是需要用iavac命令启动一个含有main0函数的应用程序。客户机应用程序的典型例子就是传统的GUI图形界面应用程序。目前所有的Java类文件的保护方法都是基于客户机应用程序的研究,本章讲详细分析这些传统的Java类文件保护方法。传统的Java类文件保护方法主要有以下几种方式:本地编译技术、代码隔离技术、代码混淆技术以及数字水印技术。下面将对这几种方法分别进行介绍。2.1.本地编译技术Java本地编译是指将Java应用程序编译成本地应用程序[421,如Windows操作系统上扩展名为exe的应用程序。其步骤如下:首先编写Java源代码,然后通过Java编译器将Java源代码编译成Java类文件,最后将Java类文件编译成真正的本机应用程序。这种解决方案将以牺牲跨平台性为代价,生成的本地应用程序是二进制格式的可执行文件,与在虚拟机中执行的Java应用程序相比,可以产生更快的执行速度和更小的内存占用,而且其安全性能也等价于本地可执行应用程序的安全强度,这些对于当今许多应用程序都很关键[101。目前市面上有很多的本地编译工具,如GCJ,{ove和ExcelsiorJET等,但是在使用了这些工具后,发现了以下几个问题:(1)失去了跨平台性;因为生成的本地应用程序是二进制格式的可执行文件,所以只能在某‘一种平台上运行,失去了跨平台的特性。因此,它是以牺牲Java语言最优秀的特性为代价。(2)不支持B/S结构的Java应用程序:本地编译后生成的应用程序是一个可执行程序,所以适用于普通的客户机应用程序。而目前流行的B/S结构的应用程序运行在Java应用服务器上,因此本地编译明显不支持这种类型的应用程序。(3)类支持/编译器成熟度:很多编译器仍然相对不太成熟,并且可能无法支持应用程序所需的所有Java类。例如,虽然GCJ支持大部分上至1.1版本规范的Java语言构造,但是,它不支持通常与JVM一起提供的所有Java类库。Java类文件保护的研究及其实现浙江大学硕士学位论义最重要的是,它几乎不支持AWT,这使GCJ无法适用于GUl应用程序。不同的编译器支持不同级别的类库;ExcelsiorJET声称是完全支持AwT和Swing的编译器。(4)支持/复杂程度:因为这个领域相对较新,所以诊断工具可能在基础上有点薄弱。因此要诊断本机编译产生的Java应用程序中发生的问题可能更困难(尤其当Java类文件版本中没有发生该错误时)。因此,本地编译技术能保护客户机应用程序中比较简单的应用程序,对于复杂的应用程序还支持得不够,对于B/S结构的应用程序还不支持『111。尽管本机编译技术已经有一段时间了,但是它还比较稚嫩,并且缺少明确的结果,但它却是Java语言中一个激动人心的新领域。事实已经证明,对于某些应用程序和环境,它是正确的解决方案[121。2.2.代码隔离技术代码隔离技术就是让用户访问不到类文件,如将类文件放在远程的服务器端,客户端通过访问服务器的相关接口来获得服务。这种方法使得黑客无法获得类文件,从而无法进行发编译。而且这种服务接口可以提高系统的可移植性和互操作性,大大降低软件的开发成本。现在通过接口提供服务的标准和协议也越来越多,如HTTP,RPC,WebService等。把类文件放在远程的服务端,这种模式就是现在流行的Java服务器应用程序,也称为Web应用程序。应用程序模式的发展不但是为了适应各种计算的需要,从另外~个方面看也起到了保护客户机应用程序的Java类文件的作用。有关Web应用程序的Java类文件的保护方法,在接下来的几个章节会有详细的叙述。代码隔离的方法能很好的起到保护Java类文件的作用。但是这种方式也有它的局限性和不安全性。首先这种方式只能适合网络环境的客户/服务器结构或者分布式的环境,对客户机运行的应用程序就显得无能为力了。其次,为了保障服务断的安全,需要使用安全机制保护服务器开放的接口的使用,服务器的安全成了整个系统安全的焦点。一旦服务器被攻破,Java类文件就很容易被窃取之后,接下来的反编译工作是非常容易,因此后果不堪设想。2.3.代码混淆技术代码混淆技术是目前比较成熟和流行的Java类文件保护方法[4]。它的原理Java娄文件保护的研究及其实现浙江火学硕上学位论文就是把类文什重新进行组织,使别人无法轻易的读懂反编译出来的代码,但是处理以后的类文件功能和处理以前的类文件功能在逻辑上是等同的,即运行后能够得到一样的输出结果。自从第一款Java的反编译器出现以后,代码的混淆技术和理论也得到了很大的发展。现在有多款比较流行的混淆器产品,比如JODE,jmangle,Jsrink等『151,Sun公司自己也有一款混淆器产品JADE,这款软件的评估版可以从Sun的网站免费获得。下面是一个使用JADE进行混淆操作的例子。j筹麓燮戆掣||垂鬻繁;i+?lll蒸萋;;l{2《;ii;}蒸l,莉躐麟爹。谢黼嘲黧鳓黼蓦||||{:一i=i{};}¨萋瓣囊¨1j_≤ii…i薯誊蓦誊?ij㈡privateString0000000。o。。。000000000=nHello勇W。o“rld!t’;}:{}l善一羞_≯一蔓。。≯j10ublicstaticvoidmain(String}|args)}000000000000000000000000000000000000000000I;o00000000000000000000Java类文件保护的埘f究及其实现浙江大学硕上学位论文同时又没有改变程序的逻辑,程序的运行结果没有发生变化。人们很难读懂这段组合的替换还必须满足程序的基本要求,即函数和变量名必须以字母开始,所以对上面已经混淆的代码再一次进行混淆[36】,由于jmangle并不知道是否是混淆灞蔷瀵满鞴蘩鬻瓣鬻iiiii}|。辫}j|+ii篓i誉蒸ii篆攀篱_____萎iiiii^:囊攀阏jman臻gile囊Y,;蘩:]-Ji∽冀.{.E冀壤攀蘩黧蒸橐零鬻囊藜冀劳愿囊瑟蟹:。j誊囊曩;=;j薹菱褰;|;;;i二i一曩蠹。:ip叠『{哥曩|;;¨j量蠹叠誊t∥ij露撩{;{;|量量誊蓦、蓦i囊霉篓黪嘲i一誊童誊“|;_Ⅲ誊童誊;誊j…叠ji:∞誉誊董_∥量蛩。一囊j曩萎;{{誊曩羞{;||{÷-i蔓。privateStHngjm3=”Hello诵蕊纛董。“兰一_毒誊曩publici※stat]cvoidmai瓤String[]船g时%_:…0000000000000000000000000000000000000000000;ooOO00000000000000006