1. 程式人生 > >Android apk反編譯-----【附:反編譯工具】

Android apk反編譯-----【附:反編譯工具】

        Android應用開發完成之後,我們最終都會將應用打包成一個apk檔案,然後讓使用者通過手機或者平板電腦下載下來進行安裝。正常情況下,Android應用打包成apk之後,就無法再看到開發這個應用時使用的資原始檔以及程式碼了。但是我們通過網上提供了一些工具,還是可以將apk進行反編譯的,apk反編譯之後,我們就可以看到開發這個應用使用的資原始檔(圖片)、layout、樣式、相關的實現程式碼等,apk反編譯也算是Android開發中一個比較實用的技巧吧,當我們對別人開發好的應用感興趣時,我們就可以通過這種技術手段將別人打包好的apk進行反編譯,繼而可以看到我們感興趣的內容,(注:反編譯不是讓各位開發者去對一個應用破解搞重灌什麼的,主要目的是為了促進開發者學習,借鑑好的程式碼,提升自我開發水平。)

           目錄

1. 使用工具介紹:

2. 工具包下載:

3. APK反編譯流程

4. Apk反編譯註意問題


1. 使用工具介紹:

    apktool      作用:資原始檔獲取,能夠提取出圖片檔案和佈局檔案進行使用檢視

    dex2jar      作用:將apk反編譯成java原始碼(classes.dex轉化成jar檔案)

    jd-gui

         作用:檢視apk中classes.dex轉化成出的jar檔案,即原始碼檔案

2. 工具包下載:

    完整反編譯工具包下載:https://download.csdn.net/download/weixin_38327420/10773315

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

   

dex2jar下載地址:https://sourceforge.net/projects/dex2jar/files/

 

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

3. APK反編譯流程

3.1  為了方便進行反編譯,將上述下載好的3個工具放一個資料夾中,存放地址:E:\AndroidDecompileTool如下工具包:

3.2  然後將 dex2jar-2.0.zip 和 jd-gui-windows-1.4.0.zip 分別解壓到當前資料夾,如下圖所示:

3.3  使用apktool反編譯apk得到圖片、XML配置、語言資源等檔案

(1)win + r  進入CMD

        輸入命令:cd E:\AndroidDecompileTool 切換到工具包所在目錄:E:\AndroidDecompileTool ,執行結果如下:

(2)使用命令執行apktool_2.3.4.jar反編譯apk檔案(這裡反編譯檔案是:youxin_88.apk)

        輸入命令:java -jar apktool_2.3.4.jar d -f E:\AndroidDecompileTool\testAPK\youxin_88.apk -o YOUXIN 執行結果如下:

        命令格式: java -jar apktool_2.3.4.jar d -f 【..\test.apk】 -o 【test】

     (命令中【..\test.apk】指的是要反編譯的APK檔案路徑,【test】為反編譯後資原始檔存放的資料夾名稱)

(3)檢視反編譯後資原始檔存放的資料夾【YOUXIN】,如下圖:

(4)開啟YOUXIN資料夾,就可以看到反編譯後的檔案,如下圖:

(5)生成的資料夾當中,我們關心的是【res】資料夾中和AndroidManifest.xml檔案,開啟res資料夾,裡面就有我們想要看到的東西了,如下圖所示:

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

3.4  使用dex2jar反編譯apk得到Java原始碼

(1)將要反編譯的APK字尾名改為.rar或者 .zip,並解壓,得到其中的classes.dex檔案,如下圖所示:

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

(3)在CMD命令列下定位到d2j-dex2jar.bat所在目錄,輸入命令:cd E:\AndroidDecompileTool\dex2jar-2.0

        然後輸入命令:d2j-dex2jar classes.dex    果如下:

              成功切換至d2j-dex2jar.bat目錄,然後執行d2j-dex2jar classes.dex 命令將classes.dex反編譯成jar包,執行的過程中如             果沒有出錯,就表示編譯成功。

(4)命令執行完成之後,在dex2jar-2.0目錄下就可以看到生成的Jar檔案了,如下圖所示:

(5)反編譯classes.dex得到classes-dex2jar.jar檔案之後,就可以使用【jd-gui】工具將class檔案反編譯成java原始碼了

(6)使用jd-gui開啟classes-dex2jar.jar就可以看到原始碼了,如下圖所示:

 JD-GUI雖然可以將class反編譯成java原始碼,但是對於一些被混淆過的class,反編譯的效果就不是那麼理想了,被混淆過的class反編譯後的效果圖(類檔名稱以及裡面的方法名稱都會以a,b,c....之類的樣式命名):

4. Apk反編譯註意問題

4.1  apktool版本太舊導致反編譯失敗的問題

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

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

  

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

4.2  apktool執行反編譯命令出現”Input file was not found or was not readable"的問題

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

 

 

 

參考文件:https://blog.csdn.net/s13383754499/article/details/78914592