---
title: "백악관 공식 앱을 디컴파일해봤더니 — GDPR 배너 강제 제거, GPS 추적, 개인 GitHub에서 코드 로드"
published: 2026-03-31T17:47:42.000Z
canonical: https://jeff.news/article/1433
---
# 백악관 공식 앱을 디컴파일해봤더니 — GDPR 배너 강제 제거, GPS 추적, 개인 GitHub에서 코드 로드

백악관 공식 Android 앱을 디컴파일한 결과, 인앱 브라우저에서 쿠키 동의/페이월을 강제 제거하는 JS 주입, 완전히 컴파일된 GPS 추적 파이프라인, 개인 GitHub Pages에서 코드 로드, 프로덕션 빌드에 개발 잔재가 남아있는 것을 발견.

## 앱 기본 구조

- 백악관이 공식 앱을 출시했는데, 누군가가 APK를 뜯어봤음 — React Native + Expo SDK 54, Hermes JS 엔진, 백엔드는 WordPress
  - "forty-five-press"라는 업체가 만들었고, 5.5MB Hermes 바이트코드 번들에 68개 이상 라이브러리 포함
  - WordPress REST API(`whitehouse/v1`)로 뉴스, 라이브 스트림, 갤러리, 정책 이슈 등을 제공하는 콘텐츠 포털
  - 하드코딩된 문자열 중에 "Greatest President Ever!" (ㅋㅋ), ICE 신고 폼 링크도 있음

## 인앱 브라우저의 동의 배너 강제 제거

- 앱 내 WebView에서 외부 링크를 열 때마다 JavaScript를 주입해서 다음을 숨김:
  - 쿠키 배너, GDPR 동의 다이얼로그, OneTrust 팝업, 프라이버시 배너
  - 로그인 월, 회원가입 월, 업셀 프롬프트, **페이월**까지
  - `MutationObserver`로 동적으로 추가되는 동의 요소도 계속 제거
  - `body { overflow: auto !important }`로 스크롤 잠금도 해제

> [!WARNING]
> 미국 정부 공식 앱이 서드파티 웹사이트에 CSS/JS를 주입해서 쿠키 동의, GDPR 배너, 페이월을 강제로 제거하고 있음.

## GPS 추적 파이프라인

- OneSignal SDK의 위치 추적 코드가 APK에 완전히 컴파일되어 있음
  - 포그라운드 4.5분, 백그라운드 9.5분 간격으로 GPS 폴링
  - 위도, 경도, 정확도, 타임스탬프, 포그라운드/백그라운드 여부, fine/coarse 구분까지 전부 OneSignal 서버로 동기화
  - 백그라운드 서비스로 앱이 비활성 상태에서도 위치 수집 가능
- 활성화 조건이 3가지 있음: `_isShared` 플래그(JS에서 토글 가능), 런타임 위치 권한, 위치 제공자 존재
  - `withNoLocation`이라는 Expo 플러그인이 위치 코드를 제거했어야 하는데 **실제로는 아무것도 제거하지 않음**
  - JS 번들에 `setLocationShared`와 `isLocationShared` 참조가 존재 — `setLocationShared(true)` 한 줄이면 전체 파이프라인 가동

## 서드파티 의존성 문제

- YouTube 임베드에 `lonelycpp.github.io`라는 **개인 GitHub Pages 사이트**에서 HTML을 로드함
  - 이 계정이 탈취되면 앱 WebView 안에서 임의 코드 실행 가능 — 정부 앱이 랜덤 개인의 GitHub Pages에서 코드를 불러오는 상황
- Elfsight(상용 SaaS 위젯)의 JS를 샌드박싱 없이 로드, Mailchimp로 이메일 수집, Uploadcare에서 이미지 호스팅, Truth Social 임베드 하드코딩
  - 이 중 어느 것도 정부 통제 인프라가 아님
- SSL 인증서 피닝 없음 — 표준 Android TrustManager만 사용
  - 기업 프록시나 공용 WiFi에서 MITM 가능

## 프로덕션 빌드에 남은 개발 잔재

- `localhost:8081` URL(Metro 번들러 개발 서버)이 프로덕션 Hermes 번들에 포함
- 개발자 로컬 IP `10.4.4.109`가 문자열 리소스에 하드코딩
- Expo 개발 클라이언트와 Compose `PreviewActivity`가 릴리스 빌드에 export됨
- OneSignal을 통한 광범위한 사용자 프로파일링: 태그, SMS 번호, 크로스 디바이스 식별, 행동 추적, 알림 상호작용 로깅, 인앱 메시지 클릭 추적

---

## 기술 맥락

- React Native 앱의 WebView `injectedJavaScript`는 원래 자사 웹 콘텐츠를 커스터마이징할 때 쓰는 기능인데, 이걸 서드파티 사이트에 적용하면 사실상 브라우저 확장 프로그램 수준의 페이지 조작이 돼요. GDPR 동의 배너를 제거하는 건 EU 법률 위반 소지가 있거든요
- Expo의 config plugin 시스템(`withNoLocation`, `withStripPermissions`)은 빌드 타임에 네이티브 코드를 수정하는 방식인데, OneSignal 같은 SDK가 자체 네이티브 모듈로 위치 코드를 주입하면 Expo 플러그인이 이를 인식하지 못할 수 있어요. 이건 Expo 생태계에서 서드파티 SDK와의 충돌이 흔한 문제
- 개인 GitHub Pages에서 코드를 로드하는 건 `react-native-youtube-iframe` 라이브러리의 기본 동작이에요. 이 라이브러리가 YouTube IFrame API를 감싸는 HTML을 자체 호스팅하는 건데, 정부 앱처럼 보안 요구사항이 높은 환경에서는 이런 외부 의존성을 자체 CDN으로 가져와야 했어요

## 핵심 포인트

- WebView에서 GDPR 배너/페이월 강제 제거 JS 주입
- OneSignal 통한 4.5분/9.5분 간격 GPS 추적 파이프라인 내장
- YouTube 임베드를 개인 GitHub Pages에서 로드
- 개발 서버 URL/IP가 프로덕션 빌드에 잔존

## 인사이트

React Native + Expo 기반 정부 앱의 보안 실태를 적나라하게 보여주는 리버스 엔지니어링. 특히 서드파티 의존성 관리와 빌드 위생 문제는 모든 모바일 개발팀이 점검해볼 만함.
