`

开源混淆工具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}    设置源文件中给定的字符串常量


Ant Example:

<!-- This Ant build file illustrates how to process applications,
     by including ProGuard-style configuration options.
     Usage: ant -f applications2.xml -->

<project name="Applications" default="obfuscate" basedir="../..">

<target name="obfuscate">
  <taskdef resource="proguard/ant/task.properties"
           classpath="lib/proguard.jar" />

  <proguard>

    <!-- Specify the input jars, output jars, and library jars. -->

    -injars  in.jar
    -outjars out.jar

    -libraryjars ${java.home}/lib/rt.jar
    <!-- -libraryjars junit.jar    -->
    <!-- -libraryjars servlet.jar  -->
    <!-- -libraryjars jai_core.jar -->
    <!-- ...                       -->

    <!-- Save the obfuscation mapping to a file, and preserve line numbers. -->

    -printmapping out.map
    -renamesourcefileattribute SourceFile
    -keepattributes SourceFile,LineNumberTable

    <!-- Preserve all annotations. -->

    -keepattributes *Annotation*

    <!-- Preserve all public applications. -->

    -keepclasseswithmembers public class * {
        public static void main(java.lang.String[]);
    }

    <!-- Preserve all native method names and the names of their classes. -->

    -keepclasseswithmembernames class * {
        native &lt;methods&gt;;
    }

    <!-- Preserve the methods that are required in all enumeration classes. -->

    -keepclassmembers class * extends java.lang.Enum {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }

    <!-- Explicitly preserve all serialization members. The Serializable
         interface is only a marker interface, so it wouldn't save them.
         You can comment this out if your library doesn't use serialization.
         If your code contains serializable classes that have to be backward
         compatible, please refer to the manual. -->

    -keepclassmembers class * implements java.io.Serializable {
        static final long serialVersionUID;
        static final java.io.ObjectStreamField[] serialPersistentFields;
        private void writeObject(java.io.ObjectOutputStream);
        private void readObject(java.io.ObjectInputStream);
        java.lang.Object writeReplace();
        java.lang.Object readResolve();
    }

    <!-- Your application may contain more items that need to be preserved;
         typically classes that are dynamically created using Class.forName -->

  </proguard>
</target>

</project>

分享到:
评论

相关推荐

    java 混淆工具proguard5.3.3

    Java混淆工具ProGuard是Java开发中的一个重要组件,主要用于保护应用程序的源代码,防止逆向工程分析,同时也可优化代码,减小程序体积。在Android开发中,它被广泛应用于APK的发布过程,确保代码安全并提高运行效率...

    Eclipse+ProGuard配置

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

    最好用的JAVA代码混淆工具proguard-7.0.0.zip

    Java代码混淆工具ProGuard是Java开发者在发布应用时常常使用的一种工具,它的主要目的是保护代码知识产权,防止未经授权的反编译和抄袭。在本压缩包文件"proguard-7.0.0.zip"中,包含了ProGuard的最新版本7.0.0,这...

    java代码混淆工具proguard及教程讲解

    java代码混淆工具 简单使用docx 字典文件 生成的配置示例

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

    6、proguard混淆首先得根据自己工程具体情况 来决定,哪些类需要混淆,哪些 类不能混淆,对包名、类名、方法名、参数名、变量名等其它信息 如何处理 可以通过参数 配置。 7、别忘记加上参数 printmapping obf.map...

    java代码混淆器proGuard

    Java代码混淆器ProGuard是Java开发中用于保护和优化应用程序的重要工具。它的主要功能是对Java字节码进行混淆,使得代码难以被逆向工程解析,从而提高代码的安全性。混淆过程中,函数变量、类和方法名会被重命名为...

    最新的加密混淆工具proguard6.0.3

    **ProGuard**是一款广泛使用的Java代码混淆、优化和压缩工具,尤其在Android开发中起着至关重要的作用。它能够帮助开发者保护应用程序的源代码,防止反编译和篡改,同时也能减小程序体积,提高运行效率。ProGuard ...

    ProGuard工具包,Java代码混淆

    **ProGuard工具包详解——Java代码混淆** 在Java开发中,为了提高应用程序的安全性和保护知识产权,开发者常常会使用一种称为“代码混淆”的技术。ProGuard是Android和Java平台上的一个强大的开源工具,它能实现...

    java代码混淆工具proguard5.2

    ProGuard是一款免费的Java类文件压缩器、优化器和混淆器。它能发现并删除无用类、字段(field)、方法和属性值(attribute)。它也能优化字节码并删除无用的指令。最后,它使用简单无意义的名字来重命名你的类名、...

    Java代码混淆工具(proguard4.5.1)

    Java代码混淆工具ProGuard是Java开发中用于保护和优化应用程序的重要工具。它的主要功能是对Java字节码进行混淆、优化、缩小和预校验,从而提高应用的安全性和性能。ProGuard 4.5.1是该工具的一个版本,发布于2010年...

    proguard混淆打包工具

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

    java 源码加密 混淆 proguard 配置文件

    java 源码加密 混淆,proguard 配置文件,很详细,经测试可以用

    开发J2ME程序的混淆器proguard3.4

    **开发J2ME程序的混淆器ProGuard 3.4详解** 在移动应用程序开发领域,J2ME(Java 2 Micro Edition)曾是为小型设备如手机开发软件的主流平台。然而,随着技术的发展,安全问题变得越来越重要,尤其是对于开源的Java...

    Java代码混淆工具proguard

    经典的Java代码混淆工具,可以混淆class,jar类型的文件,防止被反编译,对需要进行源码保护的代码很有用。

    Android Java代码混淆工具:ProGuard简介及使用.docx

    ### Android Java代码混淆工具:ProGuard的深度解析与实践 #### 概述 在软件开发领域,代码混淆是一项重要的安全措施,特别是在移动应用开发中,它能够保护源代码不被轻易逆向工程,从而增强应用的安全性。在...

    最新混淆工具proguard

    最新混淆工具,支持springboot jdk18 ,内有示例及ant,可以打包生成jar包后直接生成加密包

    java代码混淆工具proguard

    很好用的一个代码混淆工具,混淆后可以防止被反编译。很容易用。

    最新混淆包proguard6.0.3

    最新混淆包proguard6.0.3

    代码混淆工具-proguard7.2.2

    代码混淆工具ProGuard是Java平台上的一个强大工具,主要用于优化、缩小和混淆Java字节码。在Android开发中,它通常被用来保护应用程序的源代码,防止未经授权的反编译和逆向工程。ProGuard 7.2.2是该工具的一个版本...

    代码混淆工具proguard4.2.rar

    代码混淆攻击 可集成于ECLIPSE 使用非常方便 J2ME程序经常要用到混淆

Global site tag (gtag.js) - Google Analytics