Tools

Reverse Engineering (4/5): giao thức mạng, API và ứng dụng di động

Tóm tắt

Với dev, dịch ngược hữu ích nhất thường là hiểu app gửi gì qua mạng. Mọi thứ trong client đều đọc được, nên bí mật và kiểm tra quyền phải nằm ở server.

Với đa số lập trình viên, dạng dịch ngược hữu ích nhất không phải assembly — mà là hiểu ứng dụng gửi gì qua mạng. Lý do thường gặp: tích hợp với thiết bị hoặc hệ thống cũ không có tài liệu, debug traffic của chính app mình, hay kiểm thử bảo mật một API bạn được phép kiểm thử. Bài 4 trong loạt Reverse Engineering cho lập trình viên bàn về bắt traffic, giải mã giao thức nhị phân, và mổ xẻ app Android/iOS.

Bắt traffic

Công cụTầngDùng khi
Wireshark / tcpdumpGói tin, mọi giao thứcGiao thức nhị phân tự định nghĩa qua TCP/UDP, IoT
mitmproxyHTTP(S), WebSocketChặn/sửa request bằng script Python, tự động hoá
Burp SuiteHTTP(S)Khám phá API thủ công, gửi lại request, fuzzing

Với HTTPS, cài chứng chỉ CA của proxy lên thiết bị thử nghiệm. Từ Android 7, app mặc định không tin CA do người dùng cài; với bản debug của chính bạn, thêm network_security_config.xml cho phép user CA, hoặc dùng emulator có CA cài ở mức hệ thống.

Giải mã giao thức nhị phân lạ

  1. Bắt nhiều mẫu, mỗi lần chỉ một hành động (đăng nhập, gửi tin, đổi cài đặt) và gắn nhãn.
  2. So sánh (diff): byte không đổi là magic/phiên bản; byte tăng dần là số thứ tự/timestamp; byte đổi theo input là payload.
  3. Tìm trường độ dài: 2–4 byte bằng kích thước phần còn lại, big- hoặc little-endian.
  4. Đo entropy: entropy cao nghĩa là nén hoặc mã hoá — phải tìm khoá trong client (bài 2–3).
  5. Nhận diện encoding phổ biến: Protocol Buffers (thử protoc --decode_raw < msg.bin), MessagePack, CBOR, TLV.
  6. Viết parser: dissector Lua cho Wireshark hoặc đặc tả Kaitai Struct biến ghi chép thành định dạng có tài liệu.
  7. Xác nhận bằng cách gửi lại: client Python tối giản gửi thông điệp của bạn và nhận đúng phản hồi.

Ứng dụng Android

  • Giải nén: apktool d app.apk cho AndroidManifest.xml, tài nguyên và smali.
  • Decompile: jadx-gui app.apk cho mã Java/Kotlin dễ đọc. Tìm base URL, annotation Retrofit như @POST, OkHttpClient, khoá hardcode.
  • Thư viện native: lib/arm64-v8a/*.so là file ELF — mở bằng Ghidra, tìm export JNI dạng Java_com_example_....
  • Runtime: Frida trên thiết bị test đã root hoặc emulator hook trực tiếp phương thức Java bằng Java.perform(...).

Ứng dụng iOS

IPA tải từ App Store được mã hoá (FairPlay); bạn phân tích bản build của chính mình hoặc trên thiết bị test chuyên dụng. Công cụ: class-dump lấy header Objective-C, Ghidra cho file Mach-O, Frida với ObjC.classes để hook, và objection — bộ công cụ xây trên Frida.

Tài liệu chuẩn

OWASP MASTG (Mobile Application Security Testing Guide) là cẩm nang miễn phí, đầy đủ nhất cho kiểm thử app Android/iOS — bao gồm chặn traffic, certificate pinning và kỹ thuật dịch ngược. Dùng kèm checklist MASVS khi review app của team.

Rủi ro và lưu ý

  • Điều khoản dịch vụ: gọi API không chính thức của bên khác có thể vi phạm ToS và bị chặn bất cứ lúc nào; đừng xây sản phẩm trên đó nếu không có thoả thuận.
  • Dữ liệu cá nhân: file capture có thể chứa token, mật khẩu — xoá hoặc che trước khi chia sẻ.
  • Chỉ kiểm thử khi được phép, đúng phạm vi bug bounty hoặc hợp đồng.

Áp dụng thế nào?

  • Dev: cho app của chính bạn đi qua mitmproxy, ghi mọi endpoint vào một file OpenAPI, rồi decompile APK bằng jadx xem có bí mật nào bị hardcode.
  • Tech Lead: đưa bước "jadx + grep secrets" vào checklist trước release; mọi thứ trong client — API key, endpoint ẩn, feature flag — đều bị đọc được.
  • PM: khi tích hợp thiết bị không có tài liệu, ước lượng thêm thời gian giải mã giao thức và hỏi nhà cung cấp tài liệu trước — thường rẻ hơn tự dịch ngược.

Nguồn & tham khảo

  1. OWASP Mobile Application Security Testing Guide (MASTG) — OWASP
  2. OWASP MASVS — OWASP
  3. mitmproxy — mitmproxy.org
  4. Wireshark — wireshark.org
  5. skylot/jadx — GitHub
  6. Apktool — apktool.org
  7. sensepost/objection — GitHub