Aus diesem Grund können Sie keine Updates für Google Camera and Recorder seitlich laden

Wenn Ihnen beim Seitenladen eines Updates für die Google-Kamera- oder -Rekorder-Apps die Fehlermeldung „Verifizierung fehlgeschlagen“ angezeigt wird, lesen Sie hier, um herauszufinden, warum.

Als Google im Oktober das Pixel 5 auf den Markt brachte, waren wir gespannt, die neuen Apps in die Hände zu bekommen. (Das Telefon selbst ist ziemlich cool, auch.) Mit der Einführung des Pixel 5 kamen neue Versionen von die Google-Kamera Und Google Recorder Apps, die wir mit der Community geteilt haben. Als jedoch viele Benutzer älterer Pixel-Geräte versuchten, die Updates seitlich zu laden, stießen sie auf einen Fehler (siehe oben). Seltsamerweise hatte nicht jeder Probleme mit der Installation der Updates. Einige konnten sie problemlos installieren, während andere die Werkseinstellungen zurücksetzen mussten, um die neuen Versionen installieren zu können. Aufgrund der scheinbar zufälligen Natur dieses Problems haben es viele auf einen Fehler zurückgeführt. Wir sind jetzt ziemlich sicher, dass dieses Problem nicht auf einen Fehler zurückzuführen ist, sondern auf die Verwendung einer neuen API durch Google in Android 11, um Sideloading-Updates zu blockieren.

Wenn Sie versuchen, Google Camera 8.0 oder höher oder Google Recorder 2.0 oder höher auf ein Pixel-Gerät mit Android 11 zu laden, wird eine Fehlermeldung angezeigt, die besagt, dass die Überprüfung nicht erfolgreich sein konnte. Selbst wenn Sie versuchen, das APK mithilfe eines Shell-Befehls von der Seite zu laden, erhalten Sie keinen genaueren Grund für den Installationsfehler. Der Installations-Rückgabecode, den Sie erhalten, lautet „INSTALL_FAILED_VERIFICATION_FAILURE", was Ihnen leider nicht sagt, warum die Verifizierung nicht gelingt. Durch die Untersuchung des Logcat können wir genau erfahren, warum die Überprüfung fehlschlägt:

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]

Dieser Meldung zufolge ist eine Integritätsprüfung der Google-Kamera-Installation fehlgeschlagen, da „INSTALLER_NAME“ nicht mit „com.android.vending“, dem Paketnamen für den Google Play Store, übereinstimmte. (Ich habe versucht, Google Camera 8.0 mit der APKMirror-Installer-App zu installieren, was auch immer es wert ist.) Diese Meldung wurde dem Systemprotokoll hinzugefügt von „AppIntegrityManagerServiceImpl„, das Teil der neuen „App Integrity“-Funktion von Android ist. Gemäß dem Code in AOSP ist App Integrity darauf ausgelegt, zusätzlich zur bestehenden APK-Signaturüberprüfung des Paketmanagers eine zusätzliche Prüfebene bereitzustellen. Die App Integrity API scheint eine Reihe von zu verwenden Regeln um zu entscheiden, ob die Installation zugelassen oder abgelehnt werden soll. Regeln werden von einer System-App – unserer Meinung nach Google Play Services – bereitgestellt und sind es auch in einer Datei gespeichert.

Darüber hinaus App-Integrität ruft auch an eine andere Klasse aufgerufen SourceStampVerifier wenn ein „Quellstempel“ in die Metadaten des Manifests eingebettet ist. Dies ist beispielsweise unserer Meinung nach der „Quellenstempel“ aus dem Manifest der Google Kamera-App:

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

Soweit wir wissen, wird der Quellstempel verwendet, um die Signatur des Paketinstallationsprogramms zu überprüfen. So können Sie AppIntegrity beispielsweise nicht dazu verleiten, die Installation zuzulassen, selbst wenn Sie dies tun hat den Play Store gefälscht als Installateur.

Darüber hinaus konnten wir nicht genau herausfinden, wie Google AppIntegrity und verwandte APIs verwendet, um Sideloading-Updates für die Google-Kamera- und Google-Recorder-Apps zu blockieren. Eine kurze Untersuchung des Google Play Services APK zeigt, dass es diese APIs verwendet, aber der Code ist zu verschleiert, um wirklich alles zu verstehen. Wir haben sogar das Verzeichnis gefunden, in dem die Integritätsregeln gespeichert sind – /data/system/integrity_rules – aber es war von geringem Nutzen, da es nur serialisierte Daten enthält. Wir haben auch keine Möglichkeit gefunden, die Integritätsüberprüfung zu deaktivieren (es scheint nicht so einfach zu sein eine Einstellung ändern), obwohl wir glauben, dass der Grund dafür, dass das Zurücksetzen auf die Werkseinstellungen bei einigen funktioniert, darin liegt, dass die Google Play-Dienste keine Chance haben, ihren Regelsatz zu initialisieren, um die Installation zu blockieren. Die Logcat-Meldung und die Einführung dieser neuen APIs in Android 11 deuten jedoch stark darauf hin, dass dies alles beabsichtigt und kein Fehler ist.

Google hat die Verwendung dieser APIs nicht öffentlich kommentiert (wir erwarten dies auch nicht) und hat auch nicht geantwortet, als wir um einen Kommentar gebeten wurden. Wir haben jedoch einige Theorien, warum sie seitlich geladene Updates blockieren. Erstens könnten sie Menschen davor schützen, die falsche Version der App für ihr Gerät zu installieren. Google stellt bestimmte Versionen seiner Apps für bestimmte Pixel-Geräte bereit. Beispielsweise sind mehrere Versionen der Device Personalization Services-App online zu finden. Obwohl sie alle auf Pixel-Geräten installierbar sind, war dies zu einem bestimmten Zeitpunkt möglich die Funktion „Live-Untertitel“ verlieren auf dem Pixel 4, indem Sie eine Version herunterladen, die für ein älteres Pixel-Gerät erstellt wurde. Ein weiterer Grund könnte darin bestehen, „die Rückverfolgbarkeit von Apps im Hinblick auf eine unbefugte Verbreitung zu verbessern“, wie Google in der Klasse SourceStampVerifier erläutert.

Bisher verwenden nur wenige Apps von Google das App-Bundle-Format (wie Google Camera und Google Recorder). Blockieren von Nicht-Play Store-Installationen, aber wir wissen nicht, ob das Unternehmen dieses Verhalten auf seine anderen Apps ausweiten wird sobald sie alle auf das AAB-Format umgestellt haben. Wir haben auch darüber nachgedacht, ob die Umstellung auf App-Bundles die Implementierung von App Integrity erforderlich macht, aber wir haben festgestellt, dass Google dies bereits getan hat hat eine Lösung zu handhaben, wenn Benutzer versuchen, eine App zu installieren, die nicht über alle erforderlichen Aufteilungen verfügt. Was auch immer der Fall sein mag, wir glauben nicht, dass Google beabsichtigt, jegliches Seitenladen seiner Apps zu blockieren, obwohl diese Tools dies durchaus ermöglichen.

Vielen Dank an die Entwickler vvb2060, aviraxp und Quinny899 für ihre Unterstützung in diesem Artikel und tVielen Dank an PNF Software für die Bereitstellung einer Nutzungslizenz JEB-Decompiler, ein professionelles Reverse-Engineering-Tool für Android-Anwendungen.