`
poyexinghun
  • 浏览: 37578 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Proguard 简述

    博客分类:
  • Java
阅读更多

前一段时间PM让我搞代码混淆,开始我一头雾水,不清楚是搞什么的。(代码混淆就是对编译的class文件中的一些处理,也就是防止class文件反编译后产生可读性很强的源文件)。

 

接到任务后到网上狂找这方面的东东,有以下工具(jocky,proguard,retroguard......)

 

我只使用了两种jocky和proguard,主要说一下proguad。下面是我翻译的proguard的帮助文档。本人E文不是很好,如果有不解的地方可以参考一下原帮助文档。

 

 

ProGuard是一个免费的java类文件压缩,优化,混淆器.它探测并删除没有使用的类,字段,方法和属性.它删除没有用的说明并使用字节码得到最大优化.它使用无意义的名字来重命名类,字段和方法.
 
ProGuard的使用是为了:
 
1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用.
2.创建的程序和程序库很难使用反向工程.
3.所以它能删除来自源文件中的没有调用的代码
4.充分利用java6的快速加载的优点来提前检测和返回java6中存在的类文件.
 
参数:
 
-include {filename}    从给定的文件中读取配置参数
 
-basedirectory {directoryname}    指定基础目录为以后相对的档案名称
 
-injars {class_path}    指定要处理的应用程序jar,war,ear和目录
 
-outjars {class_path}    指定处理完后要输出的jar,war,ear和目录的名称
 
-libraryjars {classpath}    指定要处理的应用程序jar,war,ear和目录所需要的程序库文件
 
-dontskipnonpubliclibraryclasses    指定不去忽略非公共的库类。
 
-dontskipnonpubliclibraryclassmembers    指定不去忽略包可见的库类的成员。
 
 
保留选项
-keep {Modifier} {class_specification}    保护指定的类文件和类的成员
 
-keepclassmembers {modifier} {class_specification}    保护指定类的成员,如果此类受到保护他们会保护的更好
 
-keepclasseswithmembers {class_specification}    保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。
 
-keepnames {class_specification}    保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)
 
-keepclassmembernames {class_specification}    保护指定的类的成员的名称(如果他们不会压缩步骤中删除)
 
-keepclasseswithmembernames {class_specification}    保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)
 
-printseeds {filename}    列出类和类的成员-keep选项的清单,标准输出到给定的文件
 
压缩
-dontshrink    不压缩输入的类文件
 
-printusage {filename}
 
-whyareyoukeeping {class_specification}    
 
优化
-dontoptimize    不优化输入的类文件
 
-assumenosideeffects {class_specification}    优化时假设指定的方法,没有任何副作用
 
-allowaccessmodification    优化时允许访问并修改有修饰符的类和类的成员
 
混淆
-dontobfuscate    不混淆输入的类文件
 
-printmapping {filename}
 
-applymapping {filename}    重用映射增加混淆
 
-obfuscationdictionary {filename}    使用给定文件中的关键字作为要混淆方法的名称
 
-overloadaggressively    混淆时应用侵入式重载
 
-useuniqueclassmembernames    确定统一的混淆类的成员名称来增加混淆
 
-flattenpackagehierarchy {package_name}    重新包装所有重命名的包并放在给定的单一包中
 
-repackageclass {package_name}    重新包装所有重命名的类文件中放在给定的单一包中
 
-dontusemixedcaseclassnames    混淆时不会产生形形色色的类名
 
-keepattributes {attribute_name,...}    保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses.
 
-renamesourcefileattribute {string}    设置源文件中给定的字符串常量

 

 

因为我们开发的是webwork+spring+hibernate的架构的项目,所有需要很详细的配置。(经过n次失败后总结)

 

Example:

    -injars <project>.jar

    -outjars <project>_out.jar

 

    -libraryjars <java.home>/lib/rt.jar

    -libraryjars <project.home>/webroot/WEB-INF/lib/webwork.jar

    .......

 

    # 保留实现Action接口类中的公有的,友好的,私有的属性 和 公有的,友好的方法。其它的全部压缩,优化,混淆。

    # 因为配置文件中的类名是一个完整的类名,如果经过处理后就有可能找不到这个类。

    # 属性是jsp页面所需要的,如果经过处理jsp页面就无法得到action中的数据。

    -keep public class * implements com.opensymphony.xwork.Action{

        public protected private <fields>;

        public protected <methods>;

    }

 

    # 保留实现了Serializable接口类中的公有的,友好的,私有的成员(属性和方法)

    # 这个配置主要是对应实体类的配置。

    -keep public class * implements java.io.Serializable{

        public protected private *;

    }

 

    ......

 

   # 关于配置的解释已说了很多了,下面的配置自已可以尝试。

 

然后在命行端输入:proguard @配置文件

 

(proguard是我自已写的批处理,你也可以自已写一下。)

 

 

总结:

    proguard在处理web application方面还行,但不是很完美。如果的框架设计的不是很好的话配置加多不说,处理效果也是很好。

 

在简单说一个jocky,它在处理桌面的程序应该时较完美的。如果处理应用了spring框架的程序我想是不可能的。

 

 

如果有错的方面还请各位指出。有好的想法也可以交流。

分享到:
评论
7 楼 milk_36 2014-01-05  
火星?是你的博客?
6 楼 xiaofengtoo 2009-08-14  

-printmapping proguard.map
-overloadaggressively
-defaultpackage ''
-allowaccessmodification
-dontoptimize
-keepattributes Signature,*Annotation*
-keep public class *
{
public public *;
}
就是不混淆我的方法体 只有混淆里面的变量。。。。。。。。。。。
5 楼 xiaofengtoo 2009-08-14  
我现在很郁闷
4 楼 xiaofengtoo 2009-08-14  
还是有必要的!!! 不知道楼主 可否贴下配置文件 ????
3 楼 RCFans 2009-06-02  
就是模糊处理啊,现在貌似没什么用处了。
2 楼 youyang 2009-06-01  
我也想看一下出配置文件的内容,搞了好几次都没搞好。
1 楼 gxchan 2009-04-08  
你好,可以贴出配置文件的内容吗?

相关推荐

    proguard-proguard6.2.2.zip

    1.支持ant 使用proguard标签 2.支持windows环境混淆代码 3.支持Java8+ 新版本6x系列不再提供编译好的jar包 需要自己手动编译,7系列使用的gradle编译管理 国内不太好用,6x系列基本满足Java8+ 的代码混淆,具体可以...

    proguard最新版本proguard6.0.13

    proguard6.0.13最新版本的资源。proguard6.0.13最新版本的资源。

    Eclipse+ProGuard配置

    Eclipse+ProGuard配置 Eclipse+ProGuard配置

    proguard-7.4.0,适合JDK21及以下,官网正版

    ProGuard 7.4.0版本: 这个ZIP文件包含了ProGuard版本7.4.0的所有必要文件和配置。 下载和使用方法: 下载ZIP文件: 点击下载按钮获取proguard-7.4.0.zip文件。确保你选择了适合你操作系统的版本。 解压文件: ...

    proguard 6.2.2魔改版

    proguard 6.2.2的魔改版本用于混淆app、jar、class等,将所有a,b,c等等的字符改成不可见字符,从而提高安全性。里面包括源码和编译好的jar包。编译源码使用core/build.sh,编译好的jar包在lib目录下。android app...

    ProGuard_java_proguard_

    This ProGuard used to obfuscate Java source code.

    proguard-7.2.2.tar.gz

    proguard-7.2.2.tar.gz

    android proguard5.3.3混淆包

    android proguard5.3.3混淆包 替换Jar包以后使 混淆的类名方法名变成空白 使用方法 直接 替换 5.3.3版本的 混淆jar包 Mac 路径为 Contents/gradle/m2repository/net/sf/proguard/proguard-base Win gradle/m2...

    proguard6.1.1.zip 混淆利器

    ProGuard是最受欢迎的Java字节码优化器。它使您的Java和Android应用程序缩小了90%,速度提高了20%。ProGuard还通过模糊类,字段和方法的名称来提供对逆向工程的最小保护。 ProGuard可以免费使用,以处理您的应用...

    proguard混淆打包工具

    proguard混淆打包工具proguard混淆打包工具proguard混淆打包工具

    SpringBoot + proguard+maven多模块实现代码混淆

    springboot多maven工程结构:proguard-root 是顶级父工程,proguard-modu01、proguard-mudu02是两个业务模块,proguard-server是springboot启动服务类模块,对proguard-modu01、proguard-mudu02两个模块实现proguard...

    Proguard5.2.1 资源 使用教程

    java代码混洗工具 proGuard 最新Proguard5.2.1混淆器,以及ProGuard使用教程

    proguard6.4.rar

    proguard6.4.rar

    解决proguard混淆报错-Proguard5.1

    proguard混淆jar包提示错误:Unknown verification type [*] in stack map frame 解决方案:找到proguard源码中proguard\src\proguard\classfile\ClassConstants.java类,然后修改ATTR_StackMapTable的值,将原来的...

    Java代码混淆工具 Proguard4.10(官方免费下载)

    proguard4.10 官方版软件,免费下载 1、官网地址:http://proguard.sourceforge.net/ 截止2013-12-15 官网正式版本为4.10, 提供4.11Beat版 2、 解压 proguard4.10.zip ,运行官方例子如下: cd examples java -...

    proguard6.2.2.zip

    proguard6.2.2(201912月8日版本)最新版,解决java版本太高无法匹配的问题,解压后替换AndriodSDK\sdk\tools\proguard目录即可,亲测可用.注意不支持中文目录

    proguard6.2.2.zip/proguard6.2.2.rar/proguard6.2.2/proguard

    官网工具搬运工,此工具版本为6.2.2

    proguard4.8混淆工具

    proguard4.8混淆工具

    Proguard4.2.zip(java编码混淆器)

    Proguard4.2.zip(java编码混淆器) doc是4.0的doc jar包是1.4.2 &lt;br&gt; ProGuard, Java class file shrinker, optimizer, and obfuscator ===========================================================...

    Proguard下载|Proguard 5.3.1 官方最新版

    ProGuard是一款免费的Java类文件的压缩、优化、混肴器。它删除没有用的类,字段,方法与属性。使字节码最大程度地优化,使用简短且无意义的名字来重命名类、字段和方法,截至2016-11-28号,5.3.1是最新版本 新的...

Global site tag (gtag.js) - Google Analytics