Android應(yīng)用apk文件二次打包步驟

最近根據(jù)別人的博客看了下如何對(duì)應(yīng)用進(jìn)行二次打包及皂。之前沒有真正實(shí)踐過(guò)甫男,今天就來(lái)自己動(dòng)手實(shí)現(xiàn)一下且改。聲明,本篇博客內(nèi)容也是根據(jù)別人的博客進(jìn)行學(xué)習(xí)板驳,然后我自己總結(jié)寫出的钾虐,目的就是好記性不如爛指頭,還是敲一遍記得深笋庄,我的學(xué)習(xí)鏈接:http://www.reibang.com/p/7e5ad780f8ab/comments/3607759#comment-3607759 在此也向作者表示感謝.

一效扫、二次打包的概念

所謂的二次打包的概念,即對(duì)已經(jīng)編譯發(fā)布的apk文件直砂,即已經(jīng)使用簽名文件進(jìn)行正式簽名的應(yīng)用文件進(jìn)行自己的修改之后菌仁,再次簽名打包發(fā)布的過(guò)程稱為二次打包。

二静暂、二次打包能干什么

我們知道济丘,最終我們發(fā)布到應(yīng)用市場(chǎng)供用戶下載的是一個(gè).apk形式的文件,apk文件其實(shí)就是一種特殊的文件格式洽蛀,其實(shí)就是資源文件摹迷,布局文件,主配置文件郊供,dex文件以及簽名驗(yàn)證文件等的文件集合。我們把.apk文件的后綴名修改為.zip包驮审,然后進(jìn)行解壓縮進(jìn)行查看,就能看到上面說(shuō)的一些文件目錄及文件的羅列地来,在此不在貼圖。具體說(shuō)到二次打包能干什么熙掺,其實(shí)就是我們可以對(duì)原來(lái)的apk文件中的源碼進(jìn)行修改未斑,然后重新編譯币绩,進(jìn)行二次打包,重新發(fā)布測(cè)試类浪,從而達(dá)到我們修改別人的apk文件的目的载城。

三肌似、二次打包需要的準(zhǔn)備
  • adb shell dumpsys activity activities 命令, 該命令會(huì)列出當(dāng)前連接設(shè)備運(yùn)行的Activity棧的情況费就,其中就可以看到應(yīng)用包名川队,類的全路徑名等詳細(xì)信息睬澡。這有助于我們定為分析界面的相關(guān)信息眠蚂。
  • apktool, dex2jar, jd-gui三個(gè)反編譯工具的準(zhǔn)備逝慧。apktool工具下載是建議安裝最新的昔脯,有的版本比較老在反編譯的時(shí)候可能會(huì)報(bào)錯(cuò)笛臣。dex2jar工具是將dex文件轉(zhuǎn)變成jar文件的工具;jd-gui工具是我們查看生成的jar文件的圖形化工具沈堡;關(guān)于如何準(zhǔn)備三個(gè)工具以及使用說(shuō)明,比較簡(jiǎn)單诞丽,就不在此敘述了。
  • apk反編譯命令
apktool d demo.apk
  • 生成keystore文件
keytool -genkey -alias androidauto.keystore -keyalg RSA -validity 20000 -keystore android.keystore
  • apk文件進(jìn)行簽名
jarsigner -keystore demo.keystore -storepass password -signedjar demo.apk demo_signed.apk demo.keystore

如上命令就是使用demo.keystore簽名文件對(duì)apk文件進(jìn)行簽名刑赶。另外懂衩,在執(zhí)行如上簽名命令時(shí)勃痴,有的jdk如果是1.7版本時(shí),可能會(huì)簽名失敗沛申,提示警告,信息如下:

No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2019-08-16) or after any future revocation date.

此時(shí)尖淘,需要修改如上的簽名命令著觉,修改后如下:

jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore demo.keystore -storepass password -signedjar demo.apk demo_signed.apk demo.keystore
  • 卸載安裝命令
