天天看點

Android 反編譯apk經典

一、工具  

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/

Android 反編譯apk經典

二、Apk反編譯流程

将【dex2jar-2.0.zip】和【jd-gui-windows-1.3.0.zip】分别解壓到目前檔案夾,如下圖所示:

Android 反編譯apk經典

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

Android 反編譯apk經典

反編譯成功後,會在目前目錄( D:\soft\apk)下生成一個Ky檔案夾,打開Ky裡面就有反編譯後生成的檔案,如下圖所示:

Android 反編譯apk經典

生成的檔案和檔案夾當中,我們關心的是【res】檔案夾中和AndroidManifest.xml檔案。

2.2、使用dex2jar反編譯apk得到Java源代碼

将要反編譯的APK字尾名改為.rar或者 .zip,并解壓,得到其中的classes.dex檔案(它就是java檔案編譯再通過dx工具打包而成的),如下圖所示:

Android 反編譯apk經典

将擷取到的classes.dex放到之前解壓出來的工具【dex2jar-2.0】檔案夾内,如下圖所示:

Android 反編譯apk經典

在指令行下定位到dex2jar.bat所在目錄,輸入"d2j-dex2jar classes.dex",

指令執行完成之後,在目前目錄下就可以看到生成的Jar檔案了,如下圖所示:

Android 反編譯apk經典
Android 反編譯apk經典

把生成的classes-dex2jar.jar 拷入解壓目錄

Android 反編譯apk經典

2.3、使用【jd-gui】工具将class檔案反編譯成java源代碼

反編譯classes.dex得到classes-dex2jar.jar檔案之後,就可以使用【jd-gui】工具将class檔案反編譯成java源代碼了

Android 反編譯apk經典
Android 反編譯apk經典
Android 反編譯apk經典

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

Android 反編譯apk經典

當我們可以看到源代碼後,配合解壓的資源檔案,AndroidManifest,和class類代碼,id資源類更友善代碼閱讀,一些代碼混淆的類不友善閱讀,我們再用其他工具和方法進行恢複