Google 카메라 및 녹음기 업데이트를 사이드로드할 수 없는 이유는 다음과 같습니다.

Google 카메라 또는 녹음기 앱 업데이트를 사이드로드할 때 '확인 실패' 오류가 표시되는 경우 이 글을 읽고 이유를 알아보세요.

Google이 10월에 Pixel 5를 출시했을 때 우리는 새로운 앱을 접하게 되어 기뻤습니다. (전화 자체 꽤 멋지다, 역시 마찬가지입니다.) Pixel 5가 출시되면서 새로운 버전의 구글 카메라 그리고 구글 녹음기 커뮤니티와 공유한 앱입니다. 그러나 이전 Pixel 장치를 사용하는 많은 사용자가 업데이트를 사이드로드하려고 하면 오류가 발생했습니다(위에 표시됨). 이상하게도 모든 사람이 업데이트 설치에 문제를 겪은 것은 아닙니다. 일부는 문제없이 설치할 수 있었지만 다른 일부는 새 버전을 설치하기 위해 공장 초기화를 해야 했습니다. 이 문제는 무작위로 보이는 특성 때문에 많은 사람들이 이 문제를 버그라고 생각합니다. 이제 우리는 이 문제가 버그로 인한 것이 아니라 Google이 사이드로딩 업데이트를 차단하기 위해 Android 11의 새로운 API를 사용했기 때문에 발생했다고 확신합니다.

Android 11을 실행하는 Pixel 기기에서 Google Camera 8.0 이상 또는 Google Recorder 2.0 이상을 사이드로드하려고 하면 확인에 실패했다는 오류 메시지가 표시됩니다. 셸 명령을 사용하여 APK를 사이드로드하려고 해도 설치 실패에 대한 더 구체적인 이유를 알 수 없습니다. 귀하에게 제공되는 설치 반환 코드는 "입니다.설치_FAILED_VERIFICATION_FAILURE", 불행히도 확인이 성공하지 못한 이유를 알려주지 않습니다. logcat을 조사하면 검증이 실패한 이유를 정확히 알 수 있습니다.

AppIntegrityManagerServiceImpl: Integritycheckofcom.google.android.GoogleCameraresult: DENYdueto[Rule: (PACKAGE_NAME EQ com.google.android.GoogleCamera) AND (VERSION_CODE GTE 32045130) AND (APP_CERTIFICATE EQ F0FD6C5B410F25CB25C3B53346C8972FAE30F8EE7411DF910480AD6B2D60DB83) AND NOT (INSTALLER_NAME EQ com.android.vending), DENY]

이 메시지에 따르면 'INSTALLER_NAME'이 Google Play 스토어의 패키지 이름인 'com.android.vending'과 일치하지 않아 Google 카메라 설치의 무결성 검사에 실패했습니다. (저는 APKMirror Installer 앱을 사용하여 Google Camera 8.0을 설치하려고 시도했는데 그만한 가치가 있었습니다.) 이 메시지는 "AppIntegrityManagerServiceImpl"는 Android의 새로운 "앱 무결성" 기능의 일부입니다. AOSP의 코드에 따르면 App Integrity는 패키지 관리자의 기존 APK 서명 확인 위에 추가 검사 계층을 제공하도록 설계되었습니다. App Integrity API는 다음과 같은 세트를 사용하는 것 같습니다. 규칙 설치를 허용할지 거부할지 결정합니다. 규칙은 Google Play 서비스라고 생각되는 시스템 앱에서 제공되며 다음과 같습니다. 파일에 저장됨.

또한 앱 무결성 전화도 한다 또 다른 클래스는 SourceStampVerifier 매니페스트의 메타데이터에 "소스 스탬프"가 포함된 경우. 예를 들어 Google 카메라 앱 매니페스트의 '소스 스탬프'라고 생각되는 내용은 다음과 같습니다.

<meta-dataandroid: name="com.android.stamp.source"android: value="https://play.google.com/store"/>

우리가 알 수 있듯이 소스 스탬프는 패키지 설치 프로그램의 서명을 확인하는 데 사용됩니다. 예를 들어 AppIntegrity를 ​​속여 설치를 허용하도록 할 수는 없습니다. Play 스토어를 스푸핑했습니다. 설치자로.

이 외에도 Google이 AppIntegrity 및 관련 API를 사용하여 Google 카메라 및 Google 녹음기 앱에 대한 업데이트 사이드로드를 차단하는 방법을 정확히 확인할 수 없었습니다. Google Play 서비스 APK를 빠르게 살펴보면 이러한 API를 사용하고 있음을 알 수 있지만 코드가 너무 난독화되어 모든 것을 실제로 이해할 수 없습니다. 무결성 규칙이 저장된 디렉토리(/data/system/integrity_rules)도 찾았지만 직렬화된 데이터만 포함되어 있기 때문에 거의 쓸모가 없었습니다. 또한 무결성 확인을 비활성화하는 방법도 찾지 못했습니다. 설정 변경), 공장 초기화가 작동하는 이유는 Google Play 서비스가 설치를 차단하기 위해 규칙 세트를 초기화할 기회를 얻지 못하기 때문이라고 생각합니다. 하지만 Android 11의 logcat 메시지와 이러한 새로운 API의 도입은 이것이 모두 설계에 따른 것이며 버그가 아님을 강력하게 시사합니다.

Google은 이러한 API 사용에 대해 공개적으로 언급하지 않았으며(또한 그럴 것이라고 기대하지도 않음) 의견을 요청했을 때 응답하지 않았습니다. 하지만 사이드로드된 업데이트를 차단하는 몇 가지 이론이 있습니다. 첫째, 사람들이 자신의 기기에 잘못된 버전의 앱을 설치하지 못하도록 보호할 수 있습니다. Google은 특정 버전의 앱을 특정 Pixel 기기에 제공합니다. 예를 들어, Device Personalization Services 앱의 여러 버전을 온라인에서 찾을 수 있습니다. 모두 Pixel 기기에 설치할 수 있지만 어느 시점에서는 다음이 가능했습니다. 라이브 캡션 기능을 잃습니다 이전 Pixel 기기용으로 제작된 버전을 다운로드하여 Pixel 4에서 사용할 수 있습니다. 또 다른 이유는 SourceStampVerifier 클래스에서 Google이 설명한 대로 "무단 배포와 관련하여 앱의 추적 가능성을 향상"하는 것일 수 있습니다.

지금까지 App Bundle 형식을 사용하는 Google 앱(Google 카메라, Google 녹음기 등) 중 소수만이 Play Store 이외의 설치를 차단하지만 회사가 이 동작을 다른 앱으로 확장할지 여부는 알 수 없습니다. 모두 AAB 형식으로 전환하면. 또한 App Bundle로 전환하려면 App Integrity를 ​​구현해야 하는지도 고려했지만 Google에서는 이미 해결책이 있다 사용자가 필요한 분할이 모두 포함되지 않은 앱을 설치하려고 할 때를 처리합니다. 어떤 경우이든 Google이 자사 앱의 모든 사이드로드를 차단할 의도는 없다고 생각합니다. 하지만 이러한 도구를 사용하면 확실히 차단할 수 있습니다.

이 기사에 도움을 준 개발자 vvb2060, avirasp 및 Quinny899에게 감사드립니다.사용할 수 있는 라이센스를 제공해 주신 PNF Software에 감사드립니다. JEB 디컴파일러, Android 애플리케이션을 위한 전문가 수준의 리버스 엔지니어링 도구입니다.