早在4年前我曾發表過一篇關於《Android開發之反編譯與防止反編譯》的文章,在該文章中我對如何在Windows平臺反編譯APK作了講解,現在用Mac系統的同窗愈來愈多,也有不少朋友問我可否出一篇關於如何在Mac平臺上反編譯APK的文章,今天呢我就抽時間來寫一下在Mac平臺上如何反編譯APK,但願對感興趣的同窗能有學幫助。git
在開始講解反編譯以前呢,咱們先來掃個盲:github
APK的全程是Android application package,是Android的應用程序包,平時咱們安裝Android應用的時候須要將APK文件下載到本地而後安裝,Android系統會將其識別爲Android應用包。另外,須要指出的是APK 實際上是一個基於 ZIP 文件格式的文件,因此支持你用解壓軟件將其解壓,當你將APK文件解壓以後你會看到以下文件:安全
瞭解過,APK的以後,接下來就給你們介紹反編譯一個APK所須要那些工具:bash
不管是在Windows平臺仍是在Mac平臺,反編譯APK都離不了ApkTool、dex2jar、JD-GUI 這三種工具,那麼這三種工具都是作什麼用的呢?app
介紹過ApkTool、dex2jar、JD-GUI 的做用後,接下來咱們作一些反編譯前的準備工做,首先呢咱們須要安裝ApkTool。工具
你們能夠從ibotpeaches.github.io/Apktool/ins…上下載ApkTool,也能夠下載我爲你們準備好的ApkTool、dex2jar、JD-GUI。佈局
apktool
文件與apktool_2.3.1.jar
文件準備好,並將apktool_2.3.1.jar
改名爲apktool.jar
;apktool.jar
與apktool
移動到/usr/local/bin
目錄下(能夠經過在終端中輸出命令open /usr/local/bin
來打開這個目錄);chmod +x apktool.jar
chmod +x apktool
複製代碼
apktool
看是否能夠運行,若是不能夠須要在系統偏好設置
中打開安全與隱私
中點擊仍要運行apktool.jar;至此ApkTool的安裝便完成了,在終端運行apktool
命令會看到以下輸出:字體
你們能夠從sourceforge.net/projects/de…上下載dex2jar,也能夠下載我爲你們準備好的ApkTool、dex2jar、JD-GUI。 下載後直接解壓便可。ui
你們能夠從jd.benow.ca/上下載JD-GUI,也能夠下載我爲你們準備好的ApkTool、dex2jar、JD-GUI。spa
cd /你存放apk的目錄或在下面命令中使用xxx.apk文件的絕對路徑
apktool d xxx.apk //該命令執行後會在同級目錄下生成一個與你編譯的apk同名的目錄
複製代碼
經過上述命令就能夠反編譯apk了。
而後在反編譯後生成的目錄中你會看到相關的資源文件:
因爲APkTool只能將資源文件提取處理,對於.dex類型的文件是沒法查看的,這裏就須要用到dex2jar了。
使用解壓軟件將apk進行解壓:
也可將apk文件的後綴改成.rar而後雙擊進行快速解壓。
從上圖中能夠看到有2個classes.dex文件(這是由於應用了MultiDex所致)這就是項目的源碼 將這個兩個文件拷貝到下載解壓的dex2jar目錄下:
而後執行以下代碼進行反編譯:
cd /你的dex2jar解壓目錄 也就是上面圖中存放class.dex文件的目錄
sh d2j-dex2jar.sh classes.dex
sh d2j-dex2jar.sh classes2.dex
複製代碼
經過上述命令會獲得兩個.jar文件:
將dex轉換成jar以後接下來咱們就可使用JD-GUI來查看反編譯後的程序源碼了:
操做步驟很簡單,只需雙擊運行jd-gui-1.4.0.jar
,而後將classes-dex2jar.jar
拖拽到JD-GUI界面上便可:
爲d2j_invoke.sh增長權限:
sudo chmod +x d2j_invoke.sh //sudo chmod +取消權限
複製代碼
Apktool的bug使用其餘版本的Apktool,我在使用apktool_2.3.3.jar中遇到了這個問題,使用如apktool_2.3.1.jar
是好的,若是你也遇到了這個問題不妨換個Apktool版本試一下。