一、工具
1.1、使用工具
apktool (資源檔案擷取)
作用:資源檔案擷取,可以提取出圖檔檔案和布局檔案進行使用檢視
dex2jar(源碼檔案擷取)作用:将apk反編譯成java源碼(classes.dex轉化成jar檔案)
jd-gui (源碼檢視)
作用:檢視APK中classes.dex轉化成出的jar檔案,即源碼檔案
1.2工具下載下傳
apktool下載下傳位址:https://bitbucket.org/iBotPeaches/apktool/downloads
dex2jar下載下傳位址:http://sourceforge.net/projects/dex2jar/files/
jd-gui下載下傳位址:http://jd.benow.ca/
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuUDNyMzNwETMzAjNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
二、Apk反編譯流程
将【dex2jar-2.0.zip】和【jd-gui-windows-1.3.0.zip】分别解壓到目前檔案夾,如下圖所示:
2.1、使用apktool反編譯apk得到圖檔、XML配置、語言資源等檔案
進入CMD指令行,切換到上述的3個工具的所在目錄,如:D:\soft\apk,
接下來我們要做的就是運作apktool_2.0.1.jar這個jar檔案來将apk檔案進行反編譯,在java中,運作可執行jar包的指令是:
java -jar jar包名.jar
java -jar apktool_2.3.4.jar d -f D:\apkde\Ky.apk -o Ky
反編譯成功後,會在目前目錄( D:\soft\apk)下生成一個Ky檔案夾,打開Ky裡面就有反編譯後生成的檔案,如下圖所示:
生成的檔案和檔案夾當中,我們關心的是【res】檔案夾中和AndroidManifest.xml檔案。
2.2、使用dex2jar反編譯apk得到Java源代碼
将要反編譯的APK字尾名改為.rar或者 .zip,并解壓,得到其中的classes.dex檔案(它就是java檔案編譯再通過dx工具打包而成的),如下圖所示:
将擷取到的classes.dex放到之前解壓出來的工具【dex2jar-2.0】檔案夾内,如下圖所示:
在指令行下定位到dex2jar.bat所在目錄,輸入"d2j-dex2jar classes.dex",
指令執行完成之後,在目前目錄下就可以看到生成的Jar檔案了,如下圖所示:
把生成的classes-dex2jar.jar 拷入解壓目錄
2.3、使用【jd-gui】工具将class檔案反編譯成java源代碼
反編譯classes.dex得到classes-dex2jar.jar檔案之後,就可以使用【jd-gui】工具将class檔案反編譯成java源代碼了
JD-GUI雖然可以将class反編譯成java源代碼,但是對于一些被混淆過的class,反編譯的效果就不是那麼理想了,被混淆過的class反編譯後的效果圖(類檔案名稱以及裡面的方法名稱都會以a,b,c…之類的樣式命名):
當我們可以看到源代碼後,配合解壓的資源檔案,AndroidManifest,和class類代碼,id資源類更友善代碼閱讀,一些代碼混淆的類不友善閱讀,我們再用其他工具和方法進行恢複