安卓混淆-微信混淆同款

95 篇文章 0 订阅

今天说说安卓混淆那点事:

在很多文章混淆都是开启minifyEnable之类的,其实这都是对class文件的混淆;当你反编译微信apk时你发现资源文件都是a b c...打开里面也找不到微信的图片信息和布局文件信息,其实微信对资源文件也做混淆压缩处理。

1:class文件混淆

在你的app的build里面配置

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "cn.wqgallery.myproguard"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    //签名配置
    signingConfigs {
        //开发版
        debug {
            storeFile file("D:\\studio  key\\studio  key\\GXY.keystore")//自己的签名保存路径
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
         //发布版
        release {
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storeFile file('D:/studio  key/studio  key/GXY.keystore')//自己的签名保存路径
            storePassword 'android'
        }
    }
    //编译配置
    buildTypes {
       //发布版
        release {
            minifyEnabled true     //混淆
            buildConfigField "boolean", "LOG_DEBUG", "false" //不显示log
            zipAlignEnabled true     //Zipalign优化
            shrinkResources true    // 移除无用的resource文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
         //开发版
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

//关于signingConfigs签名的配置可以看看这篇文章https://blog.csdn.net/bzlj2912009596/article/details/78188570

配置好了我们就可以配置自定义规则了打开proguard-rules.pro文件,下面是一些常用的混淆语法

#自定义混淆配置

#配置UserBean类名不被混淆+变量和方法混淆  语法 -keep class 全类名
#-keep class cn.wqgallery.myproguard.UserBean


#配置UserBean类名+类里面变量+方法都不被混淆  语法 -keep class 全类名{*;}
#-keep class cn.wqgallery.myproguard.UserBean{*;}

#配置UserBean类指定的成员变量不被混淆+类名混淆  语法 -keep class 全类名
#-keepclassmembers  class cn.wqgallery.myproguard.UserBean{*;}

#类名不混淆+ 变量方法混淆
#-keepclasseswithmembers class cn.wqgallery.myproguard.UserBean{*;}

#配置类里面的native 方法不被混淆
-keepclasseswithmembers class cn.wqgallery.myproguard.UserBean{
native <methods>;
}

//根据你的实际项目代码看那些代码不能混淆(一般自定义view,需要被反射的类,枚举等等只要改变了名字导致不能使用的都不能混淆)

 

//现在以发布版本为例,切换AS到release的build模式

 

//如果你切换到这个模式报错,可以按这篇文章配置下https://blog.csdn.net/bzlj2912009596/article/details/78188570

//选择build》Generate singed APK打包签名Apk

//这样打包成的apk就是混淆过的apk了。

来两张图对比下混淆前和混淆后效果

//没有混淆的

 

//混淆了图片

 

UserBean类混淆后变成了a

 

>>------------------------------------------------------------------------------------------------

2:现在介绍如何对资源文件的混淆

我们使用微信的开源框架andresguard

//GitHub地址:https://github.com/shwenzhang/AndResGuard/blob/master/README.zh-cn.md

//使用步骤

1:在工程的的build里面配置依赖

dependencies {
    classpath 'com.android.tools.build:gradle:3.2.0'
    

    //微信资源压缩混淆配置
    classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.17'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

 

2:在app的目录下新建个and-res-guard.gradle文件,复制下面白名单配置(注意名字可以自定义但是尽量不要特殊符号)

 

apply plugin: 'AndResGuard'

andResGuard {
    mappingFile = null
    use7zip = true
    useSign = true
    keepRoot = false
    compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.gif",
            "resources.arsc"
    ]
    whiteList = [
            // your icon
            "R.drawable.icon",
            // for fabric
            "R.string.com.crashlytics.*",
            // for umeng update
            "R.string.tb_*",
            "R.layout.tb_*",
            "R.drawable.tb_*",
            "R.drawable.u1*",
            "R.drawable.u2*",
            "R.color.tb_*",
            // umeng share for sina
            "R.drawable.sina*",
            // for google-services.json
            "R.string.google_app_id",
            "R.string.gcm_defaultSenderId",
            "R.string.default_web_client_id",
            "R.string.ga_trackingId",
            "R.string.firebase_database_url",
            "R.string.google_api_key",
            "R.string.google_crash_reporting_api_key",

            //友盟
            "R.string.umeng*",
            "R.string.UM*",
            "R.layout.umeng*",
            "R.drawable.umeng*",
            "R.id.umeng*",
            "R.anim.umeng*",
            "R.color.umeng*",
            "R.style.*UM*",
            "R.style.umeng*",

            //融云
            "R.drawable.u*",
            "R.drawable.rc_*",
            "R.string.rc_*",
            "R.layout.rc_*",
            "R.color.rc_*",
            "R.id.rc_*",
            "R.style.rc_*",
            "R.dimen.rc_*",
            "R.array.rc_*"

            //项目中自己使用反射 获取资源id的资源
            "R.drawable.bd"
    ]

    sevenzip {
        artifact = 'com.tencent.mm:SevenZip:1.2.10'
    }
}

3:在APP的build下配置下面代码

apply plugin: 'com.android.application'//系统的


//引用微信压缩资源库,白名单配置
apply from: 'and-res-guard.gradle'

4:同步后点击最右边的gradle ,选择tasks》andresguard》resguardRelease(tasks下面是些执行脚本,点击就执行这些脚本,andresguard下有三种类型脚本我们今天是要发布版,点击resguardRelease执行脚本

//下面运行日志提示下面就是成功

//在APP》build》outputs》apk》release》AndResGuard_app-release》temp》选择app-release_7zip_aligned_signed.apk

这样你反编译资源文件就是混淆了

 

//最近建议再使用360或者乐固进行加固处理

注意 项目中使用反射获取的资源 需要添加到 白名单 (and-res-guard.gradle),

 

//这个是的一个demo地址:https://github.com/zhudaihao/MyProguard

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值