//先卸載 package為應(yīng)用包名
adb uninstall package 
//然后進(jìn)行重新安裝
adb install package

不出意外,安裝就能成功趁桃。如果要驗(yàn)證的話,自己可以到應(yīng)用市場(chǎng)下載官方的apk文件油啤,然后試圖安裝替換蟀苛,會(huì)提示失敗,因?yàn)楹灻灰恢隆?/p>

準(zhǔn)備工作就是這么多帜平,接下來(lái)就是具體的二次打包的步驟

四裆甩、如何進(jìn)行二次打包

首先說(shuō)一下本次實(shí)踐的終極目標(biāo),修改某個(gè)應(yīng)用中一個(gè)界面的點(diǎn)擊事件淑掌,使其不能產(chǎn)生頁(yè)面跳轉(zhuǎn)事件抛腕,如下圖:


某應(yīng)用的設(shè)置界面

我們的目的就是讓右上角的意見反饋按鈕事件失效,無(wú)法完成跳轉(zhuǎn)摔敛,以完成我們修改的目的全封。依舊,Talk is cheap, show me the code.下面將二次打包的主要步驟分步驟敘述如下,為了方便說(shuō)明行楞,以某個(gè)應(yīng)用為例進(jìn)行說(shuō)明:

  • 1.修改文件查看目錄結(jié)構(gòu)土匀。修改.apk文件為.zip后綴名并進(jìn)行解壓, 查看得到的目錄文件


    應(yīng)用的zip包解壓后的目錄結(jié)構(gòu)
  • 2.查找代碼入口,尋找關(guān)鍵信息证杭。移動(dòng)設(shè)備安裝官方apk應(yīng)用妒御,并將要修改的設(shè)置界面打開到當(dāng)前顯示界面,然后執(zhí)行前面說(shuō)過(guò)的棧分析命令進(jìn)行查看送讲,如下:


    Activity棧信息截圖

    通過(guò)上面的棧信息,我們可以清晰的看到,包名肥橙,相關(guān)類名及其全路徑存筏,這對(duì)我們后面找代碼至關(guān)重要。這里我們就看到我們要修改的類為BaseSettingActivity椭坚,全路徑名也要記住。

  • 3.因?yàn)榇藨?yīng)用有三個(gè)dex文件券册,理論上來(lái)說(shuō)我們并不能確定BaseSettingActivity在哪個(gè)dex文件中垂涯,所以只能一個(gè)一個(gè)來(lái)進(jìn)行測(cè)試。首先將classes.dex拷貝出來(lái)使用dexjar工具進(jìn)行反編譯骄蝇,得到classes-dex2jar.jar文件,如下圖:


    dex文件轉(zhuǎn)jar文件
  • 4.使用jd-gui圖形化工具查看相關(guān)代碼操骡,查找線索册招。


    在反編譯的代碼中找到程序的關(guān)鍵位置

    混淆后的代碼aQ變量就是反饋控件變量,同時(shí)還可以看到設(shè)置了監(jiān)聽事件鹦倚。

  • 5.在Smali文件中找到對(duì)應(yīng)代碼進(jìn)行修改


    圖中紅框內(nèi)的代碼為關(guān)鍵代碼

    將上圖中的設(shè)置監(jiān)聽事件的關(guān)鍵代碼刪除冀惭,也就是我們本次修改的目的,使點(diǎn)擊事件失效媒楼。

  • 6.將修改后的smali代碼重新編譯成jar然后編譯成dex文件戚丸,再次進(jìn)行簽名扔嵌,最后安裝試驗(yàn)夺颤。關(guān)于如何進(jìn)行二次簽名以及流程世澜,請(qǐng)查看:http://www.reibang.com/p/3322d873af53

五、二次打包的意義

