前一段时间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框架的程序我想是不可能的。
如果有错的方面还请各位指出。有好的想法也可以交流。
分享到:
相关推荐
在标题和描述中提到的"proguard6.2.2.zip/proguard6.2.2.rar/proguard6.2.2/proguard"指的是ProGuard的一个特定版本,即6.2.2版。这个版本包含了ProGuard的完整工具集,供开发者在项目中使用。 在`LICENSE.md`和`...
**ProGuard支持JDK 1.8:深入理解与应用** 在Android开发中,为了提高应用程序的安全性和优化代码,我们通常会使用代码混淆工具。ProGuard是一款强大的Java字节码混淆、优化、压缩和预检查工具,它能够帮助开发者...
ProGuard 是一款强大的Java字节码混淆、优化、压缩和预校验工具,常用于Android应用开发中的代码保护。在Android开发中,为了保护应用程序的源代码不被轻易反编译,开发者通常会使用ProGuard来混淆代码,使得反编译...
ProGuard是一款广泛使用的Java代码混淆、优化和压缩工具,它能有效地减小应用程序的体积,提高安全性,并且在Android开发中扮演着至关重要的角色。在介绍ProGuard 6.0.13这个最新版本之前,我们先来了解一下ProGuard...
Eclipse+ProGuard配置 Eclipse 是一个基于 Java 的集成开发环境(IDE),ProGuard 是一个 Java 类库和应用程序的保护和优化工具。通过结合使用 Eclipse 和 ProGuard,可以对 Java 应用程序进行混淆、压缩和优化,...
**ProGuard**是一款广泛使用的Java代码混淆、优化和压缩工具,尤其在Android开发中扮演着重要角色。它的主要目的是为了保护应用程序(APK)的源代码,减少代码大小,提高运行效率,并降低逆向工程的可能性。 **一、...
ProGuard 7.3.0 是一款强大的Java代码优化、混淆和压缩工具,适用于各种Java应用程序,包括Android应用。此版本是ProGuard的最新更新,旨在解决从GitHub下载速度缓慢的问题,确保用户能够快速便捷地获取和使用该工具...
**ProGuard工具包详解——Java代码混淆** 在Java开发中,为了提高应用程序的安全性和保护知识产权,开发者常常会使用一种称为“代码混淆”的技术。ProGuard是Android和Java平台上的一个强大的开源工具,它能实现...
**ProGuard:Java代码混淆与优化工具** ProGuard 是一个强大的免费开源工具,主要用于Java程序的优化、混淆、预校验以及资源收缩。这个工具在软件发布时尤其有用,可以提高代码的安全性和难以逆向工程的程度,同时...
proguard4.10 官方版软件,免费下载 1、官网地址:http://proguard.sourceforge.net/ 截止2013-12-15 官网正式版本为4.10, 提供4.11Beat版 2、 解压 proguard4.10.zip ,运行官方例子如下: cd examples java -...
springboot多maven工程结构:proguard-root 是顶级父工程,proguard-modu01、proguard-mudu02是两个业务模块,proguard-server是springboot启动服务类模块,对proguard-modu01、proguard-mudu02两个模块实现proguard...
**ProGuard 7.0.1 - 代码混淆详解** ProGuard 是一款强大的Java字节码混淆、优化、预校验和分析工具,主要用于减少Java和Android应用的大小,提高安全性和性能。在最新的7.0.1版本中,ProGuard 继续提供这些关键...
Eclipse配置ProGuard代码混淆器 一、前言 ProGuard是一款功能强大且广泛应用的Java代码混淆器,可以保护Java应用程序免受反编译和逆向工程的攻击。在Eclipse开发环境中,ProGuard可以作为插件集成,实现对Java项目...
**ProGuard 4.8** 是一款强大的Java代码混淆、优化和压缩工具,它能够显著增强应用程序的安全性,防止未经授权的访问和逆向工程。在Java和Android开发中,ProGuard是一个常用的安全措施,用于保护代码不被轻易反编译...
ProGuard是一款广泛使用的Java字节码混淆、优化、压缩和预校验工具,适用于Android开发以及其他Java应用。在本文中,我们将深入探讨ProGuard 6.4版本的主要特性和使用方法。 首先,让我们理解ProGuard的基本功能。...
ProGuard 7.4.0版本: 这个ZIP文件包含了ProGuard版本7.4.0的所有必要文件和配置。 下载和使用方法: 下载ZIP文件: 点击下载按钮获取proguard-7.4.0.zip文件。确保你选择了适合你操作系统的版本。 解压文件: ...
ProGuard是一款广泛使用的Java代码混淆、优化和压缩工具,其版本6.2.2是它的一个重要里程碑。这款工具在Java开发领域具有重要的地位,尤其是对于Android开发者来说,它是进行应用发布前处理的标准配置,因为它可以...
proguard混淆jar包提示错误:Unknown verification type [*] in stack map frame 解决方案:找到proguard源码中proguard\src\proguard\classfile\ClassConstants.java类,然后修改ATTR_StackMapTable的值,将原来的...
在Android应用开发中,为了保护代码安全和优化应用性能,我们常常会使用Proguard工具进行代码混淆、优化和压缩。本文将深入探讨如何修改Proguard混淆规则,以及如何自定义字符集,以满足特定需求。 Proguard是...