APK反編譯

轉(zhuǎn)載https://blog.csdn.net/s13383754499/article/details/78914592
學(xué)習(xí)和開發(fā)Android應(yīng)用有一段時間了,今天寫一篇博客總結(jié)一下Android的apk文件反編譯。我們知道,Android應(yīng)用開發(fā)完成之后,我們最終都會將應(yīng)用打包成一個apk文件,然后讓用戶通過手機(jī)或者平板電腦下載下來進(jìn)行安裝。正常情況下,Android應(yīng)用打包成apk之后,就無法再看到開發(fā)這個應(yīng)用時使用的資源文件以及代碼了。但是我們通過網(wǎng)上提供了一些工具,還是可以將apk進(jìn)行反編譯的,apk反編譯之后,我們就可以看到開發(fā)這個應(yīng)用使用的資源文件(圖片)、layout、樣式、相關(guān)的實(shí)現(xiàn)代碼等,apk反編譯也算是Android開發(fā)中一個比較實(shí)用的技巧吧,當(dāng)我們對別人開發(fā)好的應(yīng)用感興趣時,我們就可以通過這種技術(shù)手段將別人打包好的apk進(jìn)行反編譯,繼而可以看到我們感興趣的內(nèi)容,(注:反編譯不是讓各位開發(fā)者去對一個應(yīng)用破解搞重裝什么的,主要目的是為了促進(jìn)開發(fā)者學(xué)習(xí),借鑒好的代碼,提升自我開發(fā)水平。)下面就來說說如何將一個apk反編譯出來。

一、準(zhǔn)備必要工具

工欲善其事,必先利其器,首先我們要下載好反編譯apk時需要的相關(guān)工具

1.1、使用工具

  1. apktool (資源文件獲?。?/li>
  2. dex2jar(源碼文件獲?。?/li>
  3. jd-gui (源碼查看)

1.2、工具介紹

**  apktool **

    作用:資源文件獲取,可以提取出圖片文件和布局文件進(jìn)行使用查看

  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個相關(guān)工具都下載好了,在這里說明一下jd-gui的下載,我從官方網(wǎng)站上點(diǎn)擊[圖片上傳失敗...(image-3ea758-1530693493170)]

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

image.png

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

二、Apk反編譯流程

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


image.png

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

image.png

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

進(jìn)入CMD命令行,如下:

image.png

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

image.png

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

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

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

<pre style="box-sizing: border-box; outline: 0px; padding: 8px; margin: 0px 0px 24px; position: relative; white-space: pre-wrap; word-wrap: break-word; overflow-x: auto; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; color: rgb(0, 0, 0); word-break: break-all;">java -jar apktool_2.0.1.jar d -f E:\AndroidDevelopTool\Android反編譯工具包\測試apk\MMTS-release-1.0.2.apk -o MMTS</pre>

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

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


image.png

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

image.png

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

image.png

生成的文件和文件夾當(dāng)中,我們關(guān)心的是【res】文件夾中和AndroidManifest.xml文件,打開res文件夾,里面就有我們想要看到的東西了,如下圖所示:

image.png
image.png
image.png

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

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

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

image

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


image.png

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

image.png

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

image.png

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

image.png

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

image

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

image.png

以上步驟是我親自實(shí)踐過之后一步步整理出來的,對照著做應(yīng)該不會有太大問題。

三、Apk反編譯注意問題

3.1、apktool版本太舊導(dǎo)致反編譯失敗的問題

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

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


image.png

這個問題是因?yàn)閍pktool版本過低導(dǎo)致,而解決這個問題的辦法就是使用最新版本的apktool就可以了,最新版本的下載地址:https://bitbucket.org/iBotPeaches/apktool/downloads

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

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 處理反編譯,首先先要了解apk文件的結(jié)構(gòu),然后是編譯過程,最后是反編譯。反編譯Apk的目的就是Apk拆成我們...
    yzzCool閱讀 5,885評論 0 8
  • apk是安卓工程打包的最終形式,將apk安裝到手機(jī)或者模擬器上就可以使用APP。反編譯apk則是將該安卓工程的源碼...
    隋胖胖LoveFat閱讀 67,198評論 6 56
  • 1. 為什么要反編譯? 場景一 產(chǎn)品經(jīng)理:xxx,反編譯xxx的播放器,看看他們是怎么實(shí)現(xiàn)的? 場景二 測試:這個...
    傷口不該結(jié)疤閱讀 12,440評論 7 51
  • 作為一名客戶端開發(fā)者,在使用別人Android應(yīng)用的時候,你可能會遇到一些你覺得非常不錯或者精致的布局、動畫,你想...
    愛情小傻蛋閱讀 1,472評論 2 1
  • 一直以來,我不管在任何地方,都是那種中間的,就是沒有一項(xiàng)是突出的,長相不出眾,不是指顏值高,而是長的不管丑還是帥,...
    俗子丑閱讀 224評論 0 0

友情鏈接更多精彩內(nèi)容