這里講三種
- Android Studio 2.2版本以上的APK Analyzer
- Android-classyshark
- dex2jar & jd-gui & apktool
Android Studio 2.2的APK Analyzer
- 直接把需要反編譯的apk直接拖到Android Studio的圖標(biāo)上即可。(這個(gè)親測得Android Studio最小化的時(shí)候拖料睛,拖完在點(diǎn)出來就有了)
或者
- 選項(xiàng)Build-->Analyze APK,然后選擇要反編譯的apk。
然后直接將apk給反編譯出來笨腥。看圖:
這種方法可以獲取到xml者春,以及圖標(biāo)等資源文件赂苗,但是我們發(fā)現(xiàn)在java代碼部分只給出了方法數(shù)帆离,方法名,并沒有方法里具體的代碼(在沒有被加固的情況下)僧叉,這點(diǎn)有點(diǎn)不滿意奕枝。后面有方法,暫且先按下瓶堕,看看剛剛那幾個(gè)文件夾以及文件干嘛的隘道,看圖:
簡要說明:
assets文件夾:原始資源文件夾,對應(yīng)著Android工程的assets文件夾郎笆,一般用于存放原始的圖片谭梗、txt、css等資源文件宛蚓。
lib:存放應(yīng)用需要的引用第三方SDK的so庫激捏。比如一些底層實(shí)現(xiàn)的圖片處理、音視頻處理凄吏、數(shù)據(jù)加密的庫等远舅。而該文件夾下有時(shí)會多一個(gè)層級,這是根據(jù)不同CPU 型號而劃分的痕钢,如 ARM图柏,ARM-v7a,x86等任连。
META-INF:保存apk簽名信息蚤吹,保證apk的完整性和安全性。
res:資源文件夾课梳,其中的資源文件包括了布局(layout)距辆,常量值(values)余佃,顏色值(colors)暮刃,尺寸值(dimens),字符串(strings)爆土,自定義樣式(styles)等椭懊。
AndroidManifest.xml文件:全局配置文件,里面包含了版本信息、activity氧猬、broadcasts等基本配置背犯。不過這里的是二進(jìn)制的xml文件,無法直接查看盅抚,需要反編譯后才能查看漠魏。
classes.dex文件:這是安卓代碼的核心部分,,dex是在Dalvik虛擬機(jī)上可以執(zhí)行的文件妄均。這里有classes.dex和classes2.dex兩個(gè)文件柱锹,說明工程的方法數(shù)較多,進(jìn)行了dex拆分丰包。
resources.arsc文件:記錄資源文件和資源id的映射關(guān)系
Android-classyshark
這種是看的隋胖胖里提供的方法禁熏。
下載地址:https://github.com/google/android-classyshark/releases,下載下來之后是一個(gè)可執(zhí)行的jar文件邑彪,在終端執(zhí)行
java -jar Classyshark.jar
即可打開圖形化界面瞧毙。在打開的圖形操作界面中拖入待目標(biāo)apk,即可展示出反編譯之后的結(jié)果寄症。
這個(gè)實(shí)際和AndroidStudio的APK Analyzer功能差不多宙彪,也不能看到j(luò)ava代碼。截個(gè)圖感受一下有巧。
也不能看到方法里具體代碼您访,但是獲取一下資源文件還是可以的。
dex2jar & jd-gui & apktool
下面說下這個(gè)方法剪决,重頭戲灵汪。這個(gè)最惡心的就是下載了,mac環(huán)境下有很多講這種方法的但是要么就是下載難要么就是給的命令行不懂柑潦,在這里享言,不要管別人那怎么樣了,按我的走渗鬼,保證走通览露。首先下載,話不多說譬胎,直接上傳網(wǎng)盤差牛。
-
反編譯代碼,也就是java文件:
-
反編譯資源堰乔,也就是res文件
反編譯代碼
- 首先解壓dex-tool-2.0.zip得到dex2jar-2.0文件夾偏化,mac環(huán)境下需要的三個(gè)文件是 d2j_invoke.sh & d2j-dex2jar.sh & lib,他們在同一目錄級別镐侯≌焯郑看圖:
- 將apk文件的后綴改為zip,并解壓(這時(shí)候其實(shí)我們可以得到該app使用的圖片資源扶认,但是xml是看不了的蓄喇,還是需要反編譯資源),然后將classes.dex文件移動到dex2jar-2.0的文件夾目錄下诅福,即與上述三個(gè)文件統(tǒng)一目錄沈条⌒璺蓿看圖:
- 打開終端cd 到該目錄下輸入命令:
chmod a+x d2j_invoke.sh
chmod a+x d2j-dex2jar.sh
給這兩個(gè)文件添加可執(zhí)行權(quán)限。然后輸入命令:
sh d2j-dex2jar.sh classes.dex
如圖:
這時(shí)候就會在dex2jar-2.0目錄下生成一個(gè)classes-dexjar.jar文件蜡歹,如圖:
打開jd-gui-osx-1.4.0,使用JD-GUI.app打開classes-dexjar.jar即可贴谎。
結(jié)果展示一下:
是可以看到具體的代碼的。
反編譯資源
在我的百度網(wǎng)盤里下載apktool季稳,解壓縮后有兩個(gè)文件apktool.sh & apktool.jar,將apk文件移動到與上述兩個(gè)文件相同的目錄,終端cd到該目錄擅这,執(zhí)行命令:
sh apktool.sh apktool d xxx.apk
如圖:
結(jié)束以后,就會多出一個(gè)xxx的文件夾景鼠,內(nèi)容如下:
反編譯資源完成仲翎,xml文件都可以看。
- 修改后重新打包命令:
sh apktool.sh b xxx -o Newxxx.apk
總結(jié)
這三種方法就介紹完了铛漓,反編譯代碼都是在apk未加固的情況下完成的溯香,加固的就不要試了。但是浓恶,資源文件在apk加固的情況下也可以去獲取的玫坛,如果想要一些小圖標(biāo)啥的,沒有問題的包晰。如果只是需要資源文件我建議就Android Studio自帶的就很好了湿镀,只需要小手拖一拖。第三種方法需要的文件在我網(wǎng)盤上下就可以了伐憾。
有問題留言勉痴,謝謝。