Android混淆APK解析案站,傻子都能看懂(博主也很傻)。

在Android Studio當(dāng)中混淆APK實(shí)在是太簡(jiǎn)單了涩笤,借助SDK中自帶的Proguard工具嚼吞,只需要修改build.gradle中的一行配置即可盒件〉疟蹋可以看到,現(xiàn)在build.gradle中minifyEnabled的值是false炒刁,這里我們只需要把值改成true恩沽,打出來(lái)的APK包就會(huì)是混淆過(guò)的了。如下所示:


其中minifyEnabled用于設(shè)置是否啟用混淆翔始,proguardFiles用于選定混淆配置文件罗心。注意這里是在release閉包內(nèi)進(jìn)行配置的,因此只有打出正式版的APK才會(huì)進(jìn)行混淆城瞎,Debug版的APK是不會(huì)混淆的渤闷。當(dāng)然這也是非常合理的,因?yàn)镈ebug版的APK文件我們只會(huì)用來(lái)內(nèi)部測(cè)試脖镀,不用擔(dān)心被人破解飒箭。

那么現(xiàn)在我們來(lái)打一個(gè)正式版的APK文件,在Android Studio導(dǎo)航欄中點(diǎn)擊Build->Generate Signed APK蜒灰,然后選擇簽名文件并輸入密碼弦蹂,如果沒(méi)有簽名文件就創(chuàng)建一個(gè),最終點(diǎn)擊Finish完成打包强窖,生成的APK文件會(huì)自動(dòng)存放在app目錄下凸椿。除此之外也可以在build.gradle文件當(dāng)中添加簽名文件配置,然后通過(guò)gradlew assembleRelease來(lái)打出一個(gè)正式版的APK文件翅溺,這種方式APK文件會(huì)自動(dòng)存放在app/build/outputs/apk目錄下脑漫。如果我們需要反編譯大可以去網(wǎng)上找一些軟件進(jìn)行反編譯髓抑,這里不再一一贅述。


重點(diǎn):混淆規(guī)則是在哪里定義的呢优幸?其實(shí)就是剛才在build.gradle的release閉包下配置的proguard-android.txt文件启昧,這個(gè)文件存放于/tools/proguard目錄下,我們打開(kāi)來(lái)看一下:


# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).-dontoptimize

-dontpreverify# Note thatifyou want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.-keepattributes *Annotation*

-keeppublicclasscom.google.vending.licensing.ILicensingService

-keeppublicclasscom.android.vending.licensing.ILicensingService

# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native

-keepclasseswithmembernamesclass* {

native ;

}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans-keepclassmemberspublicclass* extends android.view.View {voidset*(***);

***get*();

}# We want to keep methods in Activity that could be used in the XML attribute onClick-keepclassmembers class * extends android.app.Activity {publicvoid*(android.view.View);

}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations-keepclassmembersenum* {publicstatic**[]values();publicstatic**valueOf(java.lang.String);

}

-keepclassmembers class * implements android.os.Parcelable {publicstaticfinal android.os.Parcelable$Creator CREATOR;

}

-keepclassmembers class **.R$* {publicstatic;

}# The support library contains references to newer platform versions.# Dont warn about those in case this app is linking against an older# platform version.? We know about them, and they are safe.-dontwarn android.support.**

我就問(wèn)你 是不是感覺(jué)頭很大劈伴,哈哈 別著急下面還有解釋密末。


這個(gè)就是默認(rèn)的混淆配置文件了,我們來(lái)一起逐行閱讀一下跛璧。

-dontusemixedcaseclassnames表示混淆時(shí)不使用大小寫混合類名严里。

-dontskipnonpubliclibraryclasses表示不跳過(guò)library中的非public的類。

-verbose表示打印混淆的詳細(xì)信息追城。

-dontoptimize表示不進(jìn)行優(yōu)化刹碾,建議使用此選項(xiàng),因?yàn)楦鶕?jù)proguard-android-optimize.txt中的描述座柱,優(yōu)化可能會(huì)造成一些潛在風(fēng)險(xiǎn)迷帜,不能保證在所有版本的Dalvik上都正常運(yùn)行。

-dontpreverify表示不進(jìn)行預(yù)校驗(yàn)色洞。這個(gè)預(yù)校驗(yàn)是作用在Java平臺(tái)上的戏锹,Android平臺(tái)上不需要這項(xiàng)功能,去掉之后還可以加快混淆速度火诸。

-keepattributes *Annotation*表示對(duì)注解中的參數(shù)進(jìn)行保留锦针。



表示不混淆R文件中的所有靜態(tài)字段,我們都知道R文件是通過(guò)字段來(lái)記錄每個(gè)資源的id的置蜀,字段名要是被混淆了奈搜,id也就找不著了。

