---
title: "아이폰 앱이 조용히 읽어갈 수 있는 정보, 루프로 직접 까보는 프로젝트"
published: 2026-06-20T12:08:23.000Z
canonical: https://jeff.news/article/4164
---
# 아이폰 앱이 조용히 읽어갈 수 있는 정보, 루프로 직접 까보는 프로젝트

루프는 iOS와 iPadOS에서 서드파티 앱이 공개 API만으로 읽을 수 있는 기기 정보들을 직접 보여주는 오픈소스 앱이다. 로케일, 시간대, 화면, 배터리 같은 무권한 정보부터 연락처·사진·위치 권한, URL 스킴 탐지와 키체인 잔존성 같은 고급 기법까지 기기 지문 채취 표면을 체험하게 해준다. 수집한 값은 사용자가 명시적으로 내보내지 않는 한 기기 밖으로 나가지 않는다.

- 루프(Loupe)는 아이폰·아이패드 앱이 공개 iOS API만으로 볼 수 있는 값을 직접 보여주는 오픈소스 앱임
  - 개발자가 문서로만 보던 “앱이 이 정도는 볼 수 있다”를 실제 기기 값으로 까서 보여주는 쪽에 가까움
  - 값은 가공하거나 해시하지 않고 raw 형태로 보여주며, 사용자가 명시적으로 내보내지 않는 한 업로드·동기화·공유하지 않음

- 핵심 메시지는 꽤 단순함. 추적기는 이름, 이메일, 위치가 없어도 사용자를 다시 알아볼 수 있음
  - 로케일, 시간대, 화면 정보, 배터리 상태 같은 값은 각각만 보면 별거 아닌 정보처럼 보임
  - 그런데 이런 값들이 여러 개 합쳐지면 앱과 웹사이트를 넘나드는 기기 지문(Device Fingerprinting)이 됨
  - “권한 안 줬으니 안전하겠지”라고 생각하기 쉬운데, 무권한으로 읽히는 표면도 꽤 있다는 걸 보여주는 프로젝트임

> [!IMPORTANT]
> 루프가 보여주는 값들은 사설 해킹 API가 아니라, 서드파티 앱이 호출할 수 있는 공개 iOS API에서 나온다. 그래서 더 찝찝한 포인트가 있음.

- 루프는 읽을 수 있는 정보를 접근 비용 기준으로 3단계로 나눔
  - Passive는 별도 프롬프트 없이 앱이 볼 수 있는 정보임. 로케일, 시간대, 화면, 배터리 같은 값이 여기에 들어감
  - Needs Permission은 iOS 권한 팝업이 뜨는 항목임. 연락처, 사진, 위치, 캘린더 같은 익숙한 민감 권한들이 포함됨
  - Advanced는 공개 API를 영리하게 비틀어 쓰는 사이드채널 성격의 항목임. 예를 들어 canOpenURL을 통한 URL 스킴 탐지, 앱 재설치 뒤에도 남을 수 있는 Keychain persistence 같은 것들임

- iOS 보안 모델을 공부하는 개발자한테는 꽤 실용적인 샘플임
  - 단순한 프라이버시 캠페인 앱이 아니라, 실제 API 호출 결과를 보여주는 데모 앱이라 테스트·교육용으로 쓰기 좋음
  - 모바일 앱 개발자가 “이 권한은 프롬프트가 뜨고, 이 값은 그냥 읽힌다”를 감으로 외우는 대신 눈으로 확인할 수 있음
  - 개인정보 처리방침이나 앱 심사 대응을 해야 하는 팀이라면, 어떤 정보가 사용자 식별 표면이 될 수 있는지도 다시 점검하게 됨

- 빌드 조건은 최신 편임. Xcode 26 이상이 필요함
  - `code/Loupe.xcodeproj`를 열고, `code/Config/Signing.local.xcconfig.example`을 `code/Config/Signing.local.xcconfig`로 복사한 뒤 개발팀과 번들 식별자를 채우는 방식임
  - 이 설정 파일은 gitignore 처리돼서 공개 저장소에 올라가지 않음
  - Xcode의 buildable folders, 즉 folder references를 써서 새 Swift 파일을 추가해도 프로젝트 파일을 따로 만질 필요가 없다고 설명함

- macOS 빌드도 지원하지만, 맥 버전은 아직 마무리 작업이 남아 있는 상태임
  - iOS·iPadOS 쪽이 메인이고, 맥 버전은 “대부분 완성됐지만 아직 polish 전” 정도로 보면 됨
  - 프로젝트 자체는 거의 전부 AI 코딩 도구로 작성됐다고 밝힘. 프라이버시 데모 앱을 AI 도구로 거의 다 만들었다는 점도 요즘스럽고 흥미로운 디테일임

- 라이선스는 소스 코드와 브랜드 자산이 분리돼 있음
  - 소스 코드는 MIT 라이선스로 공개됨
  - 다만 Loupe 이름과 로고, 앱 아이콘, 이미지·아이콘·디자인 원본 파일은 Mysk 저작권이며 MIT 라이선스 대상이 아님
  - 무료 오픈소스 프로젝트지만, 브랜딩까지 마음대로 가져다 쓰는 구조는 아니라는 얘기임

---

## 기술 맥락

- 이 프로젝트가 고른 방식은 “프라이버시 설명”이 아니라 “실제 API 값 노출”이에요. 왜냐하면 기기 지문 채취는 말로 들으면 추상적인데, 내 기기에서 로케일·시간대·화면·배터리 값이 실제로 찍히는 걸 보면 위험 표면이 훨씬 선명해지거든요.

- Passive, Needs Permission, Advanced로 나눈 것도 꽤 좋은 설계예요. iOS 권한 모델은 사용자가 프롬프트를 보는지 여부에 시선이 쏠리기 쉬운데, 실제 추적 가능성은 무권한 값과 사이드채널까지 같이 봐야 판단할 수 있거든요.

- canOpenURL이나 Keychain persistence 같은 항목은 특히 개발자에게 의미가 있어요. 둘 다 정상적인 앱 기능을 위해 존재하는 API나 저장소인데, 사용 맥락에 따라 “사용자를 다시 알아보는 단서”가 될 수 있기 때문이에요.

- Xcode 26 이상, buildable folders, 로컬 서명 설정 파일 분리 같은 구성은 샘플 앱을 직접 빌드해 보려는 사람에게 중요해요. 프라이버시 연구 도구는 문서만 읽는 것보다 실제 기기나 시뮬레이터에서 돌려보는 순간 이해도가 확 올라가거든요.

## 핵심 포인트

- 루프는 iOS 공개 API로 앱이 접근 가능한 실제 값을 원본 그대로 보여준다
- 기기 지문 정보는 개별 값 하나만으로는 약해도 여러 값이 합쳐지면 앱과 웹을 넘나드는 식별 단서가 된다
- 정보 접근 비용에 따라 무권한, 권한 필요, 고급 사이드채널 3단계로 나눠 보여준다
- 프로젝트는 무료 오픈소스이며 소스는 MIT 라이선스지만 이름, 로고, 아이콘, 디자인 자산은 별도 저작권이 적용된다

## 인사이트

iOS가 권한 프롬프트를 잘 띄운다고 해도, 앱이 조용히 볼 수 있는 표면은 생각보다 넓다. 이 프로젝트의 재미는 ‘개인정보 보호’ 얘기를 추상적으로 하지 않고, 내 기기에서 실제로 어떤 값이 보이는지 raw 데이터로 확인하게 만든다는 점이다.
