前言
记录学习逆向的一点一滴。
混淆机制
目前混淆分为代码和资源混淆,混淆不仅加大了反编译的难度,同时也是减小应用安装包的大小的一种方式。
代码混淆
代码混淆参考:
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: