Shadowrocket 등 5개 프록시용 iOS 위치 위조 모듈
프록시의 HTTPS 복호화 경로에서 Apple 위치 응답을 가로채어 Wi Fi BSSID와 기지국 좌표를 포함한 위치 데이터를 원하는 좌표로 대체하는 JavaScript 모듈 세트이다.
TL;DR
이 저장소는 Apple에 대한 위치 질의 응답을 프록시의 HTTPS 복호화 경로에서 가로채어 응답 내 Wi Fi BSSID와 셀타워 좌표를 포함한 위치 데이터를 지정한 좌표로 대체하는 JavaScript 모듈 세트로서 탈옥이나 앱 재서명 없이도 작동한다. 핵심은 응답 포맷 ARPC synthetic marker bare 등을 자동 판별해 포맷별로 적절히 변조하고 필드 22와 24로 표현되는 기지국 좌표와 motionActivity 관련 필드를 함께 수정하는 데 있다. Shadowrocket Surge Loon Quantumult X Stash용 모듈과 웹 기반 location picker를 제공하며 Cloudflare Worker 배포로 원격 configUrl을 활용할 수 있다. 사용자는 프록시에서 MITM을 켜고 CA를 신뢰해야 하며 이 요구사항이 존재하므로 보안과 신뢰성 관리 절차를 반드시 병행해야 한다. 따라서 빠르게 테스트용 위치를 고정하거나 원격으로 위치를 관리하려는 환경에서는 바로 사용 가능하지만 신뢰된 CA 관리와 기기 설정이 전제 조건이다.
주요 기능
- 프록시 모듈로 Shadowrocket Surge Loon Quantumult X Stash에 즉시 가져와 사용할 수 있도록 파일을 제공한다.
- Apple이 반환한 좌표 응답을 MITM 경로에서 가로채어 Wi Fi BSSID와 셀 타워 좌표를 포함해 응답 내부 필드를 즉시 교체한다.
- 응답 포맷 ARPC synthetic marker bare 등을 자동 감지해 변조 후에도 iOS가 올바르게 인식하도록 호환성을 유지한다.
- motionActivityType와 motionActivityConfidence 필드까지 수정해 이동 상태까지 위조함으로써 시스템 탐지 가능성을 낮춘다.
- location picker를 통해 웹에서 포인트를 선택하거나 Cloudflare Worker로 원격 configUrl을 제공해 동적 위치 관리를 지원한다.
어떻게 동작하는가
iPhone이 주변 AP 리스트와 기지국 정보를 Apple에 질의하면 Apple이 좌표 목록을 반환하는 과정에서 프록시의 HTTPS 복호화 기능으로 트래픽을 가로채어 응답 바디의 좌표 값을 찾아 대상 좌표로 덮어쓴다. 핵심 스크립트는 Wi Fi BSSID와 셀타워 관련 필드를 변조하며 특히 필드 번호 22와 24로 표현되는 셀타워 좌표를 치환하는 로직을 포함한다. 또한 Apple 응답의 포맷 차이가 존재하므로 ARPC synthetic marker bare 등의 포맷을 자동 판별해 변조 후에도 iOS가 정상적으로 위치를 계산하도록 포맷별 처리 루틴을 적용한다.
해결 문제
정상적인 iOS 기기에서 탈옥 없이도 기기의 위치 산출을 원하는 좌표로 바꾸어야 하는 문제를 해결한다. 이 저장소는 Apple에 대한 위치 질의 응답을 네트워크 레벨에서 변조해 기기의 최종 위치 계산 결과를 바꾸며 기존 방식으로는 불가능하거나 번거로운 루트 접근이나 앱 서명 변경 없이 동작하도록 설계되었다. JavaScript로 이식되어 Shadowrocket Surge Loon Quantumult X Stash 같은 여러 프록시 플랫폼의 모듈로 즉시 배포 가능한 형태를 제공한다.
차별점
- 원본 Go 기반 프로젝트를 JavaScript로 이식해 컴파일이나 개발자 계정 없이 각 프록시에 모듈 형태로 바로 사용할 수 있게 했다.
- Wi Fi BSSID 변경뿐 아니라 필드 22와 24로 표현되는 셀타워 좌표까지 교체해 기지국 기반 위치 산출까지 위조할 수 있다.
- Apple 응답의 여러 포맷을 자동으로 감지해 포맷별로 적절히 변조하여 iOS가 변조된 응답을 정상적으로 수용하도록 호환성 처리를 포함한다.
- motionActivityType와 motionActivityConfidence 값을 함께 조정해 단순 좌표 변경에서 발생할 수 있는 시스템 탐지를 완화하는 추가 처리를 수행한다.
사용 사례
- 테스트 환경에서 특정 위치에서의 앱 동작을 재현해 위치 기반 기능을 점검하거나 자동화 테스트를 수행할 때 위치를 손쉽게 고정해 사용할 수 있다.
- 프라이버시 관점에서 실제 위치를 노출하지 않고 특정 지역에서만 동작하는 서비스의 행위를 검증하거나 디버깅할 때 활용할 수 있다.
- 여러 기기에서 동일한 좌표를 강제하여 위치 의존성 버그를 재현하거나 위치 기반 조건을 회피한 시나리오를 검증할 때 적용할 수 있다.
시작하기
사용자는 먼저 사용하는 프록시 앱에서 HTTPS 복호화 MITM 기능을 활성화하고 저장소가 제공하는 CA 인증서를 설치해 신뢰를 부여해야 한다. 그 다음 대상 플랫폼용 모듈 파일을 해당 앱에 임포트하고 모듈을 활성화한 뒤 VPN 재연결과 위치 서비스 끄기 켜기를 통해 변경된 좌표가 반영되었는지 지도를 열어 확인하면 된다. location picker 기능을 쓰려면 Node 환경에 server.js를 띄우거나 Cloudflare Worker로 배포한 configUrl을 Loon 등에서 참조하도록 설정하면 원격으로 좌표를 관리할 수 있다.
요구사항
- HTTPS 복호화와 MITM을 지원하고 사용자 신뢰형 CA 설치가 가능한 프록시 앱 예 Shadowrocket Surge Loon Quantumult X Stash 중 하나
- location picker를 직접 호스팅하려면 Node.js 런타임과 환경변수 TOKEN 설정이 필요하며 포트를 열 수 있어야 한다
- Cloudflare Worker를 사용하면 별도 VPS 없이 HTTPS 엔드포인트를 제공할 수 있으며 Worker 배포 권한이 필요하다
- iOS에서 CA를 설치하고 신뢰하도록 하는 설정 접근 권한이 필요하며 시스템 정책에 따라 추가 조치가 필요할 수 있다
1.9k
Stars
264
Forks
+207
Trending
0
조회수
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.