APK逆向工程

 最近在搞一個android的應用,找不到相關的源碼參考,只有apk文件,於是就琢磨能不能對apk做逆向工程,還原出源碼,呵呵,本人的很多同學是做芯片的,經常聽那些哥們談起芯片的逆向工程,可能受其影響吧。於是到網上找了一下,還真有這樣的技術。下面將我的方法和步驟詳細說明如下。我是在ubuntu下完成的,在以下的說明過程中,我同樣會對windows下的操作簡單提一下,不過沒試過,不一定行,希望列位看官謹慎從之。

 

     “工欲善其事,必先利其器”,做逆向工程在一定程度上如同小偷,電腦的黑客,都是精細的活,往往離不開趁手的傢伙。所以,首先列出所需的工具,概括起來,就是三大件:

1、dex2jar:將apk中的class.dex文件反編譯爲jar包

2、jd_gui:將jar反編譯爲.java文件

3、apktool:提取apk中的資源文件

三種工具的下載地址如下:

1、dex2jar:http://code.google.com/p/dex2jar/downloads/list

2、jd_gui:http://java.decompiler.free.fr/?q=jdgui

3。apktool:http://code.google.com/p/android-apktool/downloads/list

下載注意事項:

1、根據自己的系統平臺下載對應版本的工具,dex2jar貌似不支持Mac OS,其他兩種工具支持Windows,Linux,Mac OS。

2、apktool必須下載apktool-1.3.2.tar.bz2(目前最新版)和apk_install_系統平臺_版本號.tar.bz2,爲什麼要這樣,後面闡述。

 

     至此,萬事具備,不過還差東風,我們的東風就是需要一個.apk文件,這個簡單,不解釋。下面說明apk逆向工程的詳細步驟。

友情提示:以下步驟默認的是Ubuntu下的操作。

1 修改apk文件的擴展名改爲.zip,並解壓,獲取其中的class.dex文件。 

2、利用dex2jar從class.dex中反編譯出jar包

     解壓下載的dex2jar文件的壓縮包,將class.dex文件拷貝到解壓後的目錄下,該目錄下的dex2jar.sh適用於Linux平臺,dex2jar.bat適用於Windows平臺。將終端切換到該目錄下,執行命令:./dex2jar.sh class.dex,即可在當前目錄下生成一個默認名爲class.dex.dex2jar.jar的jar包。如果在windows下,通過命令行執行:./dex2jar.bat class.dex即可,或直接把class.dex拖到dex2jar.bat文件也可。順便提一下,如果不想將class.dex文件拷貝到該工具的目錄下,重要在命令行中指定class.dex文件的具體路徑即可。

3、利用jd_gui從步驟2中生成的class.dex.dex2jar.jar包中反編譯出.java文件

     jg_gui是個綠色軟件,無須安裝,解壓即可。這是一款界面化的工具,打開之後,利用File->Open File打開class.dex.dex2jar.jar,然後選擇File->Save All Sources,並指定存放路徑即可,默認生成一個.zip的壓縮包。

 

到此爲止,apk中的源碼文件已經提取出來,全部是.java文件,不過,遺憾的是,這樣恢復出來的並不是完整的工程,只是一些java文件,而且原工程中的很多資源現在只能看到一串數字代號,不知道那是個什麼東西,其它也有很多不是很懂的表示方式,不過大概的代碼結構還是可以看清的,對於只需要瞭解局部的實現小技巧而言,分析這些文件還是可以的。

 

4、利用apktool提取apk中的資源文件

     前面提到,需要apktool需要下載兩個壓縮包,其中,apktool1.3.2.tar.bz2裏面是一個jar包,而apktool_install_系統平臺_版本號.tar.bz2裏面則是一個名爲apktool的腳本,該腳本的執行以來apktool1.3.2.tar.bz2裏面的jar包。實際做法是將apktool1.3.2.tar.bz2解壓,將裏面的jar包拷貝到apktool_install_系統平臺_版本號.tar.bz2解壓後的目錄,即與apktool腳本位於同一目錄下。然後執行如下命令:

./apktool d apk路徑/XXX.apk,默認在當前目錄生成一個與apk同名的目錄,裏面就是apk中包含的資源文件了。

 

      參考鏈接:http://www.eoeandroid.com/forum-viewthread-tid-30768-highlight-apk.html

 

      好了,至此從apk獲取源文件和資源文件的逆向工程的所有步驟全部完成,希望各位有需要這樣做的好運了,2011年的第一篇博客,祝大家健康快樂,工作順利!

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