前言
記錄學習逆向的一點一滴。
混淆機制
目前混淆分爲代碼和資源混淆,混淆不僅加大了反編譯的難度,同時也是減小應用安裝包的大小的一種方式。
代碼混淆
代碼混淆參考:
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: