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:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/fengyulinde/article/details/103703721
今日推荐