Android 之混淆打包

原文地址:[寫給Android開發(fā)者的混淆使用手冊(cè) ]

為保證移動(dòng)端數(shù)據(jù)安全模聋,防止應(yīng)用被逆向工程師反編譯或被不法分子盜用用戶信息,Android應(yīng)用打包發(fā)布都需要進(jìn)行混淆。

混淆其實(shí)是包括了代碼壓縮、代碼混淆以及資源壓縮等的優(yōu)化過(guò)程嘹朗。依靠 ProGuard,混淆流程將主項(xiàng)目以及依賴庫(kù)中未被使用的類诵肛、類成員屹培、方法、屬性移除怔檩,這有助于規(guī)避64K方法數(shù)的瓶頸褪秀;同時(shí),將類珠洗、類成員溜歪、方法重命名為無(wú)意義的簡(jiǎn)短名稱,增加了逆向工程的難度许蓖。而依靠 Gradle 的 Android 插件蝴猪,我們將移除未被使用的資源,可以有效減小 apk 安裝包大小膊爪。

混淆基本配置

一般的混淆為在gradle中進(jìn)行配置:

混淆配置

minifyEnabled false 開啟了代碼壓縮

proguard-android.txt sdk中的一個(gè)混淆文件

proguard-rules.pro 項(xiàng)目module下的一個(gè)混淆配置


proguard-android.txt 中的內(nèi)容:

內(nèi)容一
內(nèi)容二

其實(shí)這就是一個(gè)配置文件

proguard-rules.pro 中常見的配置為:

proguard-rules.pro常見配置

混淆簡(jiǎn)介(摘自原文)

Android中的“混淆”可以分為兩部分自阱,一部分是Java代碼的優(yōu)化與混淆,依靠 proguard 混淆器來(lái)實(shí)現(xiàn)米酬;另一部分是資源壓縮沛豌,將移除項(xiàng)目及依賴的庫(kù)中未被使用的資源(資源壓縮嚴(yán)格意義上跟混淆沒啥關(guān)系,但一般我們都會(huì)放一起講)赃额。

代碼壓縮

代碼混淆是包含了代碼壓縮加派、優(yōu)化、混淆等一系列行為的過(guò)程跳芳。如上圖所示芍锦,混淆過(guò)程會(huì)有如下幾個(gè)功能:

壓縮。移除無(wú)效的類飞盆、類成員娄琉、方法次乓、屬性等;

優(yōu)化孽水。分析和優(yōu)化方法的二進(jìn)制代碼票腰;根據(jù)proguard-android-optimize.txt中的描述,優(yōu)化可能會(huì)造成一些潛在風(fēng)險(xiǎn)女气,不能保證在所有版本的Dalvik上都正常運(yùn)行杏慰。

混淆。把類名主卫、屬性名逃默、方法名替換為簡(jiǎn)短且無(wú)意義的名稱鹃愤;

預(yù)校驗(yàn)簇搅。添加預(yù)校驗(yàn)信息。這個(gè)預(yù)校驗(yàn)是作用在Java平臺(tái)上的软吐,Android平臺(tái)上不需要這項(xiàng)功能瘩将,去掉之后還可以加快混淆速度。

這四個(gè)流程默認(rèn)開啟凹耙。

在 Android 項(xiàng)目中我們可以選擇將“優(yōu)化”和“預(yù)校驗(yàn)”關(guān)閉姿现,對(duì)應(yīng)命令是-dontoptimize、-dontpreverify(當(dāng)然肖抱,默認(rèn)的 proguard-android.txt 文件已包含這兩條混淆命令备典,不需要開發(fā)者額外配置)∫馐觯——不明白這里為啥需要 優(yōu)化和預(yù)校驗(yàn)關(guān)閉提佣,有知道的同學(xué)請(qǐng)?jiān)诹粞曰貜?fù),謝謝

資源壓縮

資源壓縮將移除項(xiàng)目及依賴的庫(kù)中未被使用的資源荤崇,這在減少 apk 包體積上會(huì)有不錯(cuò)的效果拌屏,一般建議開啟。具體做法是在 build.grade 文件中术荤,將 shrinkResources 屬性設(shè)置為 true倚喂。需要注意的是,只有在用minifyEnabled true開啟了代碼壓縮后瓣戚,資源壓縮才會(huì)生效端圈。

資源壓縮包含了“合并資源”和“移除資源”兩個(gè)流程。

