- 使用ApkTool以及dex2jar對apk進行反編譯
- 相關工具下載下傳位址
- 使用ApkTool對apk進行反編譯以及打包
- 下載下傳并解壓ApkTool
- 使用ApkTool對apk進行反編譯
- 使用ApkTool對apk進行打包
- 使用Dex2Jar以及JD-GUI反編譯apk
- 下載下傳Dex2Jar以及JD-GUI
- 使用dex2jarbat得到jar檔案
- 使用JD-GUI打開jar檔案
- 總結
- 更新異常以及解決方案
- Input file xxx was not found or was not readable
- Caused by javaioIOException Expected 0x001c0001 got 0x00000000
- Exception in thread main javalangNullPointerException
使用ApkTool以及dex2jar對apk進行反編譯
相關工具下載下傳位址:
ApkTool: https://ibotpeaches.github.io/Apktool/
Dex2Jar: https://sourceforge.net/projects/dex2jar/
JD-GUI: http://jd.benow.ca/jd-eclipse/update/#jd-gui-download
使用ApkTool對apk進行反編譯以及打包
1.下載下傳并解壓ApkTool
在cmd指令行中進入ApkTool的檔案夾(win7系統以上快捷鍵為shift+滑鼠右鍵),輸入apktool,出現如下圖檔中的提示資訊,表示成功。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISM2ITN1MTM2ETNwkDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
注意的是,在apktool.bat中,可以修改使用的apktool.jar的版本。
2.使用ApkTool對apk進行反編譯
在cmd指令行中進入ApkTool的檔案夾,反編譯指令:apktool.bat d [apk檔案] [輸出檔案夾]
測試如下圖,成功後,會在指定的輸出檔案夾下生成反編譯後的檔案。
3.使用ApkTool對apk進行打包
在cmd指令行中進入ApkTool的檔案夾,打包指令:apktool.bat b [資源檔案夾] [打包生成的apk檔案]
測試如下圖,成功後,會在指定的輸出檔案夾下生成打包好的apk檔案。
注意,這裡打包的apk檔案是未經過簽名的,可以看到在安裝的時候會提示如下錯誤,如果需要安裝,解決方法是需要進行重新簽名。
使用Dex2Jar以及JD-GUI反編譯apk
使用dex2jar可以将apk檔案中的dex檔案轉換成jar檔案,然後就可以通過JD-GUI打開得到的jar檔案來檢視相應的Java代碼。
1.下載下傳Dex2Jar以及JD-GUI
工具的下載下傳位址見文章上方
2.使用dex2jar.bat得到jar檔案
将需要反編譯apk的字尾格式改成zip,然後使用解壓出來,其中的classes.dex就是我們需要進行反編譯的部分。
在cmd指令行中進入Dex2Ja檔案夾,反編譯指令:d2j-dex2jar.bat [classes.dex檔案]
成功後,會在Dex2Ja檔案夾下生成classes-dex2jar.jar檔案,這個jar檔案就是反編譯後的檔案。
3.使用JD-GUI打開jar檔案
使用JD-GUI軟體打開classes-dex2jar.jar檔案,就可以檢視反編譯的代碼了。
注意的是,如果進行反編譯的apk進行了混淆處理,那麼我們反編譯看到的基本就很難閱讀了。
總結
使用ApkTool對apk檔案進行反編譯,将dex檔案轉成了smali檔案,更适合提取apk中的資源檔案,比如布局檔案以及圖檔等資源。
使用Dex2Jar對apk進行反編譯,最終将dex檔案轉化成了jar檔案,通過JD-GUI打開,對于未混淆的apk來說,更适合通過反編譯來看相應得Java源碼。
更新異常以及解決方案
在使用ApkTool進行反編譯的時候,有時候我們會遇到如下的異常,下面我來貼出一下我的解決方法,希望可以給遇到問題的同學們幫助。
錯誤類型:
- Input file xxx was not found or was not readable.
- Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
- Exception in thread “main” java.lang.NullPointerException I: Loading resource table from file: C:\Users\使用者名\apktool\framework\1.apk
Input file xxx was not found or was not readable
這種問題是在2.1.0中,反編譯的指令與1.5.3不同了,如果需要指定反編譯輸出檔案夾,需要在前面加 -o 表示輸出檔案夾。
成功如下:
Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
這種問題一般是apktool的版本不比對導緻的,解決方案:
- 第一種是修改目前項目的sdk的buildtools版本,在目前項目中的project.properties檔案中修改。
- 第二種是使用新版的apktool進行反編譯,但是切換apktool版本可能會遇到下一個問題,具體解決方案見下文。
使用ApkTool以及dex2jar對apk進行反編譯-更新異常以及解決方案使用ApkTool以及dex2jar對apk進行反編譯
Exception in thread “main” java.lang.NullPointerException
這個問題一般是切換apktool的jar包版本問題導緻的,可以在指令行中看到錯誤提示:I: Loading resource table from file: C:\Users\使用者名\apktool\framework\1.apk。
解決方法,隻要把指令行提示中的framework檔案夾中的1.apk檔案删掉,重新進行反編譯即可解決問題。