ProGuard对java jar包实现混淆加密
2017年05月31日 14:02:11 源代码社区 阅读数:5649
随时随地阅读更多技术实战干货,充分利用闲暇时间,请关注源代码社区公众号和技术交流群。
转自: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
- -injars ProGuardDemo_20150502.jar
- -outjars ProGuardDemo_20150502_fusion.jar
- -libraryjars C:/Program Files/Java/jdk1.6.0_35/jre/lib/resources.jar
- -libraryjars C:/Program Files/Java/jdk1.6.0_35/jre/lib/rt.jar
- -libraryjars C:/Program Files/Java/jdk1.6.0_35/jre/lib/jsse.jar
- -libraryjars C:/Program Files/Java/jdk1.6.0_35/jre/lib/jce.jar
- -libraryjars C:/Program Files/Java/jdk1.6.0_35/jre/lib/charsets.jar
- -libraryjars C:/Program Files/Java/jdk1.6.0_35/jre/lib/ext/dnsns.jar
- -libraryjars C:/Program Files/Java/jdk1.6.0_35/jre/lib/ext/localedata.jar
- -libraryjars C:/Program Files/Java/jdk1.6.0_35/jre/lib/ext/sunjce_provider.jar
- -libraryjars lib/log4j-1.2.17.jar
- -printmapping proguard.map
- -overloadaggressively
- -repackageclasses ''
- -allowaccessmodification
- -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源码进行源码加密,后面的博客再细细介绍。