本文主要介紹如何反編譯Android應用程式查看原始碼、資源檔和xml檔案以及修改後重新打包成APK。鼓勵大家反編譯去學習他人的設計而不是將應用換殼後混亂市場。也可以直接使用網友整理的 anti-droid.
Android APK實際就是個Zip檔案,可以解壓縮後反編譯查看原始碼和資源檔。以下以為例:
我們可以右擊APK檔案,”開啟檔案”選擇Winrar壓縮檔管理器,如下:
是不是跟程式的目錄結構很像,源碼已經被壓縮在了classes.dex檔案中。這裡我們可以直接查看res下面的圖片檔案,但對於原始碼無法查看,AndroidManifest.xml清單等xml檔案開啟也是亂碼。
需要用到的工具包(截止2013-03-14最新),包括dex2jar、jd-gui、apktool。也可以在下面需要時分別下載最新。
1、 查看源碼
(1) 修改待反編譯檔案尾碼.apk為.zip後用winrar解壓,記錄classes.dex的路徑。
(2)使用工具包中的android-reverse-trinea\dex2jar-0.0.9.13或下載最新的dex2jar後解壓,在命令列運行
dex2jar classes.dex的路徑
如下:
如下:
結果會在classes.dex所在目錄下產生classes_dex2jar.jar,用jd-gui.exe(使用工具包中jd-gui或下載最新)開啟此檔案,如下:
從中我們可以大致瞭解代碼結構,雖然源碼經過proguard混淆後可讀性很差,但還是可以通過關鍵字(不可混淆的類名等)尋找擷取到一定的資訊。不過jd-gui無法通過源碼尋找,只支援尋找類型、建構函式、常量、屬性、方法。
2、查看資源檔和xml檔案
(1)使用工具包中的android-reverse-trinea\apktool-1.5.2-windows或下載最新的apktool(需同時下載apktool及對應平台的依賴包,解壓後將平台依賴包中的apktool.jar複製到apktool目錄下),在命令列運行
apktool.bat d -f xxx.apk xxx
1 |
apktool.bat d -f xxx.apk xxx |
其中d表示解包,xxx.apk為待反編譯apk路徑,xxx為目標檔案夾名,(apktool不支援中文目錄),如下:
結果會再apktool.bat所在目錄下產生weixin檔案夾,現在就可以正確的查看xml資源(包括res下的所有資源,如點9圖片、drawable、layout、value、menu等等)了,比如AndroidManifest.xml
3、修改後重新打包成APK
依然使用步驟2中的apktool,命令如下
apktool.bat b xxx
其中b表示build,xxx表示步驟2中解包出來的檔案夾,我們可以對某一檔案進行修改,重新打包
打包完成後會在xxx目錄下產生build和dist兩個檔案夾,dist存放重建的APK,build存放該APK的具體組成資訊。
這裡我們可以簡單的替換資源也可以通過修改smali完成代碼的修改,別做壞事哦^_*。
原文:http://www.trinea.cn/android/