# 백악관 공식 앱 디컴파일 결과 드러난 추적 및 외부 코드 구조

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=27968](https://news.hada.io/topic?id=27968)
- GeekNews Markdown: [https://news.hada.io/topic/27968.md](https://news.hada.io/topic/27968.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-03-29T11:33:02+09:00
- Updated: 2026-03-29T11:33:02+09:00
- Original source: [thereallo.dev](https://thereallo.dev/blog/decompiling-the-white-house-app)
- Points: 1
- Comments: 1

## Topic Body

- React Native 기반의 **백악관 공식 앱**은 WordPress 백엔드와 Expo SDK 54, Hermes 엔진을 사용하며, 뉴스·사진·정책 등 콘텐츠를 제공하는 포털 형태임
- 모든 WebView에 **JavaScript 주입 코드**가 포함되어 쿠키 배너, GDPR 동의창, 페이월 요소 등을 자동으로 제거함
- **OneSignal SDK**를 통한 위치 추적 및 사용자 프로파일링 기능이 완전 포함되어 있으며, GPS 데이터를 4.5분~9.5분 간격으로 수집 가능함
- 앱은 **GitHub Pages, Elfsight, Mailchimp, Uploadcare, Truth Social** 등 외부 상용 서비스를 로드해 공급망 위험과 추적 가능성을 내포함
- **SSL 핀닝 미적용, 개발용 리소스 포함, 외부 코드 실행 가능성** 등으로 인해 정부 공식 앱으로서는 **보안·프라이버시 측면의 우려**가 제기됨

---

### 앱 개요
- **White House 공식 앱**은 App Store와 Google Play에 공개된 React Native 기반 애플리케이션
  - **Expo SDK 54**와 **Hermes JavaScript 엔진**을 사용
  - 백엔드는 **WordPress** 기반의 커스텀 REST API 구조
  - Expo 설정에 따르면 제작 주체는 **“forty-five-press”** 로 명시
- 앱 로직은 5.5MB 크기의 Hermes 바이트코드 번들로 컴파일되어 있으며, 네이티브 코드는 단순 래퍼 형태
- 버전은 47.0.1, 빌드 20, Hermes 및 New Architecture 활성화 상태

### Expo 설정
- 두 개의 플러그인 **`withNoLocation`** 과 **`withStripPermissions`** 이 포함되어 있음
  - 위치 정보 제거 및 권한 스트립 관련 기능으로 추정
- **OTA 업데이트 비활성화**, Expo 업데이트 인프라는 포함되어 있으나 동작하지 않음

### 앱의 실제 기능
- Hermes 번들 문자열 분석 결과, 앱은 **whitehouse.gov의 WordPress REST API**를 통해 콘텐츠를 로드
  - 주요 엔드포인트는 `/wp-json/whitehouse/v1/home`, `/news/articles`, `/wire`, `/live`, `/galleries`, `/issues`, `/priorities`, `/achievements`, `/affordability`, `/media-bias`, `/social/x` 등
- 앱 내 문자열에는 `"THE TRUMP EFFECT"`, `"Greatest President Ever!"`, `"Text President Trump"`, `"Visit TrumpRx.gov"`, `"Visit TrumpAccounts.gov"` 등이 포함
- 또한 `https://www.ice.gov/webform/ice-tip-form` 링크가 직접 포함되어 있음
- 전체적으로 **뉴스, 생중계, 사진, 정책, 소셜 피드, 행정부 홍보 콘텐츠**를 제공하는 포털 형태

### 쿠키·페이월 차단 스크립트
- 외부 링크를 여는 **WebView**에 매 페이지 로드 시 **JavaScript 주입 코드**가 실행됨
  - 이 스크립트는 **쿠키 배너, GDPR 동의창, 로그인/회원가입 벽, 업셀·페이월 요소, CMP 박스** 등을 숨김
  - `body { overflow: auto !important }`를 강제 적용해 스크롤 잠금 해제
  - **MutationObserver**를 통해 새로 추가되는 동의창도 지속적으로 제거
- 결과적으로 **미국 정부 공식 앱이 제3자 웹사이트의 쿠키·GDPR·페이월 요소를 제거하는 코드**를 주입하는 구조

### 위치 추적 인프라
- `withNoLocation` 플러그인이 있음에도 **OneSignal SDK의 위치 추적 코드가 완전히 포함**되어 있음
  - 추적 활성화 조건은 세 가지
    1. `_isShared` 플래그가 true로 설정 (`setLocationShared(true)` 호출 시)
    2. 사용자가 런타임에서 위치 권한을 허용
    3. 기기에 위치 제공자(GMS/HMS)가 존재
  - 조건 충족 시 **4.5분(전경)**, **9.5분(백그라운드)** 간격으로 GPS 요청
  - 수집 데이터: 위도, 경도, 정확도, 타임스탬프, 포그라운드/백그라운드 여부, 위치 정밀도
  - 데이터는 **OneSignal의 PropertiesModel**을 통해 서버로 동기화
  - 백그라운드 서비스도 포함되어 있어 앱 비활성 상태에서도 위치 캡처 가능
- JS 번들 내 `setLocationShared` 호출 여부는 확인 불가하지만, **전체 파이프라인이 활성화 가능한 상태로 컴파일되어 있음**

### OneSignal 사용자 프로파일링
- OneSignal SDK는 단순 푸시 알림 외에 **사용자 행동 추적 및 세분화 기능**을 수행
  - 주요 기능: `addTag`, `addSms`, `addAliases`, `addOutcomeWithValue`, `addUniqueOutcome`, `notificationClicked`, `inAppMessageClicked`, `permissionChanged`, `subscriptionChanged`, `userStateChanged`, `setPrivacyConsentRequired`, `setPrivacyConsentGiven` 등
  - 로컬 DB는 **알림 수신·열람·무시 여부**를 기록
- 결과적으로 **위치, 알림 상호작용, 인앱 메시지 클릭, 전화번호, 태그, 상태 변화** 등이 OneSignal 서버로 전송됨

### 공급망 위험: 외부 코드 로딩
- ## GitHub Pages
  - `react-native-youtube-iframe` 라이브러리가 **`lonelycpp.github.io`** 에서 HTML을 로드
  - 해당 GitHub 계정이 침해될 경우 **임의의 JavaScript가 앱 WebView 내에서 실행 가능**
- ## Elfsight 위젯
  - **Elfsight**의 `platform.js`를 통해 소셜 피드 임베드
  - 상용 SaaS 코드가 **샌드박싱 없이 실행**, 추적 가능성 존재
  - 위젯 ID `4a00611b-befa-466e-bab2-6e824a0a98a9`가 하드코딩
- ## 기타 외부 서비스
  - **Mailchimp**: 이메일 구독 처리 (`whitehouse.us10.list-manage.com`)
  - **Uploadcare**: 이미지 호스팅 (`ucarecdn.com`)
  - **Truth Social**: 트럼프 프로필 및 “Follow” 버튼 포함
  - **Facebook**: 페이지 플러그인 iframe 로드
  - 이들 모두 **정부 인프라가 아닌 외부 상용 서비스**

### 보안 설정
- **SSL 인증서 핀닝 없음**, 표준 Android TrustManager 사용
  - 공용 Wi-Fi나 프록시 환경에서 **MITM 공격 시 트래픽 노출 가능성**

### 개발 잔여물
- 프로덕션 빌드에 **개발용 URL 및 리소스**가 포함
  - `localhost` 및 개발자 IP(`10.4.4.109`) 문자열 존재
  - **Expo 개발 클라이언트(`expo-dev-client`, `expo-devlauncher`, `expo-devmenu`)** 가 포함
  - `dev_menu_fab_icon.png` 리소스 존재
  - **Compose `PreviewActivity`** 가 매니페스트에 export 상태로 포함

### 권한 구조
- AndroidManifest는 일반적인 알림 중심 권한 외에 **다수의 런처 배지 권한(삼성, HTC, Sony 등)** 포함
- 런타임 요청 문자열로 **정밀 위치, 대략적 위치, 백그라운드 위치** 권한이 존재
- Google Play 설명에는 다음 권한도 명시
  - “공유 저장소 수정/삭제”, “포그라운드 서비스 실행”, “다른 앱 위에 표시”, “부팅 시 실행”, “지문·생체인식 하드웨어 사용”
- FileProvider 설정은 **외부 저장소 루트 전체 노출**, WebView 파일 접근에 사용

### 포함된 SDK 목록
- 총 **68개 이상 라이브러리** 포함
  - **프레임워크**: React Native, Expo SDK 54, Hermes
  - **푸시/참여**: OneSignal, Firebase Cloud Messaging, Firebase Installations
  - **분석/텔레메트리**: Firebase Analytics, Google Data Transport, OpenTelemetry
  - **네트워킹**: OkHttp3, Apollo GraphQL, Okio
  - **이미지**: Fresco, Glide, Coil 3, Uploadcare CDN
  - **비디오**: ExoPlayer(Media3), Expo Video
  - **ML**: Google ML Kit Vision(바코드 스캐닝), Barhopper 모델
  - **암호화**: Bouncy Castle
  - **저장소**: Expo Secure Store, React Native Async Storage
  - **WebView**: React Native WebView (주입 스크립트 포함)
  - **DI**: Koin
  - **직렬화**: GSON, Wire(Protocol Buffers)
  - **라이선스 검증**: PairIP (Google Play 확인용)
- arm64 빌드에 25개의 네이티브 `.so` 라이브러리 포함

## Comments



### Comment 54065

- Author: neo
- Created: 2026-03-29T11:33:03+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=47555556) 
- 기사 내용이 **AI가 쓴 것처럼** 보여서 좀 의심스러웠음  
  호기심에 앱을 직접 설치해봤는데, 기사 주장과 달리 위치 권한 요청은 전혀 없었음  
  Claude Code로 APK를 디컴파일해봤지만, 이 도구는 **도달성 분석**이나 복잡한 제어 흐름 파악에는 약함  
  호출되지 않는 죽은 코드도 실제 사용되는 함수처럼 다뤄서 오해를 일으킴
  - 기사에 나온 권한 목록에도 위치 권한은 없었음  
    런타임에서 위치를 요청하려면 반드시 선언이 필요한데, 그 부분이 없음  
    내 폰(아마 Graphene 때문일 수도 있음)에서는 Play가 설치를 막아서 APK를 직접 확인하진 못했음  
    Play 스토어의 “정보 → 권한” 항목을 보면 47.0.1 버전은 네트워크 접근, 진동 제어, 알림 표시 등 일반적인 권한만 있음  
    아마 **버전 롤아웃**이나 기기별 타깃팅일 가능성이 있음
  - “AI가 쓴 것 같다”는 근거가 구체적으로 있는지 궁금함  
    나는 그렇게 느껴지진 않았음
  - 기사는 앱이 위치 권한을 요청한다고 한 게 아니라, **JS 한 줄로 위치를 가져올 수 있다**고 설명한 것임
  - 혹시 앱 버전이 다른가?  
    iPhone App Store 기준으로 47.0.1 버전이 34분 전에 올라왔고, “사소한 버그 수정”이라고 되어 있음  
    아마 그 수정에 위치 관련 코드가 포함됐을 수도 있음
  - 디컴파일 과정에서 앱이 **거짓 정보를 보여줬을 가능성**은 없는지 궁금함

- 전형적인 **컨설팅 회사의 마케팅 앱**처럼 보였음  
  외주 개발자가 표준 아키텍처를 사용하면서 위치 추적 코드 같은 게 기본 포함된 듯함
  - 위치 추적 코드는 OneSignal SDK 안에 포함된 것임  
    이건 단순히 푸시 알림용 플랫폼이라, 앱이 직접 권한을 요청하지 않으면 아무 일도 안 함
  - 45Press가 그런 회사임  
    백악관 관련 지원 계약(약 150만 달러 규모)을 따내서 이런 앱을 만든 것 같음
  - 예전처럼 **US Digital Service**가 남아 있었다면 이런 걸 제대로 만들 수 있었을 텐데 아쉬움  
    지금은 거의 해체돼서 DOGE라는 조직으로 바뀌었고, 여러 소송에 휘말려 있음  
    [United States Digital Service 위키 문서](https://en.wikipedia.org/wiki/United_States_Digital_Service)
  - r8이 React Native 코드를 제대로 이해하지 못해서 **죽은 코드 제거(tree shaking)** 를 제대로 못함  
    그래서 다른 앱에서 재사용된 흔적이 남아 있는 듯함
  - “Visit TrumpRx.gov”라는 문구를 보고 깜짝 놀랐음  
    .gov 도메인을 **상업적 홍보**에 쓰는 게 가능한지 의문임

- 만약 기사 내용이 사실이라면, 이는 **자유의 상징적 종말**을 의미하는 사건일 것임  
  미국이 자랑하던 가치가 사라지는 느낌임

- 정부 공식 앱이 제3자 웹사이트에 **CSS와 JavaScript를 삽입해 쿠키 배너나 페이월을 제거**한다는 건 놀라움  
  나는 비공개 정부 앱은 설치하지 않겠지만, 기능 자체는 uBlock처럼 긍정적으로 보임

- 사이트가 너무 느려서 거의 사용할 수 없었음  
  내 2019년형 MacBook Pro + Chrome 환경에서 스크롤이 심하게 끊김
  - Firefox 149 (Windows 10)에서도 스크롤이 엉망이었음  
    아이러니하게도, 웹 개발을 비판하는 기사가 이런 **웹 성능 문제**를 보임
  - 모바일 Firefox(151.0a1)에서도 스크롤이 너무 버벅거려서 읽기 힘들었음
  - ThinkPad + Chrome 환경에서도 동일한 현상 발생
  - 원문 사이트의 **웹 품질이 형편없음**에 동의함
  - Android 14 + Firefox 148.0.2에서는 정상 작동했음

- 인증서 **pinning이 없다는 비판**은 좀 과장된 것 같음  
  MITM 공격이 가능한 네트워크에 있더라도, 내 기기가 그 CA를 신뢰하지 않으면 TLS 오류가 날 뿐임
  - 하지만 누군가 내 폰이 신뢰하는 CA로 서명된 인증서를 발급받는다면 이야기가 달라짐  
    예를 들어, 감시가 일상적인 특정 국가의 대사관 근처 카페에서 트래픽을 가로채는 경우를 상상해볼 수 있음  
    이런 일은 드물지만 완전히 불가능한 건 아님
  - MDM을 사용하는 조직이라면 자체 CA를 기기에 푸시할 수 있어서 예외가 생김
  - 이 논의는 이미 **구식 보안 관행**에 기반한 것이라 현재에는 크게 의미가 없음

- 이 사이트는 브라우저가 **멈출 정도로 무거움**  
  리더 모드로만 겨우 읽을 수 있었음
  - 나도 같은 현상을 겪었음  
    태블릿 문제인 줄 알았는데, 다른 사람들도 그렇다니 흥미로움

- 스크롤 시 GPU 부하가 심해서 **그래픽 리소스 사용량**이 높음

- 요즘 백악관은 **법 위반**이 일상인 것 같음

- 처음부터 **악성코드일 거라고 가정**했음, 그리고 그 예상이 맞았음
