首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Android 安全】DEX 加密 ( Proguard keep 用法 | Proguard 默认混淆结果 | 保留类及成员混淆结果 | 保留注解以及被注解修饰的类成员方法 )

文章目录 一、Proguard 默认混淆结果 二、Proguard 保留类及成员混淆结果 三、Proguard 保留注解以及被注解修饰的类/成员/方法 更多 ProGuard 混淆配置参考 : https...人为添加保留任何设置 , 使用的是 默认混淆文件 , 除了 MainActivity , 以及 MainActivity 中的 3 个内部类 , IdleHandler , Handler , Thread..., 其余 Java 文件都被混淆 ; 二、Proguard 保留类及成员混淆结果 ---- 在 应用 Module 下的 proguard-rules.pro 中进行如下配置 : # 保留 MainActivity...{ *; } 由下图可以看出 , 成员变量 , 成员方法 的名称都保存下来了 ; 三、Proguard 保留注解以及被注解修饰的类/成员/方法 ---- 创建注解 : package kim.hsl.handler...; public @interface Keep { } ProGuard 中配置 保留该注解 , 以及 被该注解修饰的类 ; # 保留 Main 类及成员 -keep public class kim.hsl.handler.Main

1.9K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ProGuard 在 Android 上的使用姿势

    当一些类和方法会被动态访问到时(如使用反射),在某些情况下,ProGuard 在构建调用图时不能正确的决定他们的「生死」,导致这些代码被错误的移除掉。...当您只从 XML 资源引用您的代码会时(通常使用底层的反射),这个情况也会发生。 在一次 Android 典型的构建过程中,AAPT(处理资源的工具)会生成一个额外的 ProGuard 规则文件。...这会在下面的场景中发生: 当 ProGuard 移除过多的类 在某些情况下,ProGuard 并不知道一个类或者方法被使用了,例如这个类仅在反射时被使用或者仅在 XML 中被引用。...您有很多选项来配置您的 ProGuard: **keep **— 保留所有匹配的类和方法 **keepclassmembers **— 当且仅当它们的类因为其他的原因被保留时(被其他调用点引用到或者被其他的规则...当 ProGuard 移除过少的类 所有应用都可以使用 Android 内置的 ProGuard 的一些安全的默认规则,如保留 View 的 getter 和 setter 方法,因为他们通常会被反射来访问

    2.6K40

    Android中的Proguard介绍

    ProGuard会把处理的结果写到一个或者多个Jar包中。如果输入的文件包含了资源文件,那么它们的名字和内容都会被obfuscated类名所影响。...ProGaurd使用它们来重建正确处理所需的类依赖关系,Library它们本身会保持不变,你可以把他们放到最终应用的Class Path中。...在整个过程中,会保持入口函数原有的名字来保证这些函数仍然可以呗访问 Preverification:这一步是唯一一步不需要知道入口的 反射(Reflection) 反射和自检(introspection...例如,Class.forName()可能会在Runtime引用很多的Class。而这种方式的类,我们无法预见哪些类必须使用原始名称来保留,例如Class的名称是从配置文件中读取的。...这种我们需要指定类或者SomeClass接口、实现类应该被保留。 混淆很多反射的代码需要反复测试,尤其是不需要内部构建的代码。

    67730

    Eclipse与Android源码中ProGuard工具的使用

    ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类、字段和函数等,达到压缩、优化和混淆代码的功能。...使用语义混淆的命名替换了代码中的类、字段和函数等,使得其他人无法反编译获取源代码,起到对代码的保护作用。...根据ProGuard的具体使用环境,我分在Eclipse工具和android源码两种编译环境浅谈ProGuard的使用方法。...中的有些方法和类,是要供外部使用的,而此时混淆了名称,外部调用就会报错了,那么怎么解决这个问题?...、ContentProvider、BackupAgentHelper、Preference和ILicensingService的子类,并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数

    1.3K90

    反射-Class类的使用

    JAVA-Reflect 专题 ①Class类的使用 ②方法的反射 ③成员变量的反射 ④构造函数的反射 ⑤java类的加载机制 Ⅰ在面向对象的世界里,万事万物皆为对象 类是对象,类是java.lang.Class...类的实例对象 ⅡClass类的实例对象有三种表示方式 //第一种表达方式(已知类名) //第二种表达方式(已知对象) //第三种表达方式(通过类全称) package com.tsh.reflect;...ClassNotFoundException e) { e.printStackTrace(); } //官网解释:c1和c2表示了Foo类的类类型...(class type) //一个类只可能是Class类的一个对象,因此下面的输出true System.out.println(c1==c2);...//可以通过类的类类型创建该类的实例对象 try { //该类需要有无参数的构造方法 Foo foo2=(Foo) c1.newInstance

    31120

    Android反射机制简单理解,ReflectionUtils  反射工具类

    Android反射机制: 什么是反射机制?...JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制...类:代表一个类,位于java.lang包下 Field类:代表类的成员变量(成员变量也称为类的属性) Method类:代表类的方法 Constructor类:代表类的构造方法 Array类:提供了动态创建数组...java中的Class三种获取方式 利用对象调用getClass()方法获取该对象的Class实例; 使用Class类的静态方法forName(),用类的名字获取一个Class实例 ; 运用.class...下面是一个反射ReflectionUtils 反射工具类 package com.itep.mt.common.util; /** * Created by hx on 2019/7/12. *

    13010

    【Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 )

    混淆大小写 : 不要使用混合大小写类名进行混淆 , 混淆后的名称全部都是小写 , 增加阅读难度 # 不要使用混合大小写类名进行混淆 , 混淆后的名称全部都是小写 , 增加阅读难度 -dontusemixedcaseclassnames...保留反射属性 : 保留一些反射中可能用到的属性 # 保留一些反射中可能用到的属性 -keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod...保留被注解声明的类 : 被 @android.support.annotation.Keep 注解修饰的类不被混淆 ; # 保留被 @android.support.annotation 注解声明的类..." 文件 . # 不要进行优化 -dontoptimize # 不要使用混合大小写类名进行混淆 , 混淆后的名称全部都是小写 , 增加阅读难度 -dontusemixedcaseclassnames...-dontskipnonpubliclibraryclasses -verbose # 保留一些反射中可能用到的属性 -keepattributes *Annotation*,Signature,

    52600

    PHP反射类,ReflectionClass、ReflectionMethod的使用

    使用实例 一、官方解释 自PHP5版本后,PHP具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。...此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。 二、首先,我们先来了解反射是什么?...PHP反射API由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互。...借助反射我们可以获取诸如类实现了那些方法,创建一个类的实例(不同于用new创建),调用一个方法(也不同于常规调用),传递参数,动态调用类的静态方法。...反射API是PHP内建的OOP技术扩展,包括一些类,异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性,方法和扩展。这些OOP扩展被称为反射。

    1.9K10

    Android 代码混淆规则

    ProGuard是一个免费的Java类文件收缩,优化,混淆和预校验器。它可以检测并删除未使用的类,字段,方法和属性。它可以优化字节码,并删除未使用的指令。...Proguard作用 Android中的“混淆”可以分为两部分,一部分是 Java 代码的优化与混淆,依靠 proguard 混淆器来实现;另一部分是资源压缩,将移除项目及依赖的库中未被使用的资源(资源压缩严格意义上跟混淆没啥关系...{ public static final android.os.Parcelable$Creator *; } 5.11 需要序列化和反序列化的类不能被混淆(注:Java反射用到的类也不能被混淆...public class * extends android.widget.CusorAdapter{ *; } 5.15 保持反射用到的类和与JavaScript进行交互的类不被混淆 6....{ public static final android.os.Parcelable$Creator *; } #需要序列化和反序列化的类不能被混淆(注:Java反射用到的类也不能被混淆

    2.6K10

    一篇文章带你领略Android混淆的魅力

    根据 Java 官方介绍,Proguard 对应的具体中文定义如下: 它是一个包含代码文件压缩、优化、混淆和校验等功能的工具 它能够检测并删除无用的类、变量、方法和属性 它能够优化字节码并删除未使用的指令...其实,我们在使用代码混淆时,ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译时出错,我们应该通过 keep 命令保留一些元素不被混淆。...4.2 被反射的元素 被反射使用的类、变量、方法、包名等不应该被混淆处理。...原因在于:代码混淆过程中,被反射使用的元素会被重命名,然而反射依旧是按照先前的名称去寻找元素,所以会经常发生 NoSuchMethodException 和 NoSuchFiledException 问题...原因在于: 四大组件使用前都需要在 AndroidManifest.xml 文件中进行注册声明,然而混淆处理之后,四大组件的类名就会被篡改,实际使用的类与 manifest 中注册的类并不匹配,故而出错

    97320

    android开发笔记之 Android代码混淆打包

    三, 是我们的java 元素名称是在配置文件中配置好的。 所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。...-keep 指定的类和类成员被保留作为 入口 。 -keepclassmembers 指定的类成员被保留。...-keepclasseswithmembers 指定的类和类成员被保留,假如指定的类成员存在的话。...本地方法,不能修改本地方法名 annotations 注释 数据库驱动 有些resource 文件 用到反射的地方 如何实施 现在的系统已经配置为混淆时候会保留...Android系统组件 自定义View Android Parcelable Android R 文件 Android Parcelable 枚举 各个开发人员必须检查自己的code 是否用到反射 ,和其他不能混淆的地方

    85720

    Android开发:请你吃一顿史上最全的Android混淆大餐

    根据 Java 官方介绍,Proguard 对应的具体中文定义如下: 它是一个包含代码文件压缩、优化、混淆和校验等功能的工具 它能够检测并删除无用的类、变量、方法和属性 它能够优化字节码并删除未使用的指令...其实,我们在使用代码混淆时,ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译时出错,我们应该通过 keep 命令保留一些元素不被混淆。...被反射的元素 被反射使用的类、变量、方法、包名等不应该被混淆处理。...原因在于:代码混淆过程中,被反射使用的元素会被重命名,然而反射依旧是按照先前的名称去寻找元素,所以会经常发生 NoSuchMethodException 和 NoSuchFiledException 问题...原因在于: 四大组件使用前都需要在 AndroidManifest.xml 文件中进行注册声明,然而混淆处理之后,四大组件的类名就会被篡改,实际使用的类与 manifest 中注册的类并不匹配,故而出错

    5.2K30

    Android混淆你了解多少?

    根据 Java 官方介绍,Proguard 对应的具体中文定义如下: 它是一个包含代码文件压缩、优化、混淆和校验等功能的工具 它能够检测并删除无用的类、变量、方法和属性 它能够优化字节码并删除未使用的指令...其实,我们在使用代码混淆时,ProGuard 对我们项目中大部分代码进行了混淆操作,为了防止编译时出错,我们应该通过 keep 命令保留一些元素不被混淆。...被反射的元素 被反射使用的类、变量、方法、包名等不应该被混淆处理。...原因在于:代码混淆过程中,被反射使用的元素会被重命名,然而反射依旧是按照先前的名称去寻找元素,所以会经常发生 NoSuchMethodException 和 NoSuchFiledException 问题...原因在于: 四大组件使用前都需要在 AndroidManifest.xml 文件中进行注册声明,然而混淆处理之后,四大组件的类名就会被篡改,实际使用的类与 manifest 中注册的类并不匹配,故而出错

    1.9K01

    【Android 安装包优化】开启 ProGuard 混淆 ( 压缩 Shrink | 优化 Optimize | 混淆 Obfuscate | 预检 | 混淆文件编写 | 混淆前后对比 )

    中 开启 Proguard , 在编译时 , 会自动进行如下一系列优化 : 压缩 Shrink : 检查 并 删除 没有使用的类 , 字段 , 方法 , 属性 ; 这里要注意 , 如果通过反射使用一个类时..., 可能会在该步骤被删除 ; 这里需要配置混淆文件 , 保留反射中使用的类 ; 优化 Optimize : 优化字节码 , 移除无用指令 ; 混淆 Obfuscate : 混淆 Java...层代码 , 使用无意义的标识符替代 Java 中的类名 , 变量名 , 方法名 等名称 ; 预检 Preveirfy : 预检 Java 平台上预处理的代码 ; 开启 ProGuard 配置...’ 中 , 配置了两个文件, 其中 proguard-android-optimize.txt 是默认的混淆配置文件 , 由系统自动生成 ; proguard-rules.pro 是用户自己配置的混淆配置文件...; 遇到某个包或类编译遇到警告退出 , -dontwarn 配置该包不要爆出警告 ; 遇到没有找到的类 , 使用 -keep 不要混淆该类 ; 常用的混淆配置 : " -dontwarn " : 不要报出警告信息

    4K20

    【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 反射获取系统的 Element[] dexElements )

    】DEX 加密 ( Proguard keep 用法 | Proguard 默认混淆结果 | 保留类及成员混淆结果 | 保留注解以及被注解修饰的类/成员/方法 ) 【Android 安全】DEX 加密...( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt ) 【Android 安全】DEX 加密 ( Proguard 混淆 | 将混淆后的报错信息转为原始报错信息...加密 ( DEX 加密使用到的相关工具 | dx 工具 | zipalign 对齐工具 | apksigner 签名工具 ) 【Android 安全】DEX 加密 ( 支持多 DEX 的 Android...的 私有成员 , 因此只能使用 反射 获取 Element[] dexElements 数组 ; 反射获取系统的 Element[] dexElements , 需要分三个阶段完成 ; 第一阶段 :...是 BaseDexClassLoader 的私有成员 Element[] dexElements 数组 也是 DexPathList 的私有成员 因此只能使用反射获取

    41000

    Android 代码混淆机制

    -keepnames class * implements java.io.Serializable #需要序列化和反序列化的类不能被混淆(注:Java反射用到的类也不能被混淆) -keepclassmembers...2.保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考\examples中的例子及注释) 3.需要序列化和反序列化的类不能被混淆。...(注:Java反射用到的类也不能被混淆) 4.保持R文件不被混淆,否则,你的反射是获取不到资源id的。.../下载proguard,目前我下载并使用的是proguard5.1 2.解压proguard5.1,执行 bin目录下的proguardgui.bat文件打开ProGuard工具 从Android项目到处...Ending 好了,至此已经把我所了解的Android混淆机制及使用方法介绍完毕,如果有错误的地方或者有不明了之处请大家留言指出。

    1.5K20

    Android-Proguard(混淆)

    大家看到了,有两个混淆文件,proguard-android.txt和proguard-rules.pro,proguard-rules.pro是我们需要自己编写的混淆文件,proguard-android.txt...除了proguard之外,还有一个DexGuard,是专门用来优化混淆Android应用的。它包括资源混淆,字符串加密,类加密和dex文件分割等。...  -keep public class * extends android.view.View #如果不需要保持类名,只需要保持该类下的特定方法保持不被混淆, #需要使用keepclassmembers...native方法保持一致; -keepclasseswithmembernamesclass*{# 保持native方法不被混淆    native ;} 2,反射用到的类不混淆(否则反射可能出现问题)...enum类型时需要注意避免以下两个方法混淆,因为enum类的特殊性,以下两个方法会被反射调用。

    1.4K40
    领券