linux下反編譯android apk

一、所須要的工具
java

1)apktool,功能:反編譯出apk所須要的資源文件和佈局設置文件等,linux

下載地址:https://code.google.com/p/android-apktool/downloads/list
android

須要下載apktool1.5.2.tar.bz2 和apktool-install-Linux-r05-ibot.tar.bz2 這兩個文件,並把解壓後的文件放在同一個文件夾中。app

 

2)dex2jar,功能:反編譯出jar文件,即apk的源程序文件的字節碼,工具

下載地址:http://code.google.com/p/dex2jar/downloads/list佈局

 

3)jdgui,功能:查看dex2jar反編譯出的jar文件,使用該工具能夠看到字節碼對應的Java源代碼,這個我在官網上沒有找到,而後本身在網上下載的,但試驗過能用。點擊打開後,以下圖所示:ui


 

二、反編譯過程
1)反編譯出資源文件
使用apktool工具,進入apktool所在的目錄下,使用以下的命令:
    ./apktool d ./xxx.apk(apk所在的路徑)
google

d表示decode,在當前目錄下就會生成一個名爲xxx的目錄,裏面就是反編譯出來的各類資源文件,其中res表示資源文件,smali表示源代碼,不過是字節碼,不能直接查看。spa

以本人的實驗爲例子,以下圖所示:.net

此時會在當前目錄下生成一個目錄app-debug。

 

2)源代碼的反編譯
a)由於apk文件實際上是使用zip進行打包壓縮生成的文件,因此先把xxx.apk文件更名爲xxx.zip文件,並對其進行解壓。
b)進入解壓後的目錄,其中有一個classes.dex文件,這個文件就是java文件編譯再經過dx工具打包而成的,源代碼就包含在這個文件中。
c)把前一步生成的文件classes.dex複製到dex2jar工具的根目錄中,並使用以下命令對其進行反編譯:
    ./dex2jar.sh d classes.dex
就會在當前目錄下生成一個classes_dex2jar.jar文件

d)點擊打開jdgui工具,這是一個圖形化的工具,而後打開上上述的classes_dex2jar.jar文件就能夠看到apk對應的源代碼。

對於本人的實驗以下:

 

源代碼與反編譯出來的代碼比較以下(白色爲反編譯內容,黑色爲原內容):

相關文章
相關標籤/搜索