APK反編譯

學習和開發(fā)Android應用有一段時間了游昼,今天寫一篇博客總結(jié)一下Android的apk文件反編譯甘苍。我們知道,Android應用開發(fā)完成之后烘豌,我們最終都會將應用打包成一個apk文件载庭,然后讓用戶通過手機或者平板電腦下載下來進行安裝。正常情況下,Android應用打包成apk之后囚聚,就無法再看到開發(fā)這個應用時使用的資源文件以及代碼了靖榕。但是我們通過網(wǎng)上提供了一些工具,還是可以將apk進行反編譯的顽铸,apk反編譯之后茁计,我們就可以看到開發(fā)這個應用使用的資源文件(圖片)、layout谓松、樣式星压、相關的實現(xiàn)代碼等,apk反編譯也算是Android開發(fā)中一個比較實用的技巧吧鬼譬,當我們對別人開發(fā)好的應用感興趣時娜膘,我們就可以通過這種技術(shù)手段將別人打包好的apk進行反編譯,繼而可以看到我們感興趣的內(nèi)容优质,(注:反編譯不是讓各位開發(fā)者去對一個應用破解搞重裝什么的劲绪,主要目的是為了促進開發(fā)者學習,借鑒好的代碼盆赤,提升自我開發(fā)水平贾富。)下面就來說說如何將一個apk反編譯出來。

一牺六、準備必要工具

工欲善其事颤枪,必先利其器,首先我們要下載好反編譯apk時需要的相關工具

1.1淑际、使用工具

  1. apktool (資源文件獲任犯佟)
  2. dex2jar(源碼文件獲取)
  3. jd-gui (源碼查看)

1.2春缕、工具介紹

apktool

作用:資源文件獲取盗胀,可以提取出圖片文件和布局文件進行使用查看

dex2jar

作用:將apk反編譯成java源碼(classes.dex轉(zhuǎn)化成jar文件)

jd-gui

作用:查看APK中classes.dex轉(zhuǎn)化成出的jar文件,即源碼文件

1.3工具下載

apktool下載地址:https://bitbucket.org/iBotPeaches/apktool/downloads

image.png

下載好之后得到一個如下圖所示的jar文件
image.png

dex2jar下載地址:http://sourceforge.net/projects/dex2jar/files/
image.png

image.png

下載完成之后锄贼,得到一個如下圖所示的壓縮包
image.png

jd-gui下載地址:http://jd.benow.ca/
image.png

下載完成之后票灰,得到一個如下圖所示的壓縮包:
image.png

到此,需要使用到的3個相關工具都下載好了宅荤,在這里說明一下jd-gui的下載屑迂,我從官方網(wǎng)站上點擊[圖片上傳失敗...(image-444a70-1560747527984)]

下載時會經(jīng)常出現(xiàn)如下圖所示的問題


image.png

但是多試幾次又可以下載了,所以如果有遇到這個問題的朋友們不妨多試幾次冯键,或者從別的地方下載jd-gui惹盼,jd-gui算是做Java開發(fā)的一個必備工具了,用它來將class反編譯成java源代碼是非常方便的惫确,網(wǎng)上搜索一下一般都可以下載到手报,只不過版本不一定是最新的蚯舱。

二、Apk反編譯流程

為了方便進行反編譯掩蛤,我們將上述下載好的3個工具統(tǒng)一放到一個文件夾中晓淀,例如:


image

然后將【dex2jar-2.0.zip】和【jd-gui-windows-1.3.0.zip】分別解壓到當前文件夾,如下圖所示:

image

2.1盏档、使用apktool反編譯apk得到圖片凶掰、XML配置、語言資源等文件

進入CMD命令行蜈亩,如下:

image

切換到上述的3個工具的所在目錄懦窘,如:E:\AndroidDevelopTool\Android反編譯工具包

image

接下來我們要做的就是運行apktool_2.0.1.jar這個jar文件來將apk文件進行反編譯,在java中稚配,運行可執(zhí)行jar包的命令是:

java -jar jar包名.jar

使用如下的命令運行apktool_2.0.1.jar反編譯MMTS-release-1.0.2.apk

java -jar apktool_2.0.1.jar d -f E:\AndroidDevelopTool\Android反編譯工具包\測試apk\MMTS-release-1.0.2.apk -o MMTS

這個命令是啟動apktool_2.0.1.jar將位于【E:\AndroidDevelopTool\Android反編譯工具包\測試apk\】目錄下的"MMTS-release-1.0.2.apk"這個apk反編譯畅涂,然后將反編譯生成的文件存放到當前目錄(apktool_2.0.1.jar所在的目錄,也就是"E:\AndroidDevelopTool\Android反編譯工具包"目錄)下的一個【MMTS】文件夾中道川。這個文件夾的名字是可以隨便取的午衰,喜歡叫啥都行。

執(zhí)行反編譯操作:

image

反編譯成功后冒萄,會在當前目錄(E:\AndroidDevelopTool\Android反編譯工具包)下生成一個MMTS文件夾臊岸,打開MMTS里面就有反編譯后生成的文件,如下圖所示:

image

打開MMTS文件夾尊流,就可以看到反編譯后的生成的文件帅戒,如下圖所示:

image

生成的文件和文件夾當中,我們關心的是【res】文件夾中和AndroidManifest.xml文件崖技,打開res文件夾逻住,里面就有我們想要看到的東西了,如下圖所示:

image
image
image
image

