`
poyexinghun
  • 浏览: 38054 次
  • 性别: 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  
你好,可以贴出配置文件的内容吗?

相关推荐

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

    在标题和描述中提到的"proguard6.2.2.zip/proguard6.2.2.rar/proguard6.2.2/proguard"指的是ProGuard的一个特定版本,即6.2.2版。这个版本包含了ProGuard的完整工具集,供开发者在项目中使用。 在`LICENSE.md`和`...

    proguard支持JDK 1.8

    **ProGuard支持JDK 1.8:深入理解与应用** 在Android开发中,为了提高应用程序的安全性和优化代码,我们通常会使用代码混淆工具。ProGuard是一款强大的Java字节码混淆、优化、压缩和预检查工具,它能够帮助开发者...

    proguard最新版本proguard6.0.13

    ProGuard是一款广泛使用的Java代码混淆、优化和压缩工具,它能有效地减小应用程序的体积,提高安全性,并且在Android开发中扮演着至关重要的角色。在介绍ProGuard 6.0.13这个最新版本之前,我们先来了解一下ProGuard...

    proguard-7.2.2.tar.gz

    **ProGuard**是一款广泛使用的Java代码混淆、优化和压缩工具,尤其在Android开发中扮演着重要角色。它的主要目的是为了保护应用程序(APK)的源代码,减少代码大小,提高运行效率,并降低逆向工程的可能性。 **一、...

    proguard7.3.0

    ProGuard 7.3.0 是一款强大的Java代码优化、混淆和压缩工具,适用于各种Java应用程序,包括Android应用。此版本是ProGuard的最新更新,旨在解决从GitHub下载速度缓慢的问题,确保用户能够快速便捷地获取和使用该工具...

    ProGuard_java_proguard_

    **ProGuard:Java代码混淆与优化工具** ProGuard 是一个强大的免费开源工具,主要用于Java程序的优化、混淆、预校验以及资源收缩。这个工具在软件发布时尤其有用,可以提高代码的安全性和难以逆向工程的程度,同时...

    proguard6.2.2.rar

    ProGuard 是一款强大的Java字节码混淆、优化和压缩工具,尤其在Android开发中被广泛使用,用于保护应用程序代码安全,防止反编译。在6.2.2这个版本中,它提供了对高版本字节码文件的支持,使得开发者能够处理最新的...

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

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

    Eclipse+ProGuard配置

    Eclipse+ProGuard配置 Eclipse 是一个基于 Java 的集成开发环境(IDE),ProGuard 是一个 Java 类库和应用程序的保护和优化工具。通过结合使用 Eclipse 和 ProGuard,可以对 Java 应用程序进行混淆、压缩和优化,...

    ProGuard4.8使用proguard来保护我们的代码

    **ProGuard 4.8** 是一款强大的Java代码混淆、优化和压缩工具,它能够显著增强应用程序的安全性,防止未经授权的访问和逆向工程。在Java和Android开发中,ProGuard是一个常用的安全措施,用于保护代码不被轻易反编译...

    proguard6.4.rar

    ProGuard是一款广泛使用的Java字节码混淆、优化、压缩和预校验工具,适用于Android开发以及其他Java应用。在本文中,我们将深入探讨ProGuard 6.4版本的主要特性和使用方法。 首先,让我们理解ProGuard的基本功能。...

    Eclipse配置ProGuard

    Eclipse配置ProGuard代码混淆器 一、前言 ProGuard是一款功能强大且广泛应用的Java代码混淆器,可以保护Java应用程序免受反编译和逆向工程的攻击。在Eclipse开发环境中,ProGuard可以作为插件集成,实现对Java项目...

    proguard6.2.2_java_proguard6.2.2_

    ProGuard是一款广泛使用的Java代码混淆、优化和压缩工具,其版本6.2.2是它的一个重要里程碑。这款工具在Java开发领域具有重要的地位,尤其是对于Android开发者来说,它是进行应用发布前处理的标准配置,因为它可以...

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

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

    解决proguard混淆报错-Proguard5.1

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

    修改Proguard混淆规则,自定义字符集

    在Android应用开发中,为了保护代码安全和优化应用性能,我们常常会使用Proguard工具进行代码混淆、优化和压缩。本文将深入探讨如何修改Proguard混淆规则,以及如何自定义字符集,以满足特定需求。 Proguard是...

    Proguard5.2.1 资源 使用教程

    **ProGuard5.2.1资源使用教程** 在Java开发中,为了保护代码不被轻易反编译和理解,开发者通常会使用代码混淆工具。ProGuard是一款强大的Java字节码混淆、优化、压缩和预检查工具,它能够帮助开发者将应用代码转化...

    proguard 6.2.2魔改版

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

    proguard4.11 混淆工具

    ProGuard是一款广泛使用的Java字节码混淆、优化和压缩工具,尤其在Android开发中起着至关重要的作用。它能够帮助开发者保护应用程序代码,减少代码体积,提高应用性能,并且为发布版本提供更好的安全性。 混淆是...

    proguard4.8混淆工具

    ProGuard是一款广泛使用的Java字节码混淆、优化、压缩和预检查工具,主要应用于Android开发领域,用于保护应用程序代码安全,减小APK体积,并提高运行效率。在Android开发过程中,ProGuard是默认集成在构建流程中的...

Global site tag (gtag.js) - Google Analytics