轉(zhuǎn)載自 :http://www.itdecent.cn/p/dda9ff90a3c5
- Android Studio 2.2版本以上的
APK Analyzer - Android-classyshark
- dex2jar & jd-gui & apktool
Android Studio 2.2的APK Analyzer
- 直接把需要反編譯的apk直接拖到Android Studio的圖標(biāo)上即可。(這個(gè)親測(cè)得Android Studio最小化的時(shí)候拖,拖完在點(diǎn)出來(lái)就有了)
或者 -
選項(xiàng)Build-->Analyze APK,然后選擇要反編譯的apk。
1
然后直接將apk給反編譯出來(lái)??磮D:
2
這種方法可以獲取到xml,以及圖標(biāo)等資源文件,但是我們發(fā)現(xiàn)在java代碼部分只給出了方法數(shù),方法名,并沒(méi)有方法里具體的代碼(在沒(méi)有被加固的情況下)

簡(jiǎn)要說(shuō)明:
- assets文件夾:原始資源文件夾,對(duì)應(yīng)著Android工程的assets文件夾,一般用于存放原始的圖片、txt、css等資源文件。
- lib:存放應(yīng)用需要的引用第三方SDK的so庫(kù)。比如一些底層實(shí)現(xiàn)的圖片處理、音視頻處理、數(shù)據(jù)加密的庫(kù)等。而該文件夾下有時(shí)會(huì)多一個(gè)層級(jí),這是根據(jù)不同CPU 型號(hào)而劃分的,如 ARM,ARM-v7a,x86等。
- META-INF:保存apk簽名信息,保證apk的完整性和安全性。
- res:資源文件夾,其中的資源文件包括了布局(layout),常量值(values),顏色值(colors),尺寸值(dimens),字符串(strings),自定義樣式(styles)等。
AndroidManifest.xml文件:全局配置文件,里面包含了版本信息、activity、broadcasts等基本配置。不過(guò)這里的是二進(jìn)制的xml文件,無(wú)法直接查看,需要反編譯后才能查看。 - classes.dex文件:這是安卓代碼的核心部分,,dex是在Dalvik虛擬機(jī)上可以執(zhí)行的文件。這里有classes.dex和classes2.dex兩個(gè)文件,說(shuō)明工程的方法數(shù)較多,進(jìn)行了dex拆分。
- resources.arsc文件:記錄資源文件和資源id的映射關(guān)系
Android-classyshark
下載地址:https://github.com/google/android-classyshark/releases,下載下來(lái)之后是一個(gè)可執(zhí)行的jar文件,在終端執(zhí)行
java -jar Classyshark.jar
即可打開(kāi)圖形化界面。在打開(kāi)的圖形操作界面中拖入待目標(biāo)apk,即可展示出反編譯之后的結(jié)果。
dex2jar & jd-gui & apktool
反編譯代碼,也就是java文件:
- 反編譯資源,也就是res文件
或者:
可以選擇此處下載ApkTool、dex2jar、JD-GUI。
安裝ApkTool
將下載好的
apktool文件與apktool_2.3.1.jar文件準(zhǔn)備好,并將apktool_2.3.1.jar更名為apktool.jar;將
apktool.jar與apktool移動(dòng)到/usr/local/bin目錄下(可以通過(guò)在終端中輸出命令open /usr/local/bin來(lái)打開(kāi)這個(gè)目錄);-
為上述兩個(gè)文件增加可執(zhí)行權(quán)限,即在終端中輸入并執(zhí)行:
chmod +x apktool.jar chmod +x apktool 在終端輸入
apktool看是否可以運(yùn)行,如果不可以需要在系統(tǒng)偏好設(shè)置中打開(kāi)安全與隱私中點(diǎn)擊仍要運(yùn)行apktool.jar;
至此ApkTool的安裝便完成了,在終端運(yùn)行apktool命令會(huì)看到如下輸出:

dex2jar
直接如上方式下載解壓即可。
JD-GUI
如上自行下載
- 使用ApkTool反編譯APK得到xml文件、AndroidManifest.xml和圖片,
cd /你存放apk的目錄或在下面命令中使用xxx.apk文件的絕對(duì)路徑
apktool d xxx.apk //該命令執(zhí)行后會(huì)在同級(jí)目錄下生成一個(gè)與你編譯的apk同名的目錄
- dex2jar將dex反編譯成jar
1、首先解壓dex-tool-2.0.zip得到dex2jar-2.0文件夾,mac環(huán)境下需要的三個(gè)文件是 d2j_invoke.sh & d2j-dex2jar.sh & lib,他們?cè)谕荒夸浖?jí)別。如圖:

2、將apk文件的后綴改為zip,并解壓(這時(shí)候其實(shí)我們可以得到該app使用的圖片資源,但是xml是看不了的,還是需要反編譯資源),然后將classes.dex文件移動(dòng)到dex2jar-2.0的文件夾目錄下,即與上述三個(gè)文件統(tǒng)一目錄。如圖:

3、打開(kāi)終端cd 到該目錄下輸入命令:
chmod a+x d2j_invoke.sh
chmod a+x d2j-dex2jar.sh
給這兩個(gè)文件添加可執(zhí)行權(quán)限。然后輸入命令:
sh d2j-dex2jar.sh classes.dex

這個(gè)時(shí)候執(zhí)行成功會(huì)在dex2jar-2.0目錄下生成一個(gè)classes-dexjar.jar文件,如圖:

4、雙擊已安裝好的JD_GUI,使用JD-GUI.app打開(kāi)classes-dexjar.jar如圖:


結(jié)果如下圖:

反編譯資源
解壓縮后有兩個(gè)文件apktool.sh & apktool.jar,將apk文件移動(dòng)到與上述兩個(gè)文件相同的目錄,終端cd到該目錄,執(zhí)行命令:
sh apktool.sh apktool d xxx.apk
總結(jié):
反編譯代碼
sh d2j-dex2jar.sh classes.dex(需要可執(zhí)行權(quán)限)
反編譯資源
sh apktool.sh apktool d xxx.apk

