1P by neo 10일전 | ★ favorite | 댓글 1개

디버깅이 불가능한 앱 디버깅하기

  • 최근에 디버깅이 불가능한 앱을 만났음. 이 앱은 디버거 연결을 차단하고, 코드 주입 시 조기에 종료되며, 탈옥된 기기에서 실행하면 전체 폰을 크래시시킴.
  • iOS 앱은 종종 탈옥 감지나 코드 난독화 같은 추가 보호 기능을 포함함. 이 앱은 특히 많은 보호 기능을 결합하고 있음.

비디오 버전

  • 이 게시물의 비디오 버전이 있으며, 더 자세한 과정을 보여줌.

목차

  • PT_DENY_ATTACH
  • PT_DENY_ATTACH 우회 (쉬운 모드)
  • PT_DENY_ATTACH 우회 (어려운 모드)
  • 폰 크래시
  • 코드 주입
  • 마무리

PT_DENY_ATTACH

  • 디버거를 연결하는 것이 첫 번째 단계임. 탈옥된 폰에서는 보통 디버거 연결이 쉬움.
  • ptrace라는 함수가 디버거 연결을 차단함. 이 함수는 PT_DENY_ATTACH 요청을 통해 디버거의 미래 연결을 차단함.

PT_DENY_ATTACH 우회 (쉬운 모드)

  • PT_DENY_ATTACH는 호출 후에만 디버거를 차단함. 호출 전에 브레이크포인트를 설정하면 디버거가 정상적으로 연결됨.
  • ptrace 함수 자체에 브레이크포인트를 설정하여 호출을 우회할 수 있음.

PT_DENY_ATTACH 우회 (어려운 모드)

  • 일부 개발자는 ptrace 대신 직접 시스템 호출을 사용하여 디버거 차단을 구현함.
  • 이 경우, 바이너리에서 해당 시스템 호출을 찾아 우회해야 함.

폰 크래시

  • 앱이 특정 조건에서 폰을 소프트 리부팅 시킴. 이는 메모리 집약적인 메서드를 무한 루프로 호출하여 발생함.
  • lldb를 사용하여 이 메서드를 우회할 수 있음.

코드 주입

  • 코드 주입 시 앱이 크래시됨. 이는 앱 그룹 식별자가 잘못되어 발생하는 문제일 가능성이 높음.
  • 탈옥된 폰에서는 앱을 재서명하지 않고도 코드를 주입할 수 있음. 그렇지 않은 경우, 메서드를 스위즐링하여 문제를 해결할 수 있음.
Hacker News 의견
  • Bryce Bostwick는 디버깅과 리버스 엔지니어링 앱에서 매우 멋지고 영감을 주는 작업을 함

    • 그의 YouTube 영상에서 TikTok을 고양이 비디오만 보이도록 수정하는 방법을 보고 영감을 받아 Instagram을 메시지 기능만 남기고 나머지를 제거하도록 수정했음
    • Windows를 Windhawk 스타일로 수정하는 것에 관심이 있음
    • Bryce는 iOS에서 실시간으로 단계별 비디오를 통해 이러한 작업을 소개함
  • DOS/Windows에서는 오래전부터 안티-디버깅 트릭이 일반적이었음

    • 사용자 제어가 쉬운 정도는 플랫폼의 사용자 적대성에 반비례함
    • PT_DENY_ATTACH는 후자를 위한 기능으로 보임
    • Windows에서는 앱이 스스로에 붙도록 하는 트릭이 있음
  • Apple의 App Store 검사가 직접적인 시스템 호출을 하는 앱을 거부하지 않는 것이 놀라움

    • Apple 플랫폼에서 시스템 호출은 안정적인 ABI가 아니므로 libSystem을 통해야 함
    • 직접 시스템 호출을 하는 앱은 하지 말아야 할 일을 하는 것임
  • 저자가 mov w16, #26 대신 svc 0x80을 검색한 이유가 궁금함

  • 저자가 질문에 답변할 준비가 되어 있음

  • 상단의 비디오는 매우 훌륭한 프로그래밍 비디오임

    • 빠른 진행, 적절한 지식 가정, 훌륭한 데모가 흐름을 방해하지 않음
  • 이 앱이 합법적인 앱인지 아니면 맬웨어로 의심받아 디버깅된 것인지 궁금함

    • 그렇지 않다면 많은 노력이 들어갔을 것임
  • PT_DENY_ATTACH 우회 (Hard Mode)

    • macOS에서 커널을 패치하여 PT_DENY_ATTACH가 아무것도 하지 않도록 함
    • macOS에서는 패치된 커널을 실행하기 쉬움
    • iOS에서는 더 많은 문제가 있을 것임 (KTRR 등)
    • XNU는 기술적으로 오픈 소스이지만, 재컴파일보다 hexeditor로 패치하는 것이 더 쉬웠음
  • "com.apple.tw.twrr" 알림에 대해 궁금함

    • 왜 com.apple로 시작하는지
    • 해당 앱은 Apple 앱이 아님
  • 웹사이트의 자바스크립트 코드를 리버스 엔지니어링하는 사람들에 대해 아는지 궁금함

  • 탈옥된 iPhone에서 커스텀 kexts를 실행할 수 있는지 궁금함

    • 커널 자체를 수정하는 것이 더 멋진 방법임