[Mac] 使用 jadx 將 Android APK 檔案快速反編譯成 Java 原始碼

[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

(本頁面已被瀏覽過 47 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料