1 điểm bởi GN⁺ 2025-02-19 | 1 bình luận | Chia sẻ qua WhatsApp

Gỡ lỗi một ứng dụng không thể gỡ lỗi

  • Gần đây tôi gặp một ứng dụng không thể gỡ lỗi. Ứng dụng này chặn việc gắn trình gỡ lỗi, thoát sớm khi có chèn mã và làm sập toàn bộ điện thoại khi chạy trên thiết bị đã jailbreak.
  • Ứng dụng iOS thường chứa thêm các cơ chế bảo vệ như phát hiện jailbreak hoặc làm rối mã. Ứng dụng này đặc biệt kết hợp rất nhiều lớp bảo vệ.

Phiên bản video

  • Có một phiên bản video của bài viết này, trình bày quy trình chi tiết hơn.

Mục lục

  • PT_DENY_ATTACH
  • Vượt qua PT_DENY_ATTACH (chế độ dễ)
  • Vượt qua PT_DENY_ATTACH (chế độ khó)
  • Điện thoại bị sập
  • Chèn mã
  • Kết luận

PT_DENY_ATTACH

  • Gắn trình gỡ lỗi là bước đầu tiên. Trên điện thoại đã jailbreak, việc gắn trình gỡ lỗi thường khá dễ.
  • Một hàm tên là ptrace chặn việc gắn trình gỡ lỗi. Hàm này dùng yêu cầu PT_DENY_ATTACH để ngăn các lần gắn trình gỡ lỗi trong tương lai.

Vượt qua PT_DENY_ATTACH (chế độ dễ)

  • PT_DENY_ATTACH chỉ chặn trình gỡ lỗi sau khi được gọi. Nếu đặt breakpoint trước khi nó được gọi thì trình gỡ lỗi vẫn có thể gắn bình thường.
  • Có thể đặt breakpoint ngay trên chính hàm ptrace để vượt qua lời gọi này.

Vượt qua PT_DENY_ATTACH (chế độ khó)

  • Một số nhà phát triển triển khai cơ chế chặn trình gỡ lỗi bằng cách dùng syscall trực tiếp thay vì ptrace.
  • Trong trường hợp này, cần tìm syscall tương ứng trong binary rồi vượt qua nó.

Điện thoại bị sập

  • Ứng dụng khiến điện thoại soft reboot trong những điều kiện nhất định. Điều này xảy ra do nó gọi một phương thức ngốn bộ nhớ trong vòng lặp vô hạn.
  • Có thể dùng lldb để vượt qua phương thức này.

Chèn mã

  • Ứng dụng bị crash khi chèn mã. Đây có thể là vấn đề do app group identifier không đúng.
  • Trên điện thoại đã jailbreak, có thể chèn mã mà không cần ký lại ứng dụng. Nếu không, có thể giải quyết vấn đề bằng cách swizzle method.

1 bình luận

 
GN⁺ 2025-02-19
Ý kiến Hacker News
  • Bryce Bostwick làm những công việc rất ngầu và đầy cảm hứng trong lĩnh vực gỡ lỗi và đảo ngược ứng dụng

    • Xem video YouTube của anh ấy về cách chỉnh TikTok để chỉ hiện video mèo đã truyền cảm hứng để tôi sửa Instagram, chỉ giữ lại tính năng nhắn tin và loại bỏ mọi thứ khác
    • Tôi quan tâm đến việc chỉnh Windows theo phong cách Windhawk
    • Bryce giới thiệu những công việc này trên iOS thông qua các video từng bước theo thời gian thực
  • Trên DOS/Windows, các thủ thuật chống gỡ lỗi đã phổ biến từ rất lâu

    • Mức độ dễ dàng để người dùng kiểm soát có quan hệ tỉ lệ nghịch với mức độ thù địch với người dùng của nền tảng
    • PT_DENY_ATTACH có vẻ là một tính năng phục vụ cho vế sau
    • Trên Windows có một mẹo để ứng dụng tự gắn vào chính nó
  • Thật ngạc nhiên khi quy trình kiểm tra App Store của Apple không từ chối các ứng dụng thực hiện syscall trực tiếp

    • Trên nền tảng Apple, syscall không phải ABI ổn định nên phải đi qua libSystem
    • Ứng dụng thực hiện syscall trực tiếp là đang làm điều mà đáng ra không nên làm
  • Tôi thắc mắc vì sao tác giả lại tìm svc 0x80 thay vì mov w16, #26

  • Tác giả sẵn sàng trả lời câu hỏi

  • Video ở đầu là một video lập trình rất xuất sắc

    • Tiến độ nhanh, giả định kiến thức hợp lý, và các bản demo tuyệt vời không làm gián đoạn mạch nội dung
  • Tôi thắc mắc liệu đây có phải là một ứng dụng hợp pháp hay là thứ bị nghi là malware nên mới bị gỡ lỗi

    • Nếu không phải vậy thì hẳn đã tốn rất nhiều công sức
  • Vượt qua PT_DENY_ATTACH (Hard Mode)

    • Trên macOS, vá kernel để PT_DENY_ATTACH không làm gì cả
    • Trên macOS, việc chạy kernel đã được vá là khá dễ
    • Trên iOS sẽ có thêm nhiều vấn đề hơn (KTRR, v.v.)
    • XNU về mặt kỹ thuật là mã nguồn mở, nhưng vá bằng hexeditor còn dễ hơn biên dịch lại
  • Tôi thắc mắc về thông báo "com.apple.tw.twrr"

    • Tại sao nó lại bắt đầu bằng com.apple
    • Ứng dụng đó không phải ứng dụng của Apple
  • Tôi thắc mắc có ai đang đảo ngược mã JavaScript của các trang web hay không

  • Tôi thắc mắc liệu có thể chạy kext tùy chỉnh trên iPhone đã jailbreak hay không

    • Sửa chính kernel có lẽ là cách ngầu hơn