在java代码中往往包含着一
些非常敏感的信息Q有些关pd开发者的利益Q有些可能因Z用环境不同而关pd软g用户的利益,于是QjavaE序是赤膊上阵还是全副武装这个现实问题就
摆在了java开发h员的面前Q所以在q种情况下,从开发商和用户两斚w角度考虑Q都非常有必要对javaE序q行保护。以下从技术角度就常见的保护措?
和常用工h看看如何有效保护java代码Q?/p>
- java包装成exe
特点Q将jar包装成可执行文gQ便于用,但对javaE序没有M保护?br />
不要以ؓ生成了exe和普通可执行文g效果一样了。这些包装成exe的程序运行时都会jar文g释放C时目录,很容易获取?br />
常用的工hexe4j、jsmooth、NativeJ{等。jsmooth生成的exeq行时时目录在exe所在目录中或是用户临时目录
中;exe4j生成的exeq行时时目录在用户临时目录中;NativeJ生成的exe直接用winrar打开Q然后用zip格式修复成一个jar?
Ӟ得C原文件。如果只是ؓ了用和发布方便Q不需要保护java代码Q用这些工h很好的选择?br />
- javah?br />
特点Q用一U或多种处理方式class文g、java源代码进行淆处理后生成新的classQh后的代码不易被反~译Q而反~译后的代码难以?
d理解?br />
q类h器工具很多,而且也很有成效?br />
~点Q虽然淆的代码反编译后不易LQ但对于有经验的人或是多׃旉Q还是能扑ֈ或计出你代码中隐藏的敏感内容,而且在很多应用中不是全部代码都能
h的,往往一些关键的库、类名、方法名、变量名{因使用要求的限制反而还不能h?br />
- 隔离javaE序到服务端
特点Q把javaE序攑ֈ服务端,让用户不能访问到class文g和相关配套文Ӟ客户端只通过接口讉K?br />
q种方式在客?服务模式的应用中能较好地保护java代码?br />
~点是:必须是客?服务模式Q这U特炚w制了此种方式的用范_客户端因为逻辑的暴露始l是较ؓ薄弱的环节,所以访问接口时一般都需要安全性认证?br />
- java加密保护
特点Q自定义ClassLoaderQ将class文g和相x件加密,q行时由此ClassLoader解密相关文gq装载类Q要起到保护作用必须自定
义本C码执行器自定义ClassLoader和加密解密的相关cd配套文g也保护v来?br />
此种方式能很有效C护java代码?br />
~点Q可以通过替换JRE包中与类装蝲相关的javacL虚拟机动态库截获java字节码?br />
jar2exe属于q类工具?br />
- 提前~译技?AOT)
特点Q将java代码静态编译成本地机器码,q通用JRE?br />
此种方式能够非常有效C护java代码Q且E序启动比通用JVM快一炏V?br />
h代表性的是GNU的gcjQ可以做到对java代码完全提前~译Q但gcj存在诸多局限性,如:对JRE
5不能完整支持、不支持JRE 6及以后的版本?br />
׃javaq_的复杂性,做到能及时支持最新java版本和JRE的完全提前编译是非常困难的,所以这cd具往往采取灉|方式Q该用即时编译的地方q是
要用Q成为提前编译和x~译的合体?br />
~点Q由于与通用JRE的差异和javaq用中的复杂性,qjavaE序中的所有jar都能得到完全的保护;只能使用此种工具提供的一个运行环境,如果
工具更新滞后或你需要特定版本的JREQ有可能得不到此U工L支持?br />
Excelsior JET属于q类工具?br />
- 使用jni方式保护
特点Q将敏感的方法和数据通过jni方式处理?br />
此种方式?#8220;隔离javaE序到服务端”有些cMQ可以看作把需要保护的代码和数?#8220;隔离”到动态库中,不同的是可以在单机程序中q用?br />
~点和上q?#8220;隔离javaE序到服务端”cM?br />
- 不脱JRE的综合方式保?br />
特点Q非提前~译Q不qJREQ采用多UY保护方式Q从多方面防止javaE序被窃取?br />
此种方式׃采取了多U保护措施,比如自定义执行器和装载器、加密、JNI、安全性检、生成可执行文g{等Q保护力度大大增强Q同栯够非常有效地?
护java代码?br />
~点Q由于jar文g存在方式的改变和javaq用中的复杂性,qjavaE序中的所有jar都能得到完全的保护;很有可能q不支持所有的JRE版本?br />
JXMaker属于此类工具?br />
- 用加密锁g保护
特点Q用与g相关的专用程序将java虚拟机启动程序加壻I虚拟机配套文g和javaE序加密Q启动的是加壳程序,由加壳程序徏立一个与g相关?
受保护的q行环境Qؓ了加强安全性可以和加密锁内植入的程序互动?br />
此种方式与以?#8220;不脱JRE的综合方式保?#8221;怼Q只是用了专用g讑֤Q也能很好地保护java代码?br />
~点Q有为加密锁用户使用上不太方便,且每个安装需要附带一个?/li>
从以上描qC我们可以看出Q?/p>
- 各种保护方式都有其优~点Q应Ҏ(gu)实际选用
- 要更好地保护java代码应该使用l合的保护措?/li>
- 单机环境中要真正有效保护java代码Q必要有本C码程序配?/li>
当然Q安全都是相对的Q一斚w看你的保护措施和使用的工兯辑ֈ的程度,一斚w看黑客的意愿和能力,不能只从技术上保护知识产权。MQ在java
代码保护斚w可以采取各种可能的方式,不可拘惔于那些条条框框?/p>

]]>