Android APK實際就是個Zip檔案,可以解壓縮後反編譯檢視源代碼和資源檔案。以下以微信為例:
我們可以右擊APK檔案,”打開方式”選擇Winrar壓縮檔案管理器,截圖如下:
是不是跟程式的目錄結構很像,源碼已經被壓縮在了classes.dex檔案中。這裡我們可以直接檢視res下面的圖檔檔案,但對于源代碼無法檢視,AndroidManifest.xml清單等xml檔案打開也是亂碼。
1、 檢視源碼
(1) 修改待反編譯檔案字尾.apk為.zip後用winrar解壓,記錄classes.dex的路徑。
1
dex2jar classes.dex的路徑
如下:
從中我們可以大緻了解代碼結構,雖然源碼經過proguard混淆後可讀性很差,但還是可以通過關鍵字(不可混淆的類名等)查找擷取到一定的資訊。不過jd-gui無法通過源碼查找,隻支援查找類型、構造函數、常量、屬性、方法。
2、檢視資源檔案和xml檔案
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的具體組成資訊。