-dontwarn android.support.**表示對(duì)android.support包下的代碼不警告盯荤,因?yàn)閟upport包中有很多代碼都是在高版本中使用的馋吗,如果我們的項(xiàng)目指定的版本比較低在打包時(shí)就會(huì)給予警告。不過(guò)support包中所有的代碼都在版本兼容性上做足了判斷秋秤,因此不用擔(dān)心代碼會(huì)出問(wèn)題宏粤,所以直接忽略警告就可以了。

好了航缀,這就是proguard-android.txt文件中所有默認(rèn)的配置商架,而我們混淆代碼也是按照這些配置的規(guī)則來(lái)進(jìn)行混淆的。經(jīng)過(guò)我上面的講解之后芥玉,相信大家對(duì)這些配置的內(nèi)容基本都能理解了蛇摸。


回到Android Studio項(xiàng)目當(dāng)中,APK雖然已經(jīng)成功混淆了灿巧,但是混淆的規(guī)則都是按照proguard-android.txt中默認(rèn)的規(guī)則來(lái)的赶袄,當(dāng)然我們也可以修改proguard-android.txt中的規(guī)則揽涮,但是直接在proguard-android.txt中修改會(huì)對(duì)我們本機(jī)上所有項(xiàng)目的混淆規(guī)則都生效,那么有沒(méi)有什么辦法只針對(duì)當(dāng)前項(xiàng)目的混淆規(guī)則做修改呢饿肺?當(dāng)然是有辦法的了蒋困,你會(huì)發(fā)現(xiàn)任何一個(gè)Android Studio項(xiàng)目在app模塊目錄下都有一個(gè)proguard-rules.pro文件,這個(gè)文件就是用于讓我們編寫只適用于當(dāng)前項(xiàng)目的混淆規(guī)則的敬辣,

混淆第三方庫(kù)雪标,目前我們使用了兩種方式來(lái)引入第三方庫(kù),一種是通過(guò)本地jar包引入的溉跃,一種是通過(guò)remote引入的提鸟,其實(shí)這兩種方式?jīng)]什么區(qū)別汤踏,要保留代碼都可以使用**這種通配符來(lái)實(shí)現(xiàn),如下所示:

-keepclassorg.litepal.** {*;}-keepclassandroid.support.** {*;}

在這里還有一個(gè)問(wèn)題如果有一些第三方數(shù)據(jù)庫(kù)需要混攪怎么整迄薄,以litepal為例子嘲更。如下配置:

-keepclass*extendsorg.litepal.crud.DataSupport{*;

}

LitePal作為開(kāi)源庫(kù)并不需要混淆严拒,上面的配置已經(jīng)演示了如何不混淆LitePal代碼奴曙,然后所有代碼中的Model是需要進(jìn)行反射的由驹,也不能混淆,

因?yàn)長(zhǎng)itePal中所有的Model都是應(yīng)該繼承DataSupport類的炫惩,所以這里我們將所有繼承自DataSupport的類都進(jìn)行保留就可以了僻弹。

如果幫到了您,請(qǐng)給我點(diǎn)個(gè)喜歡唄诡必。奢方。本文參考自郭霖大神的博客搔扁。爸舒。。稿蹲。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扭勉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苛聘,更是在濱河造成了極大的恐慌涂炎,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件设哗,死亡現(xiàn)場(chǎng)離奇詭異唱捣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)网梢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門震缭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人战虏,你說(shuō)我怎么就攤上這事拣宰〉程椋” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵巡社,是天一觀的道長(zhǎng)膛堤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)晌该,這世上最難降的妖魔是什么肥荔? 我笑而不...
    開(kāi)封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮朝群,結(jié)果婚禮上次企,老公的妹妹穿的比我還像新娘。我一直安慰自己潜圃,他們只是感情好缸棵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著谭期,像睡著了一般堵第。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隧出,一...
    開(kāi)封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天踏志,我揣著相機(jī)與錄音,去河邊找鬼胀瞪。 笑死针余,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凄诞。 我是一名探鬼主播圆雁,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帆谍!你這毒婦竟也來(lái)了伪朽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤汛蝙,失蹤者是張志新(化名)和其女友劉穎烈涮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窖剑,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坚洽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了西土。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讶舰。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绘雁,到底是詐尸還是另有隱情橡疼,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布庐舟,位于F島的核電站欣除,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏挪略。R本人自食惡果不足惜历帚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杠娱。 院中可真熱鬧挽牢,春花似錦、人聲如沸摊求。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)室叉。三九已至睹栖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茧痕,已是汗流浹背野来。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踪旷,地道東北人曼氛。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像令野,于是被迫代替她去往敵國(guó)和親舀患。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容