android 反混淆Android Little Tips系列之一:如何反編譯apk檔案
相信大家在安裝使用了一個apk後,看到一些好的效果或實作,一般會很想知道這個是如何實作的。還好,android選的是java開發語言,是以經過一些小步驟,而作者又沒有用混淆的話,差不多可以返原70 ~ 90 的java實作,下面我就來說下Android apk 的反編譯步驟:
解壓縮apk包:apk檔案說到底就是一種最常見的zip,你用UE或Notepad++等文本編輯工具打開apk檔案,可以看到開頭的兩個字母:PK,用7z或winrar就可輕松地解壓apk檔案;反編譯dex檔案:解壓apk檔案後,你會發現res目錄的圖檔沒有加密,但java源碼編譯成了一個classes.dex檔案,無法用普通的反編譯class檔案的方法來處理。下載下傳一個軟體可以将dex檔案轉換成普通的jar包,這個軟體名字叫:dex2jar(這個工具好象還是國人開發的 ~_~),去這個網站下載下傳最新版并解壓到一個目錄,并這這個目錄加到系統PATH變量中,就可以直接用: dex2jar.bat 或 dex2jar.sh 轉換dex檔案了,指令如下:dex2jar.bat classes.dex,将在同目錄得到普通jar包:classes.dex.dex2jar.jar,就可以用處理普通jar包的方法來反編譯這個jar包;反編譯jar包:得到jar包後,下載下傳自已喜歡的反編譯工具。我推薦大家用JD-GUI (http://java.decompiler.free.fr/?q=jdgui),有比較簡單的圖形界面,可以反編譯單個class檔案,也可以反編譯jar包,比較友善;反編譯xml檔案:打開解壓的res\layout目錄,有很多xml檔案,如果你想看下作者是如何設計界面的,你會很失望,因為你看到的是一大堆亂碼!這個時候我們需要下載下傳一個jar包來解決這個問題:AXMLPrinter2.jar http://android4me.googlecode.com/files/AXMLPrinter2.jar),将這個jar包放在任意目錄,在確定你已經裝了jdk的情況下,運作這個指令可反編譯xml檔案: java -jar AXMLPrinter2.jar AndroidManifest.xml >AndroidManifest_decode.xml,打開AndroidManifest_decode.xml,你會發現一切正常!