天天看點

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

Jadx

Android開發(/學習)有時候需要用到反編譯工具,Window上有很多工具,而Mac上則不多,這裡稍微介紹一下Mac上可用的反編譯工具Jadx.

準備

clone 倉庫,編譯

mkdir jadx
git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist #這個需要稍微等待一下
           

開始反編譯

等完畢後,可以開始了,我就介紹個最簡單最常用的用法

  1. 把apk改成zip
  2. 解壓zip擷取class.dex檔案
  3. 将class.dex檔案放到jadx目錄下
cd build/jadx/
bin/jadx -d out class.dex  # 反編譯後放入out檔案夾下(如果out不存在它會自動建立)
#or
bin/jadx-gui class.dex  # 會反編譯,并且使用gui打開
           
轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

效果圖

OK,就這樣,後續還可以配置環境變量,更加友善.

引子

承接我的上一篇文章Android ClassyShark vs ApkTool,感謝讀者@weishu的提醒,jadx是我遺漏的一個非常好用的android反編譯gui工具。下面就來介紹下jadx工具。

首先給出jadx的github位址

使用方式

其實github上已經給出了很詳細的使用說明。但是作者這裡形式性地解讀下吧(- -|)。

1.安裝

依次運作以下指令:

git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist
           

主要是拉下來jadx的git主工程,然後跑對應的gradle task。之後會生成運作腳本,大概就是多出了這個目錄

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

jadx腳本目錄

1.運作

cd build/jadx/
bin/jadx -d out lib/jadx-core-*.jar
#or
bin/jadx-gui lib/jadx-core-*.jar
           

以上指令是git給出的運作示例,主要就是反編譯jadx源碼的一個jar包。

由于之前文章對比classyShark 和apktool時用的是淘寶apk,那麼這裡繼續用淘寶apk,便于三者的橫向比較。

bin/jadx-gui taobao.apk
           

當然如果你不喜歡使用指令行外加找檔案路徑,你可以直接輕按兩下下圖腳本檔案即可

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

jadx-gui腳本檔案

會彈出以下界面,對應選中你想反編譯的.dex, .apk, .jar or .class即可(可以看到支援的格式還是很豐富的,贊)。

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

選中taobao.apk

選中淘寶apk,并且反編譯完成後,結果如下:

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

反編譯taobao.apk結果

可以看到結果中即反編譯了資源檔案和源碼,這個效果對比,apktool+dex2jar+jd-gui這三個工具集來說操作簡便了太多。

結果橫向對比(classyshark,apktool+dex2jar+jd-gui)

主要就是來對比下反編譯後源碼的可讀性。同樣選用com.taobao.allspark包下的AllsparkLoader來進行對比,用jadx反編譯後的結果為:

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

AllsparkLoader反編譯結果

我們可以看到可讀性非常高,要是去掉混淆的影響,已經很接近源碼了!!!(細心的讀者可以發現該gui還包含了一部分編譯器的功能,很實用)

另外幾個很贊的功能介紹

1.支援全局class查詢

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

全局class查詢

2.支援全局text查詢

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

全局text查詢

3.支援導出gradle工程(你可以用as直接看反編譯的工程了)

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

導出gradle工程

那麼我們最終看看在as中打開導出工程後的結果:

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

as中打開導出工程

很贊對不對

Android反編譯工具jadx的簡單操作使用

Android上面的反編譯工具很多,我個人比較喜歡jadx,操作簡單,界面簡潔。

下載下傳jadx并解壓,點選“bin”目錄下面的“jadx-gui.bat”檔案,出現下圖所示的界面

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

選中要反編譯的apk檔案後,界面變成下圖所示

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

任意點開一個類,我們就可以看到該類的源代碼了

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

有的類的變量和方法名都變成了a,b,c,d。。。,如下圖所示

轉-【CTF環境搭建之】如何使用Jadx反編譯軟體 引子 使用方式 結果橫向對比(classyshark,apktool+dex2jar+jd-gui) 另外幾個很贊的功能介紹 Android反編譯工具jadx的簡單操作使用 總結

這是由于Android工程進行了代碼混淆

總結

看了以上之後,我們就來說下jadx對比classyshark和(apktool+dex2jar+jd-gui工具集)的優劣勢吧。

優點:

1.操作友善快捷,一步到位

2.有較為完善的gui界面,帶有較多實用功能

3.反編譯代碼可讀性高

缺點:

1.沒有classyshark類似的方法總數統計以及圖形化分布界面

2.對比apktool直接反編譯出來的資源檔案有相應的缺失(這個有心的童鞋可以自己嘗試下,這裡就不給截圖了)

總體來說jadx還是你反編譯工具的最佳選擇,當然有些時候可能還是需要你去配合使用,畢竟現在看來三者還是各有優劣的。