随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

转自:http://blog.csdn.net/xinke0802/article/details/45438749

       Java代码编译后生成的.class 中包含有源代码中的所有信息(不包括注释),所以按照正常方式编译的Java .class文件可以很轻易地被反编译。通常情况下,反编译可以利用现有的工具jd-gui.exe或者jad.exe。

        有些情况下,为了保护java源码不被别人看到,通常会使用加密手段对java源码进行加密,加密的方式可以利用加密工具(比如java代码混淆工具)、使用加密算法(如DES算法)修改classloader对编译好的.class文件进行加密。(注:这里推荐一款java代码混淆器,可以混淆函数变量、类、方法名以实现代码加密:ProGuard

本文使用ProGuard对java代码进行加密:

(1)解压下载的ProGuard,解压后进入lib文件把proguard.jar拷贝到自己新建的文件夹里如图。

(2)把需要混淆的jar和jar所依赖的包也放到新建的文件夹,都放在一起,如下图。

(3)修改配置文件,配置文件名称自己定,例如”proguard.pro”,举个简单配置文件例子(那个proguard.map是之后自动生成的)

内容如下,其中-injars:是你需要混淆的jar,-outjars:是你混淆后输出的jar,-libraryjars:是你混淆的jar需要所依赖的jar包(具体的参数设置可以参考proguard文档,配置文件可以参考文档来对自己混淆的需求来写配置文件)。

[java] view plain copy

  1. -injars       ProGuardDemo_20150502.jar  
  2. -outjars      ProGuardDemo_20150502_fusion.jar  
  3. -libraryjars  C:/Program Files/Java/jdk1.6.0_35/jre/lib/resources.jar  
  4. -libraryjars  C:/Program Files/Java/jdk1.6.0_35/jre/lib/rt.jar  
  5. -libraryjars  C:/Program Files/Java/jdk1.6.0_35/jre/lib/jsse.jar  
  6. -libraryjars  C:/Program Files/Java/jdk1.6.0_35/jre/lib/jce.jar  
  7. -libraryjars  C:/Program Files/Java/jdk1.6.0_35/jre/lib/charsets.jar  
  8. -libraryjars  C:/Program Files/Java/jdk1.6.0_35/jre/lib/ext/dnsns.jar  
  9. -libraryjars  C:/Program Files/Java/jdk1.6.0_35/jre/lib/ext/localedata.jar  
  10. -libraryjars  C:/Program Files/Java/jdk1.6.0_35/jre/lib/ext/sunjce_provider.jar  
  11. -libraryjars  lib/log4j-1.2.17.jar  
  12. -printmapping proguard.map  
  13. -overloadaggressively  
  14. -repackageclasses ''  
  15. -allowaccessmodification  
  16. -keep class com.hiekn.wzh.ProGuardTest{*;}  


(4)保存配置文件保存到你的文件夹下,如下图。

(5)运行,输入cmd,进入你建的文件夹下,如下图。

(6) 输入命令进行jar包混淆,命令为:java -jar proguard.jar @proguard.pro,如下图。

(7) 混淆成功,生成ProGuardDemo_20150502_fusion.jar包,如下图。

(8)混淆器后,利用反编译器jad对jar进行反编译,多了好多a,b,c之类的类文件,对反编译的java文件是很难编译的,即说明混淆成功。

最后,总结一下,虽然使用ProGuard对jar包混淆成功,但是使用jad进行反编译后,依然还是可以看到源码,所以我们应该考虑使用加密算法对java源码进行源码加密,后面的博客再细细介绍。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