Android应用安全防护的基本策略(1)--混淆

前言

记录学习逆向的一点一滴。

混淆机制

目前混淆分为代码和资源混淆,混淆不仅加大了反编译的难度,同时也是减小应用安装包的大小的一种方式。

代码混淆

代码混淆参考:
Android Studio混淆笔记
ProGuard常见问题及解决套路
Android 混淆:proguard实践

反编译工具:
androiddevtools
一般可用jadx

资源混淆

资源混淆使用的是微信的AndResGuard插件,需要注意的是该github上的README中的没有将gradle配置区分开。
实际配置如下:
1.在项目的根目录的build.gradle中,增加插件依赖,如下:

buildscript {
    
    repositories {
    	// AS默认的,可忽略
        google()
        jcenter()
    }
    
    dependencies {
    // 编写文章时的插件版本是1.2.17
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.17'
    }
}

2.在模块的build.gradle中配置如下:


android {
	...省略一千字
}

apply plugin: 'AndResGuard'
andResGuard {
    // mappingFile = file("./resource_mapping.txt")
    mappingFile = null
    use7zip = true
    useSign = true
    // 打开这个开关,会keep住所有资源的原始路径,只混淆资源的名字
    keepRoot = false
    // 设置这个值,会把arsc name列混淆成相同的名字,减少string常量池的大小
    fixedResName = "arg"
    // 打开这个开关会合并所有哈希值相同的资源,但请不要过度依赖这个功能去除去冗余资源
    mergeDuplicatedRes = true
    whiteList = [
            // for your icon
            "R.drawable.icon",
            // for fabric
            "R.string.com.crashlytics.*",
            // for google-services
            "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"
    ]
    compressFilePattern = [
            "*.png",
            "*.jpg",
            "*.jpeg",
            "*.gif",
    ]
    sevenzip {
        artifact = 'com.tencent.mm:SevenZip:1.2.17'
        //path = "/usr/local/bin/7za"
    }

    /**
     * 可选: 如果不设置则会默认覆盖assemble输出的apk
     **/
    // finalApkBackupPath = "${project.rootDir}/final.apk"

    /**
     * 可选: 指定v1签名时生成jar文件的摘要算法
     * 默认值为“SHA-1”
     **/
    // digestalg = "SHA-256"
}

3.执行打包命令与平常打包命令没有什么区别,只是将assemble换为resguard:
例如:
原先执行命令:gradlew assembleRelease
更换后:gradlew resguardRelease
打包以后会在release下生成新的目录,红色框框即是资源混淆后签名的apk:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值