Bước 1: Liệt kê danh sách máy ảo (AVD)

Kiểm tra xem máy tính đang có những máy ảo nào để lấy tên chính xác.

emulator -list-avds

Output ví dụ: Pixel_6_Pro_2

Bước 2: Khởi động Emulator với quyền ghi hệ thống

Đây là bước quan trọng nhất để có thể remount phân vùng /system sau này.

# Thay 'Pixel_6_Pro_2' bằng tên máy ảo của bạn ở Bước 1
emulator -avd Pixel_6_Pro_2 -writable-system

(Lưu ý: Giữ cửa sổ terminal này chạy, hoặc chạy background. Mở một terminal mới để gõ các lệnh tiếp theo).

Bước 3: Chạy Script Setup (Root, AVB, Cert)

Sử dụng script (tải về tại đây) để tự động hóa việc Root, tắt xác thực AVB và cài chứng chỉ Caido/Burp vào hệ thống. Lưu ý thay đổi CAIDO_CERT_URL đúng với Port đang mở.

# Cấp quyền (nếu chưa)
chmod +x setup_android_pentest.sh

# Chạy script (Lưu ý: Script sẽ tự reboot máy ảo vài lần)
./setup_android_pentest.sh

Bước 4: Chạy Frida Server

Sau khi script chạy xong và máy ảo đã khởi động lại lần cuối, Frida Server đã nằm trong máy nhưng chưa chạy. Ta cần kích hoạt nó.

# Kích hoạt lại quyền root (phòng trường hợp reboot bị mất)
adb root

# Chạy Frida Server ở chế độ background (&)
adb shell "/data/local/tmp/frida-server &"

Bước 5: Cài đặt ứng dụng test

Cài đặt file pinning.apk để test (Tải về tại đây).

adb install pinning.apk

Bước 6: Kiểm tra tình trạng SSL Pinning (Chưa Bypass)

Trước khi hook, ta cần xác nhận rằng ứng dụng đang chặn proxy.

1. Cấu hình Proxy:

  • Trên máy tính (Caido/Burp): Lắng nghe port 9999.
  • Cấu hình proxy như hình.
  • Mở ứng dụng: Thao tác gọi HTTP và HTTPS.
  •  

2. Quan sát:

  • Trên App: Báo lỗi kết nối khi chọn HTTPS Request hoặc Pinned Request.
  • Trên Caido/Burp: Không hiện kết nối HTTPS trong HTTP History, chỉ hiển thị các kết nối dạng HTTP.

=> Kết luận: SSL Pinning đang hoạt động tốt.

Bước 7: Thực hiện Frida Hook

Tiêm script bypass vào ứng dụng để vô hiệu hóa lớp bảo vệ.

1. Lấy Package Name (ID ứng dụng):

frida-ps -Uai
# Ví dụ tìm được ứng dụng cài đặt ở bước 5: eu.nviso.flutter_pinning

2. Chạy lệnh hook:

# -f: Spawn ứng dụng từ đầu để bypass ngay từ lúc khởi động

frida -U -f eu.nviso.flutter_pinning -l disable-flutter-tls.js
  • Hoặc dùng codeshare của frida.
frida -U --codeshare TheDauntless/disable-flutter-tls-v1 -f eu.nviso.flutter_pinning

Bước 8: Kiểm tra kết quả (Bypass thành công)

  1. Trên Terminal: Bạn sẽ thấy các dòng log như:

    [+] Flutter library located[+] ssl_verify_peer_cert found at offset: 0x3a251c[+] ssl_verify_peer_cert has been patched
  2. Trên App: Ứng dụng tải được dữ liệu bình thường, không còn báo lỗi mạng.

  3. Trên Caido/Burp: Tab HTTP History hiện ra các request HTTPS với đầy đủ nội dung dưới dạng plaintext.