健身房 APP 換廠商災難:從 JADX 逆向分析 QRCode 取得邏輯
紀錄一次因為不滿意健身房 APP 介面,進而使用 JADX 解包 APK,分析 WebView 網頁行為與 API,最終成功復現 QRCode 取得邏輯的逆向工程實戰。
起源:當健身房 APP 變成醜陋的 WebView
最近健身房 APP 更新變成另一家廠商,從原本的原生 APP 變成一個(主觀)醜醜的介面。
既然是 APP 那就嘗試拆看看新廠商的 APP 是怎麼做的吧。
工欲善其事:JADX 啟動!
之前有嘗試一些工具,發現 JADX 可以拆的蠻詳細的,所以這次也使用 JADX 拆解 APP。
- 下載 APP 我使用 apkcombo 載下來會是 xapk ,會把主程式和一些其他的資料打包再一起 本質是 zip
- 我們用 zip 打開看 遮掉的那個就是主要的 apk

- 使用 JADX 反編譯(?)
- 會得到下面這樣的結構
.
├── resources
│ ├── META-INF
│ │ └── ... (憑證與編譯中介資料)
│ ├── assets
│ │ └── ...
│ ├── kotlin
│ │ └── ...
│ └── res
│ ├── drawable
│ ├── layout
│ ├── values
│ └── ... (其他 UI 資源檔,如 mipmap, anim 等)
└── sources
├── android
│ └── ... (Android 系統底層 API)
├── androidx
│ └── ... (Android Jetpack 官方擴充庫)
├── com
│ ├── google
│ │ ├── firebase
│ │ │ └── ... (推播、分析與雲端服務)
│ │ ├── zxing
│ │ │ └── ... (條碼掃描核心)
│ │ └── ...
│ ├── journeyapps
│ │ └── ... (掃碼 UI 相關)
│ └── example
│ └── myapp <-- 【重點區】App 的真實商業邏輯
│ ├── databinding
│ └── service
├── kotlin
│ └── ... (Kotlin 語言標準庫)
├── kotlinx
│ └── ... (Kotlin 協程 Coroutines 等擴充)
└── ... (其他第三方開源依賴,如 javax, org 等)- 請 AI 出來看
- Prompt : 分析反編譯的 APP 結構,取得 入場 QRCode 是怎麼產生的
- AI 會跟你說 這個 APP 就是一個 webview 主要網站是 XXX
- API 是哪幾隻 要怎麼復現行為
後來: 自己做一個 APP 小工具
Prompt: 根據 .... (剛剛的流程) 模擬流程 撰寫一個桌面小工具呈現進場 QRCode
純模擬 QRCode 取得的行為 放在桌面點一下就可以更新新的 QRCode,沒事不用再看到 webview app 了!