使用Proguard扰乱器保护Java代码

      Java代码的安全性一直都是问题,JVM机制导致,Java很容易被反编译。使对方很容易得到你的原程序,即使反编译后有一点区别,但基本不会影响对方获取你的代码,和构思。

 

     最近做项目,程序需要部署到对方服务器,但公司不希望核心代码外泄。但程序又是Java编写的,所以想到了,代码扰乱器,免费的Java扰乱器不是很多。最后找到了proguard,试用了一下,发现还不错。现在简单介绍一下。

 

     proguard现在是sourceforge的项目,官方首页是http://proguard.sourceforge.net/ ,上面有详尽的使用说明。

 

     proguard会将包名,类名,参数名称全部改写,如将Server.java改成A.java。将变量名称等全部改写成没有意义的名称。这样即使反编译后,对方也不能很轻松的获得你的源码,想在上面继续开发基本不太可能,除非话足够长的时间,在无意义的程序上看懂,并将名称全部命名回来。这样话的时间,绝对不会比重写简单。

 

     除非你的程序重要到了,必须花大精力破译的地步,不会有人愿意干这种事情。如果是到了那种地步,即使是汇编,也有人可以反编译出来。

 

     以下简单记录以下使用过程:

          1.直接使用proguard,需要写一个简单配置文件命名为proguard.pro ,如下方所示:

 

-injars       xxx.jar
-outjars      xxx_out.jar
-libraryjars  /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar:
/Users/xxx/xxxxx/xxxx/lib

-optimizationpasses 3
-overloadaggressively
-repackageclasses ''
-allowaccessmodification

-keep public class xxx.xxxx.xx.Server {
    public static void main(java.lang.String[]);
}

 -injars 是需要扰乱的jar包

 -outjars 是输出的jar包

 -libraryjars 指向程序所引用的jar包,其中需要引用JDK的rt.jar(笔者引用的是MacOS上的rt.jar),可以引用目录,中间用“:”分开。

 -keep 是声明Main类,避免该类被重命名。

 

   写完上面的配置文件就可以直接运行

java -jar proguard.jar @proguard.pro

 

    等一回,完成所有操作。就生成了扰乱后的jar包

 

    2.除了直接运行java方式,可以使用ant方式运行proguard, 这样运行起来就比较方便了。

 

<target name="proguard" depends="jar">
<taskdef resource="proguard/ant/task.properties"  classpath="/Users/xxx/tools/proguard/lib/proguard.jar" />
<proguard>
-injars       xxx.jar
-outjars      xxx_out.jar
-libraryjars  /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar:
/Users/xxx/xxxxx/xxxx/lib

-optimizationpasses 3
-overloadaggressively
-repackageclasses ''
-allowaccessmodification

-keep public class xxx.xxxx.xx.Server {
    public static void main(java.lang.String[]);
}
</proguard>
</target>

将proguard声明为ANT的一个Task,这样直接调用proguard任务,就会生成需要的扰乱后的jar。

 

后记:支持ANT使得Proguard易用性大大提高。根据笔者目前找到的扰乱工具,Proguard应该是最好的免费扰乱工具。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,java开发语言提供了很方便的开发平台,而且开发出来的程序很容易在不同的平台上面进行移植,现在越来越多的人使用它开发软件。 Java有了它方便的一个方面,但是他同时也带给了开发者一个烦恼,这就是保护的办法不多,而且大多数不是很好用,这样自己辛苦开发出来的程序很容易被人反编译过来而据为己有,一般情况下,大多数的人都是用混编java obfuscator)来把开发出来的程序进行打乱以达到没有办法来反编译观看源代码,但是这种办法在网上很容易找到相关的软件来重新整理,那么这个混编只能控制一些本来也没有办法动您的软件的人,而对于一些掌握工具的人几乎是透明的,还有就是利用硬件加密锁,但大多数公司提供的硬件加密锁只是提供了一些dll的连接或简单的api调用,只要反编译他们,就很容易把一些api调用去掉,这样硬件加密锁也就不起作用了,但是现在到底有没有好的办法呢? 市场上现有的几款防止反编译工具其实都是改进了加载过程。但是加载到JAVA虚拟机后一样可以得到CLASS字节码的。 只要懂JAVA原理的人其实很用意破解的. JAVACOMPILE 这款工具就不一样了,javacompile 它是修改了虚拟机内核, 用户目录里没有需要的JAVA字节码,而是当JAVA需要调用函数的时候才通过网络下载相对应的已经二次编译的字节码,就算用户通过 CLASS.getClass 也得不到可以用来反编译字节码。 真正意义上保护JAVA知识产权。 个人版限制编译30个CLASS文件,文件打包方式下载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值