Provjera potpisa aplikacije: kako radi, kako je onemogućiti s Xposedom i zašto ne biste trebali

Možete jednostavno onemogućiti provjeru potpisa Android aplikacije (APK) koristeći Xposed Framework, ali to ne biste trebali činiti u velikoj većini slučajeva.

Ako ste ikada pokušali modificirati i ponovno instalirati aplikaciju sustava, vjerojatno ste se susreli s provjerama potpisa aplikacije u ovom ili onom obliku. Ili ste uklonili izvornu aplikaciju prije nastavka ili ste modificiranom APK-u dali drugi naziv paketa kako biste ga instalirali bez prethodnog uklanjanja stare aplikacije. I u oba slučaja, također ste morali sami ponovno potpisati aplikaciju kako biste je uopće instalirali.

Sva ova ponašanja možete zaobići privremenim onemogućavanjem provjere potpisa aplikacije. Ali prije nego što uđemo u metaforički meso i krumpir ovog članka i kažemo vam kako to učiniti, važno je da malo razgovaramo o provjerama potpisa aplikacija, što rade i zašto baš vi trebao bi nikada uklonite ih u velikoj većini slučajeva.

Osnove verifikacije potpisa za Android

Prema zadanim postavkama, OS Android zahtijeva

svi aplikacije koje treba potpisati kako bi se instalirale. U vrlo osnovnim terminima, to znači da se potpis aplikacije koristi za identifikaciju autora aplikacije (tj. provjeriti njegovu legitimnost), kao i uspostaviti odnose povjerenja između aplikacija s istim potpisom. S prvim ste sigurni (u razumnoj mjeri) da aplikacija s valjanim potpisom dolazi od očekivanih programera. A putem potonjeg, aplikacije potpisane istim privatnim ključem mogu se izvoditi u istom procesu i dijeliti privatne podatke. Zatim kada instalirate ažuriranje aplikacije, OS Android provjerava ovaj potpis kako bi se uvjerio da: A) APK nije neovlašteno mijenjan u vremenu otkako je potpisan, i B) certifikat aplikacije odgovara onom trenutno instaliranog verzija.

Dakle, kako sve ovo utječe na mene u stvarnom svijetu? Jednostavno je, stvarno. Ako nabavite APK izvan trgovine Google Play i pokušate ga instalirati kao ažuriranje vaše trenutno instalirane aplikacije (pročitajte: isti naziv paketa), OS će pokušati provjeriti valjanost certifikata aplikacije kako bi se uvjerio da dolazi s istim inicijalom programeri. Ako se certifikat podudara, instalacija aplikacije nastavit će se prema planu, vaša će aplikacija zadržati svoje postojeće podatke i sve je u redu. Ako potpis nije valjan (što ukazuje da je APK neovlašteno mijenjan) ili ako certifikat ne odgovara onom izvorne aplikacije, instalacija neće uspjeti. Kao što je ranije rečeno, aplikacijski certifikat će odgovarati samo ako je potpisan istim privatnim ključem koji je korišten za potpisivanje prethodne verzije. Drugim riječima, aplikaciju možete instalirati samo ako ima važeći potpis koji odgovara APK-u sadržaja, a ažuriranje možete instalirati samo ako njegov certifikat također odgovara onom koji se nalazi u ranijoj verziji od aplikacije.

[Kao šaljivu stranu u ovom inače gustom članku, postoji jedan vrlo javan primjer u kojem je privatni ključ za potpisivanje aplikacije izgubljen ili ugrožen. Naravno, mislim na Googleovu aplikaciju Authenticator, koja je primila ažuriranje koje je promijenilo naziv paketa iz com.google.android.apps.authenticator do com.google.android.apps.authenticator2 u ažuriranju prije otprilike dvije godine. Zbog ove promjene sva naknadna ažuriranja aplikacije Autentifikator mogla su se izdati samo pod novim nazivom paketa - s novim potpisom koji je generirao novi privatni ključ za potpisivanje.]

Zašto biste mogli (privremeno) onemogućiti provjeru potpisa

Sada, pogledajmo mogući scenarij u kojem bismo mogli privremeno onemogućiti provjeru potpisa aplikacije. Kao što je spomenuto na početku ovog članka, provjera potpisa može predstavljati malu glavobolju kada se mijenjaju postojeće aplikacije sustava. Ako instalirate modificiranu verziju aplikacije sustava, nećete moći potpisati aplikaciju važećim i odgovarajućim certifikatom. U ovakvim slučajevima obično biste prvo željeli ukloniti postojeću aplikaciju, a zatim instalirati izmijenjenu verziju kao i obično. Također možete onemogućiti provjeru potpisa, ali bolje je (i sigurnije) ostaviti provjeru potpisa uključenom i jednostavno ukloniti staru verziju kako bi se nova mogla instalirati. To, međutim, može postati problem ako aplikacija koju pokušavate zamijeniti ima podatke koje ne biste radije izgubili. Svakako postoje načini da ručno sačuvate podatke pomoću root pristupa i presadite ih na novu verziju aplikaciju, ali korisnici također mogu htjeti jednostavno onemogućiti provjeru potpisa privremeno i zatim nastaviti s provjerama poslije. Alternativno, kako je istaknuo stariji član XDA mcbyte_it u komentarima, ovo također može biti korisno u razvoju aplikacija.

Kako to učiniti

Do sada je onemogućavanje provjere potpisa bilo užasno rješenje za gotovo svaki problem. To je zato što pritom zapravo odbacujete ugrađenu zaštitu Androida koja osigurava da vaše aplikacije nisu mijenjane i da njihova ažuriranja dolaze iz originala programeri. Ali sada, zahvaljujući magiji Xposed Frameworka, možete privremeno onemogućiti provjeru potpisa i ponovno je omogućiti nakon što završite s instalacijom svoje modificirane aplikacije. Jedan takav Xposed modul koji može učiniti upravo to nedavno je objavio XDA Senior Member pyler, i radi prema planu za sve uređaje koji mogu pokretati Xposed. Na ovaj način, kada želite instalirati modificirano ažuriranje aplikacije koje nije ispravno potpisano, možete jednostavno omogućite modul, ponovno pokrenite sustav, instalirajte modificirano ažuriranje aplikacije, onemogućite modul, ponovno pokrenite sustav i veselite se put.

Sada kada znate kako privremeno onemogućiti provjeru potpisa, važno je ponoviti koliko je važno znači ostaviti provjeru potpisa uključenom cijelo vrijeme, osim ako nemate vrlo, vrlo dobar razlog da onemogućite to. Kao takav, trebali biste doista koristiti samo takav alat kako biste primijenili ažuriranja aplikacije koja sami izradite i kada postoje olakotne okolnosti koje zahtijevaju da to učinite umjesto da prvo jednostavno deinstalirate staru aplikaciju.

Budite sigurni i koristite ovo razumno.