整個(gè)反編譯寥裂,分析封恰,修改,重新打包簽名這一整個(gè)過(guò)程下來(lái)诺舔,可以發(fā)現(xiàn),其實(shí)中間涉及的流程和內(nèi)容挺多的遗遵,同時(shí)還涉及到很多平時(shí)不容易涉及的原理知識(shí)點(diǎn)等內(nèi)容逸嘀。所以,掌握二次打包這整個(gè)過(guò)程翼岁,有助于我們更好的理解整個(gè)Android項(xiàng)目的內(nèi)在結(jié)構(gòu)司光,編譯過(guò)程,發(fā)布流程甚至安全防護(hù)等方面的知識(shí)榆俺。

六坞淮、延伸及拓展

通過(guò)上面的反編譯過(guò)程我們看到,通過(guò)反編譯工具回窘,我們可以拿到別人項(xiàng)目的混淆后的代碼啡直。雖然混淆代碼是將變量及類名做了處理苍碟,但是其實(shí)還是不夠安全撮执,如果被別人盯上,分析出業(yè)務(wù)邏輯理論上只是時(shí)間問題蜓肆。所以在安全防護(hù)這方面继效,敵追我趕装获,又出現(xiàn)了應(yīng)用加固這種說(shuō)法,增加別人破解的難度穴豫,不讓別人反編譯精肃,提高門檻。當(dāng)然司抱,有矛自然有盾,對(duì)應(yīng)的肯定就是脫殼技術(shù)匀谣,可以將加固的文件進(jìn)行脫殼资溃,然后反編譯。打算下一目標(biāo)學(xué)習(xí)學(xué)習(xí)脫殼宝恶,看能否研究個(gè)皮毛趴捅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拱绑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子欺栗,更是在濱河造成了極大的恐慌,老刑警劉巖消请,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臊泰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缸逃,警方通過(guò)查閱死者的電腦和手機(jī)需频,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苞七,“玉大人挪丢,你說(shuō)我怎么就攤上這事』葑模” “怎么了任内?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)姥闭。 經(jīng)常有香客問我越走,道長(zhǎng),這世上最難降的妖魔是什么铜跑? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任锅纺,我火速辦了婚禮肋殴,結(jié)果婚禮上坦弟,老公的妹妹穿的比我還像新娘官地。我一直安慰自己,他們只是感情好赤炒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布亏较。 她就那樣靜靜地躺著,像睡著了一般遵岩。 火紅的嫁衣襯著肌膚如雪旺罢。 梳的紋絲不亂的頭發(fā)上绢记,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天蠢熄,我揣著相機(jī)與錄音,去河邊找鬼签孔。 笑死饥追,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的但绕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼幅骄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起主巍,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铐达,沒想到半個(gè)月后檬果,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杭抠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年偏灿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钝的。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沿猜,死狀恐怖碗脊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祈坠,我是刑警寧澤矢劲,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布芬沉,位于F島的核電站,受9級(jí)特大地震影響花嘶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜车海,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侍芝。 院中可真熱鬧,春花似錦棵红、人聲如沸咧栗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)斟或。三九已至,卻和暖如春萝挤,著一層夾襖步出監(jiān)牢的瞬間怜珍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工欺税, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揭璃,地道東北人亭罪。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像情组,于是被迫代替她去往敵國(guó)和親箩祥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,075評(píng)論 25 707
  • Android插件化基礎(chǔ)的主要內(nèi)容包括 Android插件化基礎(chǔ)1-----加載SD上APKAndroid插件化基...
    隔壁老李頭閱讀 7,102評(píng)論 13 48
  • 一蕉陋、交換變量 注意:>>>是IDLE提示符拨扶。 二 某數(shù)列 三茁肠、讀文件并輸出內(nèi)容 四、浪客劍心漫畫下載程序 浪客劍心...
    司馬懿閱讀 1,065評(píng)論 2 2
  • 本來(lái)想寫別的匹颤,但看到微博關(guān)注的清華南都發(fā)出的一組圖片托猩,提醒距離2016年結(jié)束還有一百天,可以制定新的計(jì)劃做些事情時(shí)...
    生命的朝拜者閱讀 215評(píng)論 0 0