想查看哪個xml文件就使用文本編輯器打開看看吧迎献,反正全部都可以看到了瞎访。以上就是使用apktool這個工具將一個apk反編譯得到圖片、XML配置吁恍、語言資源等文件的過程扒秸。

2.2、使用dex2jar反編譯apk得到Java源代碼

將要反編譯的APK后綴名改為.rar或者 .zip践盼,并解壓鸦采,得到其中的classes.dex文件(它就是java文件編譯再通過dx工具打包而成的),如下圖所示:


261144175924946.gif

將獲取到的classes.dex放到之前解壓出來的工具【dex2jar-2.0】文件夾內(nèi)咕幻,如下圖所示:

image

在命令行下定位到dex2jar.bat所在目錄,輸入"d2j-dex2jar classes.dex"顶霞,效果如下:

image

命令執(zhí)行完成之后肄程,在當前目錄下就可以看到生成的Jar文件了锣吼,如下圖所示:

image

反編譯classes.dex得到classes-dex2jar.jar文件之后,就可以使用【jd-gui】工具將class文件反編譯成java源代碼了

image

使用jd-gui打開classes-dex2jar.jar就可以看到源代碼了蓝厌,如下圖所示:

image

JD-GUI雖然可以將class反編譯成java源代碼玄叠,但是對于一些被混淆過的class,反編譯的效果就不是那么理想了拓提,被混淆過的class反編譯后的效果圖(類文件名稱以及里面的方法名稱都會以a,b,c....之類的樣式命名):

image

以上步驟是我親自實踐過之后一步步整理出來的读恃,對照著做應該不會有太大問題。

三代态、Apk反編譯注意問題

3.1寺惫、apktool版本太舊導致反編譯失敗的問題

之前用過了apktool這個工具的一些舊版本,發(fā)現(xiàn)總是反編譯不成功蹦疑,在執(zhí)行反編譯時會出現(xiàn)如下錯誤:

Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file

image

這個問題是因為apktool版本過低導致,而解決這個問題的辦法就是使用最新版本的apktool就可以了西雀,最新版本的下載地址:https://bitbucket.org/iBotPeaches/apktool/downloads

3.2、apktool執(zhí)行反編譯命令出現(xiàn)”Input file was not found or was not readable"的問題

這個問題是因為apktool升級到2.0以上時,使用方式已經(jīng)替換,格式為:apktool d [-s] -f <apkPath> -o <folderPath>

好了歉摧,關于反編譯apk的內(nèi)容就這么多了艇肴。
最后,給大家分享我下載好的那三個相關工具叁温,下載地址:http://pan.baidu.com/s/1jGKSQyU

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末再悼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子膝但,更是在濱河造成了極大的恐慌帮哈,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锰镀,死亡現(xiàn)場離奇詭異娘侍,居然都是意外死亡,警方通過查閱死者的電腦和手機泳炉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門憾筏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人花鹅,你說我怎么就攤上這事氧腰。” “怎么了刨肃?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵古拴,是天一觀的道長。 經(jīng)常有香客問我真友,道長黄痪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任盔然,我火速辦了婚禮桅打,結(jié)果婚禮上是嗜,老公的妹妹穿的比我還像新娘。我一直安慰自己挺尾,他們只是感情好鹅搪,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遭铺,像睡著了一般丽柿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魂挂,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天甫题,我揣著相機與錄音,去河邊找鬼锰蓬。 笑死幔睬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的芹扭。 我是一名探鬼主播麻顶,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舱卡!你這毒婦竟也來了辅肾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤轮锥,失蹤者是張志新(化名)和其女友劉穎矫钓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舍杜,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡新娜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了既绩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片概龄。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饲握,靈堂內(nèi)的尸體忽然破棺而出私杜,到底是詐尸還是另有隱情,我是刑警寧澤救欧,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布衰粹,位于F島的核電站,受9級特大地震影響笆怠,放射性物質(zhì)發(fā)生泄漏铝耻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一骑疆、第九天 我趴在偏房一處隱蔽的房頂上張望田篇。 院中可真熱鬧替废,春花似錦箍铭、人聲如沸泊柬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兽赁。三九已至,卻和暖如春冷守,著一層夾襖步出監(jiān)牢的瞬間刀崖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工拍摇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亮钦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓充活,卻偏偏與公主長得像蜂莉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子混卵,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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

  • 轉(zhuǎn)載https://blog.csdn.net/s13383754499/article/details/7891...
    甄姝兒閱讀 1,175評論 2 9
  • 一映穗、準備必要工具 反編譯的前提 首先要配置jdk 環(huán)境變量 否則無法編譯 如果已經(jīng)配置好環(huán)境了可以忽略配置流程 ...
    冰封漠_閱讀 747評論 0 0
  • apk是安卓工程打包的最終形式,將apk安裝到手機或者模擬器上就可以使用APP幕随。反編譯apk則是將該安卓工程的源碼...
    隋胖胖LoveFat閱讀 66,637評論 6 56
  • 前言 處理反編譯蚁滋,首先先要了解apk文件的結(jié)構(gòu),然后是編譯過程赘淮,最后是反編譯辕录。反編譯Apk的目的就是Apk拆成我們...
    yzzCool閱讀 5,710評論 0 8
  • 1. 為什么要反編譯? 場景一 產(chǎn)品經(jīng)理:xxx梢卸,反編譯xxx的播放器走诞,看看他們是怎么實現(xiàn)的? 場景二 測試:這個...
    傷口不該結(jié)疤閱讀 12,144評論 7 51