“合并資源”流程中子库,名稱相同的資源被視為重復(fù)資源會(huì)被合并舱权。需要注意的是,這一流程不受shrinkResources屬性控制刚照,也無(wú)法被禁止刑巧, gradle 必然會(huì)做這項(xiàng)工作喧兄,因?yàn)榧偃绮煌?xiàng)目中存在相同名稱的資源將導(dǎo)致錯(cuò)誤。

檢查混淆結(jié)果

混淆過(guò)的包必須進(jìn)行檢查啊楚,避免因混淆引入的bug吠冤。

一方面,需要從代碼層面檢查恭理。使用上文的配置進(jìn)行混淆打包后在 /build/outputs/mapping/release/ 目錄下會(huì)輸出以下文件:

dump.txt

描述APK文件中所有類的內(nèi)部結(jié)構(gòu)

mapping.txt

提供混淆前后類拯辙、方法、類成員等的對(duì)照表

seeds.txt

列出沒有被混淆的類和成員

usage.txt

列出被移除的代碼

我們可以根據(jù) seeds.txt 文件檢查未被混淆的類和成員中是否已包含所有期望保留的颜价,再根據(jù) usage.txt 文件查看是否有被誤移除的代碼涯保。

這些文件最好都保存著,以免線上應(yīng)用出現(xiàn)問(wèn)題周伦,可以追蹤bug夕春。

解出混淆棧

混淆后的類、方法名等等難以閱讀专挪,這固然會(huì)增加逆向工程的難度及志,但對(duì)追蹤線上 crash 也造成了阻礙。我們拿到 crash 的堆棧信息后會(huì)發(fā)現(xiàn)很難定位寨腔,這時(shí)需要將混淆反解速侈。

在 /tools/proguard/ 路徑下有附帶的的反解工具(Window 系統(tǒng)為 proguardgui.bat,Mac 或Linux系統(tǒng)為 proguardgui.sh)迫卢。

這里以 Window 平臺(tái)為例倚搬。雙擊運(yùn)行 proguardgui.bat 后,可以看到左側(cè)的一行菜單乾蛤。點(diǎn)擊 ReTrace每界,選擇該混淆包對(duì)應(yīng)的 mapping 文件(混淆后在 /build/outputs/mapping/release/ 路徑下會(huì)生成 mapping.txt 文件,它的作用是提供混淆前后類幻捏、方法盆犁、類成員等的對(duì)照表),再將 crash 的 stack trace 黏貼進(jìn)輸入框中篡九,點(diǎn)擊右下角的 ReTrace 谐岁,混淆后的堆棧信息就顯示出來(lái)了。

本文摘自[原文 ]

本文僅作為學(xué)習(xí)使用榛臼,詳情請(qǐng)查看原文R恋琛!沛善!謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末航揉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子金刁,更是在濱河造成了極大的恐慌帅涂,老刑警劉巖议薪,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異媳友,居然都是意外死亡斯议,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門醇锚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哼御,“玉大人,你說(shuō)我怎么就攤上這事焊唬×抵纾” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵赶促,是天一觀的道長(zhǎng)液肌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)芳杏,這世上最難降的妖魔是什么矩屁? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任辟宗,我火速辦了婚禮爵赵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泊脐。我一直安慰自己空幻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布容客。 她就那樣靜靜地躺著秕铛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缩挑。 梳的紋絲不亂的頭發(fā)上但两,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音供置,去河邊找鬼谨湘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛芥丧,可吹牛的內(nèi)容都是我干的紧阔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼续担,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼擅耽!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起物遇,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤乖仇,失蹤者是張志新(化名)和其女友劉穎憾儒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乃沙,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡航夺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了崔涂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阳掐。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冷蚂,靈堂內(nèi)的尸體忽然破棺而出缭保,到底是詐尸還是另有隱情,我是刑警寧澤蝙茶,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布艺骂,位于F島的核電站,受9級(jí)特大地震影響隆夯,放射性物質(zhì)發(fā)生泄漏钳恕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一蹄衷、第九天 我趴在偏房一處隱蔽的房頂上張望忧额。 院中可真熱鬧,春花似錦愧口、人聲如沸睦番。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)托嚣。三九已至,卻和暖如春厚骗,著一層夾襖步出監(jiān)牢的瞬間示启,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工领舰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夫嗓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓提揍,卻偏偏與公主長(zhǎng)得像啤月,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子劳跃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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