GN⁺: 디버깅이 불가능한 앱 디버깅
(bryce.co)디버깅이 불가능한 앱 디버깅하기
- 최근에 디버깅이 불가능한 앱을 만났음. 이 앱은 디버거 연결을 차단하고, 코드 주입 시 조기에 종료되며, 탈옥된 기기에서 실행하면 전체 폰을 크래시시킴.
- 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를 실행할 수 있는지 궁금함
- 커널 자체를 수정하는 것이 더 멋진 방법임