Lūk, kāpēc nevarat ielādēt Google kameras un ierakstītāja atjauninājumus

click fraud protection

Ja, ielādējot lietotnes Google kamera vai ierakstītājs atjauninājumu, esat redzējis kļūdu “Neizdevās verifikācija”, izlasiet šo, lai uzzinātu iemeslu.

Kad Google oktobrī laida klajā Pixel 5, mēs ar prieku sākām iepazīties ar tā jaunajām lietotnēm. (Pats tālrunis ir diezgan foršiarī .) Līdz ar Pixel 5 palaišanu parādījās jaunas versijas Google kamera un Google ierakstītājs lietotnes, kuras kopīgojām ar kopienu. Tomēr, kad daudzi vecāku Pixel ierīču lietotāji mēģināja ielādēt atjauninājumus, viņiem radās kļūda (parādīts iepriekš). Dīvaini, bet ne visiem bija problēmas ar atjauninājumu instalēšanu. Daži varēja tos instalēt lieliski, savukārt citiem bija jāatjauno rūpnīcas iestatījumi, lai viņi varētu instalēt jaunās versijas. Tā kā šī problēma ir šķietami nejauša, daudzi to uzskatīja par kļūdu. Tagad esam diezgan pārliecināti, ka šī problēma nav radusies kļūdas dēļ, bet gan Google izmantotā jauna API operētājsistēmā Android 11, lai bloķētu atjauninājumu sānu ielādi.

Ja mēģināt sānielādēt Google kameras 8.0 vai jaunāku versiju vai Google Recorder 2.0 vai jaunāku versiju Pixel ierīcē, kurā darbojas operētājsistēma Android 11, tiks parādīts kļūdas ziņojums, kurā teikts, ka verifikācija nevarēja būt veiksmīga. Pat ja mēģināt ielādēt APK, izmantojot čaulas komandu, jūs nesaņemsit precīzāku instalēšanas kļūmes iemeslu. Instalācijas atgriešanas kods, kas jums tiks piešķirts, ir "

INSTALL_FAILED_VERIFICATION_FAILURE", kas diemžēl nenorāda, kāpēc pārbaude neizdodas. Pārbaudot logcat, mēs varam precīzi uzzināt, kāpēc verifikācija neizdodas:

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]

Saskaņā ar šo ziņojumu Google kameras instalācijas integritātes pārbaude neizdevās, jo INSTALLER_NAME neatbilda Google Play veikala pakotnes nosaukumam "com.android.vending". (Es mēģināju instalēt Google Camera 8.0, izmantojot lietotni APKMirror Installer, cik tas ir vērts.) Šo ziņojumu sistēmas žurnālam pievienoja "AppIntegrityManagerServiceImpl", kas ir daļa no Android jaunās funkcijas App Integrity. Saskaņā ar AOSP kodu, lietotņu integritāte ir izstrādāta, lai nodrošinātu papildu pārbaužu slāni papildus pakotņu pārvaldnieka esošajai APK paraksta verifikācijai. Šķiet, ka App Integrity API izmanto kopu Noteikumi lai izlemtu, atļaut vai liegt instalēšanu. Noteikumus nodrošina sistēmas lietotne, kas, mūsuprāt, ir Google Play pakalpojumi, un tā arī ir saglabāts failā.

Turklāt lietotņu integritāte arī zvani zvanīja cita klase SourceStampVerifier ja manifesta metadatos ir iegults "avota zīmogs". Piemēram, šeit, mūsuprāt, ir “avota zīmogs” no lietotnes Google kamera manifesta.

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

No tā, ko mēs varam pateikt, avota zīmogs tiek izmantots, lai pārbaudītu pakotnes instalētāja parakstu. Tā, piemēram, jūs nevarat apmānīt AppIntegrity, atļaujot instalēšanu, pat ja jūs izkrāpa Play veikalu kā uzstādītājs.

Turklāt mēs nevarējām precīzi noskaidrot, kā Google izmanto AppIntegrity un saistītās API, lai bloķētu lietotņu Google kameras un Google ierakstītāja atjauninājumu sānu ielādi. Ātri pārbaudot Google Play pakalpojumu APK, atklājas, ka tas izmanto šīs API, taču kods ir pārāk neskaidrs, lai visam būtu jēga. Mēs pat atradām direktoriju, kurā tiek glabāti integritātes noteikumi — /data/system/integrity_rules —, taču tas bija maz noderīgs, jo satur tikai serializētus datus. Mēs arī neesam atraduši veidu, kā atspējot integritātes verifikāciju (šķiet, ka tas nav tik vienkārši mainot iestatījumu), lai gan mēs uzskatām, ka rūpnīcas iestatījumu atiestatīšana dažiem darbojas tāpēc, ka Google Play pakalpojumiem nav iespējas inicializēt savu kārtulu kopu, lai bloķētu instalēšanu. Logcat ziņojums un šo jauno API ieviešana operētājsistēmā Android 11 stingri norāda, ka tas viss ir izstrādāts, nevis kļūda.

Google nav publiski komentējis šo API izmantošanu (ne arī mēs to negaidām), un viņi nereaģēja, kad tika saņemti komentāri. Tomēr mums ir dažas teorijas, kāpēc tie bloķē sānu ielādes atjauninājumus. Pirmkārt, tie varētu aizsargāt cilvēkus no nepareizas lietotnes versijas instalēšanas savai ierīcei. Google piegādā noteiktas savu lietotņu versijas noteiktām Pixel ierīcēm. Piemēram, vairākas programmas Device Personalization Services versijas var atrast tiešsaistē. Lai gan tie visi ir instalējami Pixel ierīcēs, vienā brīdī tas bija iespējams pazaudēt subtitru reāllaikā funkciju Pixel 4, lejupielādējot versiju, kas izstrādāta vecākai Pixel ierīcei. Vēl viens iemesls varētu būt “lietotņu izsekojamības uzlabošana attiecībā uz nesankcionētu izplatīšanu”, kā Google skaidroja SourceStampVerifier klasē.

Pagaidām tikai dažas Google lietotnes, kas izmanto lietotņu komplekta formātu (piemēram, Google kamera un Google ierakstītājs), ir bloķēt instalācijas, kas nav Play veikala instalācijas, taču mēs nezinām, vai uzņēmums paplašinās šo darbību uz citām savām lietotnēm kad tie visi pārslēgsies uz AAB formātu. Mēs arī apsvērām, vai, pārejot uz lietotņu komplektiem, bija jāievieš lietotņu integritāte, taču mēs atklājām, ka Google jau ir ir risinājums rīkoties, kad lietotāji mēģina instalēt lietotni, kurai nav visu nepieciešamo sadalījumu. Neatkarīgi no gadījuma, mēs nedomājam, ka Google plāno bloķēt visu savu lietotņu sānu ielādi, lai gan šie rīki noteikti ļauj to darīt.

Paldies izstrādātājiem vvb2060, aviraxp un Quinny899 par palīdzību šajā rakstā, un tpaldies PNF programmatūrai par lietošanas licenci JEB dekompilators, profesionāla līmeņa reversās inženierijas rīks Android lietojumprogrammām.