1.使用背景
ProGuard能夠通過壓縮、優(yōu)化、混淆、預(yù)檢等操作,檢測并刪除未使用的類,字段,方法和屬性,分析和優(yōu)化字節(jié)碼,使用簡短無意義的名稱來重命名類,字段和方法。從而使代碼更小、更高效、更難進(jìn)行逆向工程。
Android代碼混淆,又稱Android混淆,是一種Android APP保護(hù)技術(shù),用于保護(hù)APP不被破解和逆向分析。
所以在大部分的項目里,基本都會把混淆打開。
Tips:如果開啟了混淆,Proguard
默認(rèn)情況下會對所有代碼,包括第三方包都進(jìn)行混淆,可是有些代碼或者第三方包是不能混淆的,這就需要我們手動編寫混淆規(guī)則來保持不能被混淆的部分。例如Gson庫,Litepal庫,有些東西用到的話,就得去proguard-rules.pro文件里配置一下。
2.開啟混淆
需要在app的build.gradle文件里進(jìn)行配置。
android {
......
defaultConfig {
}
buildTypes {
release {
minifyEnabled true // 開啟代碼混淆(必須的哈)
zipAlignEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
- minifyEnabled:是否進(jìn)行代碼混淆(開混淆就必須要這個哈)
- zipAlignEnabled:是否進(jìn)行Zip壓縮優(yōu)化(可選)
- shrinkResources:是否移除未被使用的資源(可選)
- proguardFiles:混淆規(guī)則配置文件
- proguard-android.txt:AndroidStudio默認(rèn)自動導(dǎo)入的規(guī)則,這個文件位于Android SDK根目錄\tools\proguard\proguard-android.txt。這里面是一些比較常規(guī)的不能被混淆的代碼規(guī)則。
- proguard-rules.pro:針對自己的項目需要特別定義的混淆規(guī)則,它位于項目每個Module的根目錄下面,里面的內(nèi)容需要我們自己編寫。
3.Proguard配置規(guī)則
即在proguard-rules.pro里進(jìn)行編寫配置。
這兒我就不細(xì)說了,因為平時我也用不了那么多,這兒貼一個比較全的鏈接
Android 代碼混淆規(guī)則 - 掘金
Tips:
AndroidMainfest中的類不混淆,所以四大組件和Application的子類和Framework層下所有的類默認(rèn)不會進(jìn)行混淆。自定義的View默認(rèn)也不會被混淆;所以像網(wǎng)上貼的很多排除自定義View,或四大組件被混淆的規(guī)則在Android Studio中是無需加入的(我目前看來是如此的)
4.字典混淆
我的配置:
# 混淆的壓縮比例,0-7
-optimizationpasses 5
# 指定不去忽略非公共的庫的類的成員
-dontskipnonpubliclibraryclassmembers
# 指定混淆是采用的算法
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
# 指定外部模糊字典 proguard-chinese.txt 改為混淆文件名,下同
-obfuscationdictionary proguard-1il.txt
# 指定class模糊字典
-classobfuscationdictionary proguard-1il.txt
# 指定package模糊字典
-packageobfuscationdictionary proguard-1il.txt
其實就是指定
- -obfuscationdictionary dictionary_path:指定外部模糊字典
- -classobfuscationdictionary dictionary_path:指定class模糊字典
- -packageobfuscationdictionary dictionary_path:指定package模糊字典
這三個的模糊字典。讓你的代碼,搞起來特別沒得可讀性。
這個txt文件怎么生成,你可以自己寫個腳本生成,也可以用網(wǎng)上已經(jīng)寫好的。
https://github.com/WrBug/FrenziedProguard/tree/master/proguard-file
下載好文件后,放在和proguard-rules.pro同級的文件目錄里面:
我使用的是 proguard-1il.txt,使用后反編譯查看,首先是包名:
其次是內(nèi)容:
可以看到,里面的各種對象,方法,變量名,參數(shù)等等都被混淆了,變化非常之大。
5.是否生效
使用反編譯工具Jadx查看文章來源:http://www.zghlxwxcb.cn/news/detail-776771.html
GitHub - skylot/jadx: Dex to Java decompiler文章來源地址http://www.zghlxwxcb.cn/news/detail-776771.html
到了這里,關(guān)于Android 混淆使用及其字典混淆(Proguard)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!