Android混淆

一、简介

代码混淆(Obfuscated code)是将程序中的代码以某种规则转换为难以阅读和理解的代码的一种行为。  令 APK 难以被逆向工程,即很大程度上增加反编译的成本。此外,Android 当中的"混淆"还能够在打包时移除无用资源,显著减少 APK 体积。 

二、启动混淆

buildTypes {
        release {
            //不显示log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //开启混淆
            minifyEnabled true
            //开启资源压缩
            shrinkResources true
            //Zipalign优化
            zipAlignEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
}

三、混淆语法

3.1 类名

对类名进行keep操作只是将类名keep住,但方法和变量仍然会被混淆

# 一颗星表示keep当前本包下的类名,子包下的类名是会被混淆的

-keep class com.example.hunxiao.*

# 两颗星表示keep当前本包下的类名和子包下的类名

-keep class com.example.hunxiao.**

# 表示keep当前类名

-keep class com.example.hunxiao.net.NetWorkCache

# 表示keep当前类的内部类的类名

-keep class com.example.hunxiao.net.NetWorkCache$NetWorkBean

3.2 内容

对内容进行keep操作不仅可以将类名keep住,还可以对方法和变量keep住 

# 一颗星表示keep当前本包下的类名、类的内容

-keep class com.example.hunxiao.*{*;}

# 两颗星表示keep当前本包下的类名、类的内容和子包下的类名、类的内容

-keep class com.example.hunxiao.**{*;}

# 表示keep当前类名、类的内容

-keep class com.example.hunxiao.net.NetWorkCache{*;}

# 表示keep当前类的内部类的类名、内部类的内容

-keep class com.example.hunxiao.net.NetWorkCache$NetWorkBean{*;}

3.3 特定内容

对特定的内容进行keep操作

-keep class com.example.hunxiao.net.NetWorkCache{

    <init>;# 匹配所有构造器

    <fields>;# 匹配所有变量

    <methods>;# 匹配所有方法

    public <methods>;# 匹配所有共有的方法

    private <methods>;# 匹配所有私有的方法

    public *;# 匹配所有共有的内容

    private *;# 匹配所有私有的内容

    public <init>(java.lang.String);# 匹配特定参数的构造函数

    public void getCache(...);# 匹配任意长度类型参数的方法

}

3.4 类成员

对类名不需要keep,只需要对类下的方法进行keep操作

# 表示keep特定类下的特定参数的方法,但类名不会被keep

-keepclassmembernames class com.example.hunxiao.net.NetWorkCache{

    public void getCache(java.lang.String);

}

 

注意事项

对于第三方框架的混淆,一般公开的框架都会提供混淆方法,只要到框架的github下就能找到。
对于反射类的混淆,只要保持反射用到的类名和方法即可,并不需要将整个被反射到的类都进行保持。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值