天天看點

關于反編譯的那些事

在Android開發中,有的時候,我們想要參考有名的app的設計,需要看下源碼結構什麼的,這個時候,反編譯是很有必要的。我之前也在網上搜了一下關于如何反編譯的使用,在使用方面,因為都是在網上搜尋答案的,結果是有時候去反編譯别人家的app的時候,會出錯,要麼是反編譯不成功,要麼就是忘記改怎麼使用了。這會有點時間,就出來整理一下,友善大家,也為了避免自己反編譯的時候,忘記改怎麼操作了。

首先我們要下載下傳反編譯apk的工具,這裡需要用到3個工具:

1,apktool 2,dex2jar 3,jd_jui

(這裡說一下,本人寫部落格不是很久,是以可能會有點low,一些功能連結也沒有做,如果想下這三個工具,可以自行下載下傳,或者點選我文章下面給出的比我叙述更好的部落格連結)

這裡講一下這三個工具的用途吧,第一個apktool,是用來擷取項目中的資源檔案的,就是項目中的res檔案和其他的資源檔案。第二個dex2jar是用來将apk反編譯出來java源碼(顧名思義dex2jar就是将classes.dex轉成jar檔案),第三個jd_jui,不用說這個肯定是用來檢視jar源碼的。有一點大家肯定也清楚,我們這裡反編譯apk隻是僅限于沒有做過混淆或者加密的apk,并且還原率也不可能是百分之一百的情況。我們工具下好之後,就是開始我們的反編譯的重點了。我們先去下載下傳我們想去反編譯的apk,開始進行反編譯。

從下載下傳的apktool解壓之後,把用到的apk放到apktool檔案夾下,打開指令行,定位到目前檔案夾下,然後執行”’apktool.bat d -f xxx.apk xxx ”’大緻意思就是把apk中的資源檔案放到某個檔案夾下(後面的xxx自己随便命名)這個指令行可能已經過時了,有可能會有執行指令行出錯,如果遇到下面的錯誤,就要用到新的指令行

apktool d [-s] -f xxx.apk -o xxx

錯誤代碼:

*1.Input file was not found or was not readable.

2.Destination directory (C:\Users\user\a) already exists. Use -f switch if you want to overwrite it.**

有時候,你可能也會遇到這樣的錯誤:Exception in thread “main“brut.androlib.AndrolibException: Could not decode ars c fil……….

這個是因為你的apktool是因為你下的版本過低,去官網更新個最新版本就好了。

如果,你執行代碼行沒有錯誤的話,在你的apktool檔案夾下會生成xxx的檔案夾,裡面就是apk中所使用的資源檔案了(裡面有個重要的檔案classes.dex)。其實這個資源檔案的獲得,有個更簡單的,隻要把apk的字尾名改成zip直接解壓就可以得到資源檔案了,也能拿到classes.dex。

我們拿到classes.dex之後,就用到第二個工具了dex2jar,把classes.dex放到dex2jar所在的檔案夾下。同樣也要使用指令行定位到dex2jar所在的檔案夾下,執行指令dex2jar.bat classes.dex,如果出現

關于反編譯的那些事

這就表示我們的jar檔案已經生成了,你可以在你問價夾下會有個classes_dex2jar.jar檔案。這個時候,我們的第二步也完成了。

第三步,就是看jar源碼了,用jd_jui工具,在你解壓的jd_jui問價夾下有一個jd-gui.exe直接輕按兩下打開,選擇你剛剛生成的jar檔案,如果這個apk沒有進行混淆加密的話,你這個時候,就可以清晰的看到這個apk的代碼結構,直接檢視源碼了。

我們的反編譯工作已經搞完了,本人的技術也不是太好,部落格也寫也就那麼回事,如果大家能通過我寫的部落格解決反編譯的問題,是我的榮幸,如果沒有解決,可以提一下意見,或者大罵一句垃圾,再重新找其他相關問題解決的資料。而我這裡,隻是為了整理我的記憶,不再出現這方面的問題不知所措。

下面是我查找的資料,希望對大家有幫助:

http://blog.csdn.net/vipzjyno1/article/details/21039349/

http://blog.csdn.net/xia09222826/article/details/37909421

謝謝!