APK反編譯詳解

原文地址: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文件,解壓之後一般會得到包含如下文件的目錄:

QQ圖片20150420095243.png

這裏只有classes.dex文件有用,將這個classes.dex拷貝到dex2jar的dex2jar.bat所在目錄,然後在命令行下定位到dex2jar.bat所在目錄,運行:

1
dex2jar.bat  classes.dex

 QQ圖片20150420100440.png


然後在同一目錄下就會生成classes_dex2jar.jar文件。

我們用jd-gui打開這個jar文件就可以看到java代碼了。

QQ圖片20150420100847.png

從反編譯出的代碼可以看出,這個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。

如果不知道怎麼做,或者無法下載,直接使用我在文章末尾給出的工具包就行了,我已經弄好了。

QQ圖片20150420102332.png

首先定位到apktool所在的目錄,然後執行:

1
apktool   d   souhushipin.apk   souhushipin

命令行解釋:apktool   d   [apk文件 ]   [輸出文件夾]

其中[apk文件 ]和[輸出文件夾]都直接在apktool的根目錄的話,就不需要寫絕對路徑了,直接寫文件和目錄名。

爲了命令行書寫方便我都是直接將apk文件放在同一目錄下。如下:

QQ圖片20150420103946.png


其中[輸出文件夾]只需指定就好了,不要自己新建目錄,他會自動生成。如上圖,執行了

1
apktool   d   souhushipin.apk   souhushipin

之後,就會在同一目錄下得到souhushipin文件夾。裏面有這些東西:

QQ圖片20150420104201.png

和dex2jar反編譯出的java代碼不同,apktool反編譯出的資源文件都是可以直接使用的,不存在混淆的問題。

重新打包修改過的apk

apktool還可以將反編譯完的文件重新打包成apk,很簡單,輸入apktool b [文件夾](你編譯出來文件夾)即可,命令如下:

1
apktool   d   b  souhushipin

QQ圖片20150420105823.png

運行之後會在souhushipin目錄下生成

build

dist

兩個文件夾。

QQ圖片20150420110111.png

其中,打包生成的souhushipin.apk,在上面的dist文件夾下。

想想這種方法是不是可以用於apk的漢化呢。。。。


最後我把所有用到的工具都放在一個包中,而且apktool的兩個東西我都已經弄在一起了,解壓後就可以直接使用。

下載地址: 反編譯工具集 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章