zoukankan      html  css  js  c++  java
  • 使用Proguard扰乱器保护Java代码

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

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

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

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

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

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

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

    Xml代码  收藏代码
    1. -injars       xxx.jar  
    2. -outjars      xxx_out.jar  
    3. -libraryjars  /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar:  
    4. /Users/xxx/xxxxx/xxxx/lib  
    5.   
    6. -optimizationpasses 3  
    7. -overloadaggressively  
    8. -repackageclasses ''  
    9. -allowaccessmodification  
    10.   
    11. -keep public class xxx.xxxx.xx.Server {  
    12.     public static void main(java.lang.String[]);  
    13. }  

     -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, 这样运行起来就比较方便了。

    Xml代码  收藏代码
    1. <target name="proguard" depends="jar">  
    2. <taskdef resource="proguard/ant/task.properties"  classpath="/Users/xxx/tools/proguard/lib/proguard.jar" />  
    3. <proguard>  
    4. -injars       xxx.jar  
    5. -outjars      xxx_out.jar  
    6. -libraryjars  /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Classes/classes.jar:  
    7. /Users/xxx/xxxxx/xxxx/lib  
    8.   
    9. -optimizationpasses 3  
    10. -overloadaggressively  
    11. -repackageclasses ''  
    12. -allowaccessmodification  
    13.   
    14. -keep public class xxx.xxxx.xx.Server {  
    15.     public static void main(java.lang.String[]);  
    16. }  
    17. </proguard>  
    18. </target>  

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

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

  • 相关阅读:
    android studio 提示翻译
    mysql-You can’t specify target table for update in FROM clause错误
    echarts-案例
    maven-过滤不打入包的文件
    neo4j关闭和开启密码访问权限
    linux-crontab定时任务
    neo4j-备份、恢复
    windows和linux执行class
    mvn-打jar运行包(含环境变量配置)
    mysql-netstat
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318142.html
Copyright © 2011-2022 走看看