RE Toolkit (3/5): reverse ứng dụng Android với jadx, Apktool, objection và MobSF
Tóm tắt
MobSF cho bức tranh nhanh, jadx dịch ngược DEX về Java, Apktool giải mã và dựng lại APK, objection dùng Frida để tắt SSL pinning và hook. Hãy dùng bộ này cho chính app của bạn trước khi kẻ tấn công làm.
Kiểm thử bảo mật ứng dụng di động, kiểm tra SDK bên thứ ba thu thập gì, hay tìm hiểu API mà app đối tác đang gọi: tất cả đều bắt đầu bằng việc mở file APK. Hệ sinh thái Android có bộ công cụ mã nguồn mở rất trưởng thành, với bốn repo gần như là tiêu chuẩn: jadx, Apktool, objection và MobSF. Bài 3 của loạt RE Toolkit giải thích mỗi công cụ giải quyết phần nào và ghép chúng thành một quy trình.

Bốn công cụ, bốn vai trò
| Repo | Vai trò | Kiểu phân tích | Sao · License |
|---|---|---|---|
| skylot/jadx | Dịch ngược DEX về Java/Kotlin dễ đọc, có GUI tìm kiếm và xref | Tĩnh | ~51,6k · Apache-2.0 |
| iBotPeaches/Apktool | Giải mã resource, manifest, smali; sửa rồi đóng gói lại APK | Tĩnh + sửa đổi | ~27k · Apache-2.0 |
| sensepost/objection | Bộ lệnh dựng sẵn trên Frida: tắt SSL pinning, xem file, hook | Động (runtime) | ~9,5k · GPL-3.0 |
| MobSF | Quét tự động Android/iOS, xuất báo cáo bảo mật | Tĩnh + động, tự động | ~22,2k · GPL-3.0 |
Quy trình đề xuất
1. Quét tổng quan bằng MobSF
MobSF cho bức tranh nhanh nhất: quyền xin, component export, cấu hình mạng, secret lộ trong code, thư viện đi kèm. Chạy bằng Docker rồi kéo thả APK vào giao diện web:
docker run -it --rm -p 8000:8000 \
opensecurity/mobile-security-framework-mobsf:latest
# mở http://localhost:8000
Coi báo cáo là danh sách nghi vấn cần kiểm tra tay, không phải kết luận: công cụ tự động có cả báo nhầm lẫn bỏ sót.
2. Đọc logic bằng jadx
brew install jadx # hoặc tải bản phát hành trên GitHub
jadx -d out/ app.apk # xuất mã nguồn Java
jadx-gui app.apk # giao diện: tìm chuỗi, xref, đổi tên
Mẹo: tìm theo URL API, tên header (Authorization), hoặc chuỗi lỗi để nhảy thẳng tới đoạn code quan trọng. Với app bị ProGuard/R8 làm rối tên, tuỳ chọn --deobf đặt lại tên ngắn, nhất quán để dễ theo dõi hơn.
3. Sửa và đóng gói lại bằng Apktool
Khi cần đổi hành vi (bật debuggable, tin chứng chỉ CA người dùng để chặn bắt HTTPS, sửa một nhánh smali), Apktool giải mã và dựng lại APK:
apktool d app.apk -o app_src
# sửa AndroidManifest.xml, res/xml/network_security_config.xml, smali...
apktool b app_src -o app-mod.apk
zipalign -p 4 app-mod.apk app-aligned.apk
apksigner sign --ks debug.keystore app-aligned.apk
4. Quan sát lúc chạy bằng objection
objection gói các script Frida phổ biến thành lệnh tương tác. Trên máy thật chưa root có thể nhúng Frida gadget vào APK bằng objection patchapk -s app.apk. Lưu ý cú pháp mới: -n/--name thay cho -g, và start thay cho explore (bản cũ vẫn chạy nhưng đã bị đánh dấu deprecated).
pip3 install objection
objection -n com.example.app start
# trong phiên tương tác:
android sslpinning disable
android hooking list activities
env
Khi cần hook sâu hơn những gì objection có sẵn, chuyển sang viết script Frida trực tiếp (xem bài phân tích động) và kết hợp proxy như mô tả ở bài giao thức mạng và app di động.
Rủi ro và lưu ý
- Pháp lý: điều khoản của nhiều app cấm dịch ngược; chỉ kiểm thử app của tổ chức bạn hoặc trong phạm vi bug bounty cho phép. Không tấn công backend production của người khác.
- Thiết bị riêng: dùng máy test hoặc emulator, không dùng điện thoại cá nhân đã root có dữ liệu thật.
- Kotlin, Flutter, React Native: jadx đọc tốt Kotlin, nhưng logic Flutter nằm trong thư viện native và React Native nằm trong bundle JavaScript/Hermes, cần công cụ khác.
- App đóng gói lại sẽ đổi chữ ký: một số app kiểm tra chữ ký hoặc Play Integrity và từ chối chạy.
Áp dụng thế nào?
- Dev mobile: Mở APK release của chính bạn bằng jadx: secret, URL nội bộ, log debug còn sót sẽ lộ ngay. Đó là thứ kẻ tấn công thấy đầu tiên.
- Tech Lead: Chạy MobSF trong CI cho mỗi bản release (MobSF có REST API), chặn build khi xuất hiện phát hiện mức cao mới.
- PM: Đưa "kiểm tra APK sau build" vào checklist phát hành; chi phí gần bằng không so với rủi ro lộ API key.
Nguồn & tham khảo
- skylot/jadx (GitHub) — skylot
- iBotPeaches/Apktool (GitHub) — iBotPeaches
- sensepost/objection (GitHub) — sensepost
- MobSF/Mobile-Security-Framework-MobSF (GitHub) — MobSF