# 디버깅이 불가능한 앱 디버깅

> Clean Markdown view of GeekNews topic #19303. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19303](https://news.hada.io/topic?id=19303)
- GeekNews Markdown: [https://news.hada.io/topic/19303.md](https://news.hada.io/topic/19303.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-02-19T10:03:06+09:00
- Updated: 2025-02-19T10:03:06+09:00
- Original source: [bryce.co](https://bryce.co/undebuggable/)
- Points: 1
- Comments: 1

## Topic Body

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

- 최근에 디버깅이 불가능한 앱을 만났음. 이 앱은 디버거 연결을 차단하고, 코드 주입 시 조기에 종료되며, 탈옥된 기기에서 실행하면 전체 폰을 크래시시킴.
- 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`를 사용하여 이 메서드를 우회할 수 있음.

#### 코드 주입
- 코드 주입 시 앱이 크래시됨. 이는 앱 그룹 식별자가 잘못되어 발생하는 문제일 가능성이 높음.
- 탈옥된 폰에서는 앱을 재서명하지 않고도 코드를 주입할 수 있음. 그렇지 않은 경우, 메서드를 스위즐링하여 문제를 해결할 수 있음.

## Comments



### Comment 34783

- Author: neo
- Created: 2025-02-19T10:03:06+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43081713) 
- 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를 실행할 수 있는지 궁금함
  - 커널 자체를 수정하는 것이 더 멋진 방법임
