反編譯Android APK詳細操做指南[ApkTool,dex2jar,JD-GUI](Mac)

早在4年前我曾發表過一篇關於《Android開發之反編譯與防止反編譯》的文章,在該文章中我對如何在Windows平臺反編譯APK作了講解,現在用Mac系統的同窗愈來愈多,也有不少朋友問我可否出一篇關於如何在Mac平臺上反編譯APK的文章,今天呢我就抽時間來寫一下在Mac平臺上如何反編譯APK,但願對感興趣的同窗能有學幫助。git

在開始講解反編譯以前呢,咱們先來掃個盲:github

什麼是APK?

APK的全程是Android application package,是Android的應用程序包,平時咱們安裝Android應用的時候須要將APK文件下載到本地而後安裝,Android系統會將其識別爲Android應用包。另外,須要指出的是APK 實際上是一個基於 ZIP 文件格式的文件,因此支持你用解壓軟件將其解壓,當你將APK文件解壓以後你會看到以下文件:安全

APK文件結構

  • .dex代碼文件:它是classes文件經過DEX編譯後的文件格式,用於在Dalvik虛擬機上運行的主要代碼部分;
  • resources 資源文件:以resources以及res目錄爲表明的Android程序中所須要的一些資源,如圖片資源,顏色資源,字符串,佈局等;
  • assets文件:assets目錄下存放的是原生資源文件,好比在裏面存放字體,鈴聲等;
  • manifest清單文件:以AndroidManifest.xml爲表明的Android清單文件,清單文件向 Android 系統提供應用的必要信息,系統必須具備這些信息方可運行應用的任何代碼。

瞭解過,APK的以後,接下來就給你們介紹反編譯一個APK所須要那些工具:bash

反編譯一個APK須要那些工具?

不管是在Windows平臺仍是在Mac平臺,反編譯APK都離不了ApkTool、dex2jar、JD-GUI 這三種工具,那麼這三種工具都是作什麼用的呢?app

  • ApkTool:是一款應用在Apk上的逆向工程的工具,它有編譯、反編譯、簽名等功能,在這篇文章中會講解如何利用ApkTool查看apk的xml文件、AndroidManifest.xml和圖片等。
  • dex2jar:顧名思義,這款工具的做用主要是將dex文件轉換成jar文件,轉換成jar後咱們纔好藉助JD-GUI來查看反編譯dex後的代碼;
  • JD-GUI:一款Java反編譯器GUI,經過它咱們能查看到反編譯後的dex的代碼,一般須要配合dex2jar使用;

準備工做(安裝ApkTool、dex2jar、JD-GUI的具體流程)

介紹過ApkTool、dex2jar、JD-GUI 的做用後,接下來咱們作一些反編譯前的準備工做,首先呢咱們須要安裝ApkTool。工具

ApkTool

下載ApkTool

你們能夠從ibotpeaches.github.io/Apktool/ins…上下載ApkTool,也能夠下載我爲你們準備好的ApkTool、dex2jar、JD-GUI佈局

安裝ApkTool

  1. 將下載好的apktool文件與apktool_2.3.1.jar文件準備好,並將apktool_2.3.1.jar改名爲apktool.jar
  2. apktool.jarapktool移動到/usr/local/bin目錄下(能夠經過在終端中輸出命令open /usr/local/bin來打開這個目錄);
  3. 爲上述兩個文件增長可執行權限,即在終端中輸入並執行:
    chmod +x apktool.jar
    chmod +x apktool
    複製代碼
  4. 在終端輸入apktool看是否能夠運行,若是不能夠須要在系統偏好設置中打開安全與隱私中點擊仍要運行apktool.jar;

至此ApkTool的安裝便完成了,在終端運行apktool命令會看到以下輸出:字體

apktool

dex2jar

下載dex2jar

你們能夠從sourceforge.net/projects/de…上下載dex2jar,也能夠下載我爲你們準備好的ApkTool、dex2jar、JD-GUI。 下載後直接解壓便可。ui

JD-GUI

下載JD-GUI

你們能夠從jd.benow.ca/上下載JD-GUI,也能夠下載我爲你們準備好的ApkTool、dex2jar、JD-GUIspa

使用ApkTool反編譯APK獲得xml文件、AndroidManifest.xml和圖片

cd /你存放apk的目錄或在下面命令中使用xxx.apk文件的絕對路徑
apktool d xxx.apk //該命令執行後會在同級目錄下生成一個與你編譯的apk同名的目錄
複製代碼

經過上述命令就能夠反編譯apk了。

apktool d

而後在反編譯後生成的目錄中你會看到相關的資源文件:

apktool反編譯

因爲APkTool只能將資源文件提取處理,對於.dex類型的文件是沒法查看的,這裏就須要用到dex2jar了。

dex2jar將dex反編譯成jar

第一步,解壓apk得到dex文件

使用解壓軟件將apk進行解壓:

unzip-apk.png

也可將apk文件的後綴改成.rar而後雙擊進行快速解壓。

使用解壓軟件打開apk 和使用apktool反編譯出的apk不一樣

  • 直接解壓apk和使用apktool反編譯apk都能得到AndroidManifest.xml,但直接解壓得到的AndroidManifest.xml是亂碼的,沒法直接查看;
  • 直接解壓apk得到res資源文件是不包含resources.arsc部分的,而使用apktool反編譯出來的res是包含的;

apktool-unzip.png

從上圖中能夠看到有2個classes.dex文件(這是由於應用了MultiDex所致)這就是項目的源碼 將這個兩個文件拷貝到下載解壓的dex2jar目錄下:

classes.dex.png

而後執行以下代碼進行反編譯:

cd /你的dex2jar解壓目錄 也就是上面圖中存放class.dex文件的目錄
sh d2j-dex2jar.sh classes.dex
sh d2j-dex2jar.sh classes2.dex
複製代碼

經過上述命令會獲得兩個.jar文件:

classes-dex2jar.jar

使用JD-GUI查看反編譯後的程序源碼

將dex轉換成jar以後接下來咱們就可使用JD-GUI來查看反編譯後的程序源碼了:

操做步驟很簡單,只需雙擊運行jd-gui-1.4.0.jar,而後將classes-dex2jar.jar拖拽到JD-GUI界面上便可:

jd-gui

FAQ

Permission denied d2j_invoke.sh

爲d2j_invoke.sh增長權限:

sudo chmod +x d2j_invoke.sh //sudo chmod +取消權限
複製代碼

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

Apktool的bug使用其餘版本的Apktool,我在使用apktool_2.3.3.jar中遇到了這個問題,使用如apktool_2.3.1.jar是好的,若是你也遇到了這個問題不妨換個Apktool版本試一下。

Exception in thread "main"

參考

相關文章
相關標籤/搜索