ProGuard对java jar包实现混淆加密

        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文档,配置文件可以参考文档来对自己混淆的需求来写配置文件)。

-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源码进行源码加密,后面的博客再细细介绍。


发布了14 篇原创文章 · 获赞 4 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览