[Mac] 使用 jadx 將 Android APK 檔案快速反編譯成 Java 原始碼
之前寫過一篇 將 Android APK 檔案反編譯成 Java 原始碼,
裡面主要是用 dex2jar 和 JD-GUI 來反編譯 APK,
後來也遇到了 JD-GUI 無法在 macOS Big Sur 上執行,因為缺少 Java 1.8 的問題。
不過最近用它來反編譯一個 APK 時,結果沒有很好,
裡面蠻常會看到有一堆 byte code 無法解譯的狀況:
上網再搜尋了一番,有人建議 jadx 這個工具。
試用了一下感覺不錯,來看一下吧~
1. 安裝 jadx
在 Mac 上用 Homebrew 就可以安裝 jadx:
brew install jadx
2. 執行 jadx
在終端機裡可以對 APK 檔案直接執行 jadx
,
不用先取出 .dex 檔案,也不用轉成 .jar 檔,這點是比較方便:
$ jadx test.apk INFO - loading ... INFO - processing ... ERROR - finished with errors, count: 15
這會產生一個目錄 (像 test.apk 就會產生一個 test 目錄),
裡面會有各種資源,像是 resources 下面可能會有相關的圖檔 / XML,
而在 sources 目錄下會有反編譯後的 Java 檔:
test ├── resources │ ├── AndroidManifest.xml │ ├── META-INF │ │ ├── androidx.cardview_cardview.version ...... │ ├── assets │ │ ├── traffic.html │ │ ├── images │ │ │ ├── icon09.png ...... │ ├── res │ │ ├── anim │ │ │ ├── abc_fade_in.xml ...... └── sources ├── android │ └── support │ └── v4 │ ├── app │ │ ├── INotificationSideChannel.java │ │ └── RemoteActionCompatParcelizer.java │ └── graphics │ └── drawable │ └── IconCompatParcelizer.java ├── androidx │ ├── activity │ │ ├── Cancellable.java │ │ ├── ComponentActivity.java ......
另一種方式是執行 jadx-gui
,
這會開啟一個 GUI 程式,可以載入 APK 檔案,
在視窗裡就可以直接檢視反編譯後的 Java 內容:
以上面的例子來說,jadx 解出來的結果是比 JD-GUI 要好,
像 b()
這個函式在 JD-GUI 裡是解不出來的,
在 jadx 裡就可以成功解出~
不過這也不代表 jadx 一定就比 JD-GUI 好,
給定不同的 APK,可能結果會完全不同。
還是要多方嘗試不同種的工具,再來挑選較好的結果囉~
參考資料:android – decompiling DEX into Java sourcecode – Stack Overflow
(本頁面已被瀏覽過 1,085 次)