1. Cuộc “đua vũ trang” thầm lặng
Trong thế giới ứng dụng di động, đặc biệt là các app có mô hình thu phí (subscription), luôn tồn tại một cuộc đối đầu liên tục giữa:
- Developer (bảo vệ hệ thống, doanh thu)
- Reverse engineer / attacker (phân tích, tìm cách can thiệp)
Những kỹ thuật như runtime hooking, giả lập môi trường hay bypass kiểm tra không phải là mới — nhưng ngày càng tinh vi hơn.
Điều quan trọng cần hiểu:
👉 Không có ứng dụng nào chạy trên thiết bị người dùng mà an toàn tuyệt đối.

2. Kiến trúc tổng thể của hệ thống đăng ký (Subscription Flow)
Để hiểu điểm yếu và điểm mạnh, ta cần nhìn vào toàn bộ luồng xử lý:
2.1 Các thành phần chính
Client (App Android)
- Hiển thị giá, gói dịch vụ
- Gửi yêu cầu mua hàng
- Nhận kết quả từ Google Play
Google Play Billing
- Nguồn sự thật (source of truth) cho giao dịch
- Quản lý:
- giá tiền
- ưu đãi (offer / free trial)
- chu kỳ thanh toán
Backend (ví dụ RevenueCat hoặc server riêng)
- Xác thực giao dịch với Google
- Cấp quyền (entitlement)
- Đồng bộ trạng thái giữa các thiết bị
2.2 Luồng chuẩn (happy path)
- Người dùng bấm “Upgrade”
- App gọi Google Play Billing API
- Google hiển thị popup thanh toán
- Người dùng xác nhận
- Google trả về purchase token
- App gửi token về server
- Server verify với Google
- Nếu hợp lệ → cấp quyền Premium
👉 Điểm quan trọng:
Server mới là nơi quyết định cuối cùng, không phải app.
3. Runtime Hooking: Can thiệp ở đâu và như thế nào?
3.1 Khái niệm
Runtime hooking = thay đổi hành vi của ứng dụng khi nó đang chạy, không cần sửa APK.
Công cụ phổ biến:
- Frida
- Xposed / LSPosed
- Magisk modules
3.2 Những gì có thể bị can thiệp
Ở mức kỹ thuật, attacker có thể:
- Hook hàm Java/Kotlin:
- sửa tham số đầu vào
- thay đổi giá trị trả về
- Hook native (C/C++):
- can thiệp thư viện
.so - patch trực tiếp bộ nhớ
- can thiệp thư viện
- Theo dõi network:
- đọc request/response
- chỉnh sửa dữ liệu trước khi gửi
3.3 Ví dụ các điểm “nhạy cảm”
Không đi vào khai thác cụ thể, nhưng về mặt lý thuyết:
- Hàm tạo request thanh toán
- Tham số mô tả gói (productId, offerToken)
- Kết quả trả về từ Google Play
- Logic kiểm tra “đã mua hay chưa”
👉 Nếu các bước này chỉ được kiểm tra ở client → có thể bị giả lập.
4. Các lớp phòng thủ của ứng dụng hiện đại
Để chống lại các kỹ thuật trên, app thường triển khai nhiều lớp bảo vệ chồng lên nhau.
4.1 Anti-hooking / Anti-injection
Mục tiêu:
- Phát hiện Frida, debugger, môi trường bị root
Kỹ thuật:
- Kiểm tra process lạ
- Phát hiện memory bị sửa
- Scan signature của công cụ hook
Phản ứng:
- Crash app
- Thoát ngay lập tức
- Ẩn chức năng nhạy cảm
4.2 Runtime Integrity Check
- Kiểm tra checksum của code
- Xác minh thư viện native
- Phát hiện patch trong bộ nhớ
👉 Nếu bị thay đổi → coi là môi trường không tin cậy
4.3 SSL Pinning
Vấn đề:
- Nếu attacker chặn HTTPS → có thể đọc/đổi dữ liệu
Giải pháp:
- App chỉ tin certificate cụ thể
- Không chấp nhận proxy trung gian
👉 Điều này ngăn:
- MITM (Man-in-the-middle)
- Debug network dễ dàng
4.4 Obfuscation & Code Hardening
- Đổi tên class/hàm thành ký tự vô nghĩa
- Làm rối control flow
- Mã hóa string
Mục tiêu:
👉 Làm tăng chi phí phân tích, không phải chặn tuyệt đối
4.5 Runtime Protection Platforms
Các nền tảng như Appdome, DexGuard, v.v. cung cấp:
- Anti-debug
- Anti-emulator
- Anti-hooking
- Threat detection
👉 Đây là lớp bảo vệ “đóng gói”, giúp dev không phải tự xây từ đầu.
5. Cách hacker đã thao tác
(Chỉ mục đích giáo dục)
Đăng ký thành viên vip của AIAPPVN để đọc bài viết
