Tools

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.

Trang GitHub của skylot/jadx
Trang GitHub của skylot/jadx (ảnh chụp tháng 11/2026)

GitHub: https://github.com/skylot/jadx · khoảng 51,6 nghìn sao · Java · Apache-2.0

Bốn công cụ, bốn vai trò

RepoVai tròKiểu phân tíchSao · License
skylot/jadxDịch ngược DEX về Java/Kotlin dễ đọc, có GUI tìm kiếm và xrefTĩnh~51,6k · Apache-2.0
iBotPeaches/ApktoolGiải mã resource, manifest, smali; sửa rồi đóng gói lại APKTĩnh + sửa đổi~27k · Apache-2.0
sensepost/objectionBộ lệnh dựng sẵn trên Frida: tắt SSL pinning, xem file, hookĐộng (runtime)~9,5k · GPL-3.0
MobSFQuét tự động Android/iOS, xuất báo cáo bảo mậtTĩ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

  1. skylot/jadx (GitHub) — skylot
  2. iBotPeaches/Apktool (GitHub) — iBotPeaches
  3. sensepost/objection (GitHub) — sensepost
  4. MobSF/Mobile-Security-Framework-MobSF (GitHub) — MobSF