Play Integrity Attestation Bypass (SafetyNet Replacement)
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
What Play Integrity Does
Play Integrity는 앱 attestation을 위한 Google의 SafetyNet 후속입니다. 앱이 API를 호출하면 Google Play Services가 소프트웨어/하드웨어 신호를 수집해 googleapis.com으로 암호화 전송하고, Google은 JWT를 서명하고 암호화된 형태로 반환합니다. 앱은 토큰을 백엔드로 전달하고, 백엔드는 Google의 공개키로 서명을 검증하고 페이로드를 복호화한 뒤 다음 verdict 필드에 따라 정책을 적용합니다:
appIntegrity: APK 빌드/서명 일치(재패키지/변조 없음).deviceIntegrity: 정품 & 인증된 디바이스, 잠긴 bootloader, 루트/시스템 변조 없음.accountDetails: Google Play를 통한 설치.
일반적으로 강제되는 주요 verdict 플래그:
MEETS_BASIC_INTEGRITY: 토큰이 정품 Play Services(에뮬레이터/변조된 전송 아님)에서 생성됨.MEETS_DEVICE_INTEGRITY: 정품/인증된 디바이스, bootloader 잠김, 루트/시스템 변조 없음.MEETS_STRONG_INTEGRITY:DEVICE에 더해 모든 파티션(OS + vendor)에 대한 최신 보안 패치가 필요함.
Bypass Model
Google의 JWT를 위조하는 대신, Google이 평가하는 신호를 스푸핑하여 다른 합법적인 디바이스 프로파일과 일치시키는 방식입니다. 공격 체인은 다음과 같습니다:
- 로컬 검사와 Play Services 프로브가 Magisk/su를 발견하지 못하도록 루트 숨기기.
- Play Integrity가 인증된/잠긴 디바이스로 인식하도록 key attestation certificate chain(
keybox.xml)을 정품 디바이스의 것으로 교체. MEETS_STRONG_INTEGRITY를 만족시키기 위해 security patch level 스푸핑.
Google은 남용된 keybox를 **폐기(revoke)**함으로써 완화합니다; 차단된 경우 keybox 교체가 필요합니다.
Prerequisites & Tooling
- Root hiding: ReZygisk (or ZygiskNext). Zygisk 비활성화, Magisk Hide 활성화, 모듈 설치, 재부팅.
- Key attestation spoofing: TrickyStore + Tricky Addon (Magisk 모듈).
- UI helper: KSU Web UI로 TrickyStore 제어.
- Validation: Play Integrity API Checker 및 Key Attestation APKs.
- 선택적 attestation key 자료 배경: https://tryigit.dev/android-keybox-attestation-analysis
Achieve MEETS_BASIC_INTEGRITY + MEETS_DEVICE_INTEGRITY
- Install modules & reboot: Magisk에 TrickyStore와 Tricky Addon을 플래시하고 재부팅.
- Configure TrickyStore (via KSU Web UI):
TrickyStore→Select All→Deselect Unnecessary→ Save 선택. - Inject a valid keybox:
Keybox에서 Valid를 선택해 새로운keybox.xml(vendor attestation credentials)을 다운로드/적용. 이 파일은 하드웨어 키 attestation을 지탱하며, 이제 인증된/잠긴 디바이스에서 가져온 것으로 스푸핑됩니다. - Verify: Play Integrity API Checker 실행 →
MEETS_BASIC_INTEGRITY및MEETS_DEVICE_INTEGRITY가 통과해야 함. Key Attestation에서는 attestation 체인이 교체되어 bootloader가 locked로 표시됩니다.
Achieve MEETS_STRONG_INTEGRITY (Patch-Level Spoof)
STRONG은 오래된 패치 레벨에서 실패합니다. TrickyStore는 모든 파티션에 대해 최신 보안 패치 날짜를 스푸핑할 수 있습니다:
- TrickyStore에서 Set Security Patch → Get Security Patch Date → Save 선택.
- Play Integrity API Checker를 다시 실행;
MEETS_STRONG_INTEGRITY가 통과해야 합니다.
Operational Notes
- Revocation risk: 동일한
keybox.xml로 API를 반복 호출하면 플래그되어 차단될 수 있습니다. 차단되면 새로운 유효 keybox로 교체하세요. - Arms race: 공개 공유된 keybox는 빠르게 소모됩니다; 개인 사본을 유지하고 커뮤니티 모듈 업데이트(XDA/Telegram/GitHub)를 추적하세요.
- Scope: 이 우회는 attestation 입력만 스푸핑합니다; JWT 자체는 정품이기 때문에 Google의 백엔드 서명 검증은 여전히 성공합니다.
References
- Play Integrity API: How It Works & How to Bypass It
- ReZygisk
- TrickyStore
- Tricky Addon
- KSU Web UI
- Play Integrity API Checker
- Key Attestation
- Android keybox attestation analysis
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.


