原文地址:APK反編譯詳解
這裏的反編譯的目的並不是修改別人的代碼然後自己發佈盜版apk,而且這種方法也做不到。這裏的反編譯只能查看作者的大致代碼,目的是研究apk中某些效果的實現方法,知道大致的方法之後,具體代碼還需自己寫。
apk的反編譯分爲兩部分,一是反編譯classes.dex得到java代碼,二是反編譯資源文件以及xml佈局文件,這兩部分是分開的,並且使用的是不同的工具。
這些工具分別是apktool、dex2jar和jd-gui,其中apktool用於反編譯xml文件;apktool用於反編譯classes.dex,生成.jar文件,然後用jd-gui.exe查看這個jar文件中的java代碼。
我用的apktool和dex2jar的版本分別是apktool1.5.2 和 dex2jar-0.0.9.15。
下載地址見文末。
一、反編譯Apk得到Java源代碼
先將apk文件的後綴名改成zip,然後解壓這個zip文件,解壓之後一般會得到包含如下文件的目錄:
這裏只有classes.dex文件有用,將這個classes.dex拷貝到dex2jar的dex2jar.bat所在目錄,然後在命令行下定位到dex2jar.bat所在目錄,運行:
1
|
dex2jar.bat classes.dex |
然後在同一目錄下就會生成classes_dex2jar.jar文件。
我們用jd-gui打開這個jar文件就可以看到java代碼了。
從反編譯出的代碼可以看出,這個apk的代碼混淆做的比較好,不容易分析出其代碼結構。
二、反編譯apk的xml,圖片等資源文件。
直接解壓apk也能得到圖片、xml等資源文件,但是得到的xml是亂碼,而圖片資源也也不是原封不動的,特別是.9圖片,全都變成了一般的圖片。
apktool專門用於反編譯這些資源文件。
下載:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(兩個包都下載),將下載的兩個包解壓到同一個文件夾下,應該會有三個文件:aapt.exe,apktool.bat,apktool.jar。
如果不知道怎麼做,或者無法下載,直接使用我在文章末尾給出的工具包就行了,我已經弄好了。
首先定位到apktool所在的目錄,然後執行:
1
|
apktool d souhushipin.apk souhushipin |
命令行解釋:apktool d [apk文件 ] [輸出文件夾]
其中[apk文件 ]和[輸出文件夾]都直接在apktool的根目錄的話,就不需要寫絕對路徑了,直接寫文件和目錄名。
爲了命令行書寫方便我都是直接將apk文件放在同一目錄下。如下:
其中[輸出文件夾]只需指定就好了,不要自己新建目錄,他會自動生成。如上圖,執行了
1
|
apktool d souhushipin.apk souhushipin |
之後,就會在同一目錄下得到souhushipin文件夾。裏面有這些東西:
和dex2jar反編譯出的java代碼不同,apktool反編譯出的資源文件都是可以直接使用的,不存在混淆的問題。
重新打包修改過的apk
apktool還可以將反編譯完的文件重新打包成apk,很簡單,輸入apktool b [文件夾](你編譯出來文件夾)即可,命令如下:
1
|
apktool d b souhushipin |
運行之後會在souhushipin目錄下生成
build
dist
兩個文件夾。
其中,打包生成的souhushipin.apk,在上面的dist文件夾下。
想想這種方法是不是可以用於apk的漢化呢。。。。
最後我把所有用到的工具都放在一個包中,而且apktool的兩個東西我都已經弄在一起了,解壓後就可以直接使用。
下載地址: 反編譯工具集 。