Objavljujemo aplikacije na Google Play i zarađujemo milione. Kako koristiti funkciju potpisivanja aplikacije na Google Playu Kako potpisati apk originalnim potpisom

Dakle, radili ste mnogo dana (a možda čak i noći), a sada je vaša prva hibridna mobilna aplikacija spremna. Prilično je stabilan, većina kritičnih grešaka je zatvorena. Ostale su male, ali sjetivši se da je perfekcionizam zlo, donosite čvrstu odluku da objavite aplikaciju.

Preduslov za to je prisustvo potpisanog APK fajla. Naučit ćete kako potpisati apk datoteku u ovom članku.

Malo povlačenje

Kada se moj projekat za kućne ljubimce bližio izdavanju, počeo sam tražiti informacije o tome kako brzo i bezbolno objaviti aplikaciju. Mnoga pronađena uputstva izgledala su jednostavno. Odabrao sam upute autora Ionic framework-a na kojem je aplikacija razvijena. Nije sve ispalo iz prvog puta, postoji nekoliko posebnosti. Proces potpisivanja je opisan u ovom članku, s istaknutim važnim točkama.

Početni podaci

Pretpostavljam da imate sve pripremljeno za razvoj hibrida. mobilne aplikacije koristeći Apache Cordova. Mora biti instalirano:
  • Apache Cordova
  • Java Development Kit
  • Android SDK Alati
Naziv projekta i aplikacije je lcf. Zamijenite imenom svog projekta gdje je to potrebno.

Idi

Prvo morate kreirati verziju izdanja vaše aplikacije. Ali prije toga, provjerimo jesu li svi nepotrebni dodaci uklonjeni. Na primjer, ne treba nam dodatak koji šalje informacije o otklanjanju grešaka na konzolu. Izbrišemo ga:

$ cordova dodatak rm cordova-plugin-console
Da biste generisali verziju izdanja za Android, koristite naredbu graditi sa zastavom --pustiti:

$ cordova build --release android
Ova komanda će kreirati nepotpisan APK fajl u direktorijumu:

Platforme/android/build/outputs/apk
Na primjer, platforms/android/build/outputs/apk/ android-release-unsigned.apk. Zatim ćemo morati potpisati ovu datoteku i pokrenuti uslužni program zipalign optimizirati i pripremiti datoteku za Google Play.

Za potpisivanje fajla potreban vam je certifikat. Kreirajmo ga pomoću uslužnog programa keytool koji je uključen u JDK:

$ keytool -genkey -v -keystore lcf.keystore -alias lcf -keyalg RSA -keysize 2048 -važenje 10000
Bitan

Vrijednost parametra -alias mora se zapamtiti, ili još bolje zapisati. U gornjem primjeru, jednak je lcf (zasnovan na prvim slovima naziva aplikacije Loyal Client Free). Ovdje neću iznositi detalje, ako ste zainteresovani pišite u komentarima, reći ću vam detaljnije.

Alias ​​se koristi svaki put kada potpišete * aplikacije. Da biste ga lakše zapamtili, koristite ime datoteke skladišta ključeva kao pseudonim, na primjer:


-keystore hello-world.keystore -alias hello-world -keystore weather-app.keystore -alias weather-app -keystore todo.keystore -alias todo
* Morate potpisati aplikaciju svaki put kada se objave ažuriranja

Utility keytool postavlja niz pitanja. Biće ih ukupno 8. Da biste imali predstavu o pitanjima i približnim odgovorima unapred, svi su dati ispod, ispod spojlera.

Keytool pitanja i uzorci odgovora na njih

1. Unesite lozinku za skladište ključeva:
Ovdje morate unijeti lozinku za datoteku (najmanje 6 znakova). Unesena lozinka mora biti zapisana na sigurnom mjestu, potrebna je svaki put kada potpisujete aplikaciju.

2. Ponovo unesite novu lozinku:
Ponovo unesite svoju lozinku.

3. Koje je vaše ime i prezime?
: Ivan Petrov
Vaše ime i prezime. Vrijednost in uglaste zagrade je zadana vrijednost.

4. Kako se zove vaša organizaciona jedinica?
: IT
Naziv odjela vaše kompanije. Možete ga ostaviti praznim, označavam IT.

5. Kako se zove vaša organizacija?
: 2developers
Naziv vaše organizacije. Molimo navedite ako ih ima.

6. Kako se zove vaš grad ili lokalitet?
: Moskva
Ime grada

7. Kako se zove vaša država ili pokrajina?
: M.O.
Naziv područja

8. Koji je dvoslovni kod zemlje za ovu jedinicu?
: RU
Kod zemlje. Označavam RU.

: y

Potvrdite da li je sve ispravno ili pritisnite Enter da ponovo uđete.


Na kraju će se pojaviti poruka koja označava uspješno generiranje ključa. Od vas će biti zatraženo da postavite lozinku za privatni ključ (ako želite da ostane ista kao za certifikat, pritisnite Enter):

Generisanje 2 048-bitnog RSA para ključeva i samopotpisanog sertifikata (SHA256withRSA) sa rokom važenja od 10 000 dana za: CN=Ivan Petrov, OU=IT, O=2programeri, L=Moskva, ST=MO, C=RU Unesite ključ lozinka za (VRATI ako je isto kao lozinka za skladište ključeva):
Datoteka će biti kreirana u trenutnom direktoriju lcf.keystore.

Bitan

Kreirana datoteka mora biti sačuvana na sigurnom mjestu. Ako koristite privatno spremište, datoteka se može urezati zajedno sa izvornim kodom aplikacije. Općenito, bolje je pohraniti certifikate odvojeno. Ako izgubite certifikat, nećete moći izdavati ažuriranja aplikacije.

Preostala su dva koraka i imat ćete APK fajl spreman za distribuciju. Pređimo na potpisivanje.

Da potpišete svoju apk datoteku, koristite uslužni program jarsigner, koji je takođe uključen u JDK.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
Naziv certifikata je naznačen nakon parametra -keystore, alias - nakon naziva datoteke.

Konačno, da bismo optimizirali apk datoteku, koristit ćemo uslužni program zipalign:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
Posljednji parametar je naziv fajla koji ćete postaviti na Google Play.

Bitan.

Utility zipalign dio je Android SDK alata i može se naći ovdje:

/path/to/Android/sdk/build-tools/VERSION/zipalign

Zaključak

Sada imate apk fajl spreman za distribuciju koji se može prenijeti na Google Play. Ispunite opis, odredite ocjenu svoje aplikacije i slobodno kliknite na “Objavi”.

Sa Google Play funkcijom za potpisivanje aplikacija, Google može upravljati ključem za potpisivanje vaše aplikacije, kao i zaštititi taj ključ i koristiti ga za potpisivanje vaših APK-ova za distribuciju. Ova metoda skladištenja će vas zaštititi u slučaju gubitka ili hakiranja ključa.

Bitan! Da biste koristili Android App Bundle (preporučeni format za objavljivanje aplikacija), morate se prijaviti u Google Play program za potpisivanje aplikacija prije nego što otpremite App Bundle na Play konzolu.

Registracija je otvorena za vlasnike naloga i korisnike sa dozvolama za globalno upravljanje proizvodnjom koji su prihvatili Uslove korišćenja usluge. Možete registrovati samo jednu aplikaciju u isto vrijeme s Google Play programom za potpisivanje aplikacija.

Principi rada

Kada koristite Google Play funkciju za potpisivanje aplikacija, vaši ključevi se pohranjuju u istoj infrastrukturi koja pohranjuje Googleove ključeve i zaštićeni su namenskom uslugom za upravljanje ključevima. Detaljne informacije Google-ova tehnička infrastruktura se može naći u dokumentaciji Google Cloud Security.

Android aplikacije su potpisane privatnim ključem. Svaki takav ključ povezan je s javnim certifikatom, pomoću kojeg uređaji i servisi mogu provjeriti sigurnost aplikacija i njihovih ažuriranja. Na uređajima se instaliraju samo ona ažuriranja čiji potpis odgovara potpisu instaliranu aplikaciju. Dopuštanje Googleu da upravlja vašim ključem za potpisivanje aplikacije učinit će proces sigurnijim.

Bilješka. Upotreba Google Play funkcije za potpisivanje aplikacija nije obavezna. Možete preuzeti APK-ove i upravljati vlastitim ključevima bez korištenja App Bundle-a. Međutim, ako izgubite pristup skladištu ključeva ili je kompromitovano, nećete moći ažurirati svoju aplikaciju i morat ćete je ponovo objaviti s drugim imenom paketa.

Opisi ključeva, predmeta i alata
Uslovi Opis
Ključ za potpisivanje aplikacije

Ključ koji koristi Google Play za potpisivanje APK fajlova koji se isporučuju na uređaj korisnika. Kada se prijavite za program za potpisivanje aplikacija Google Play, možete prenijeti postojeći ključ za potpisivanje ili dopustiti da Google generiše novi.

Preuzmi ključ

Postoje dva načina za generiranje ključa za preuzimanje:

  • Koristite ključ za potpisivanje aplikacije. Ako ste dozvolili Googleu da generiše ključ za potpisivanje aplikacije kada ste se prijavili za program, ključ za otpremanje će biti ključ koji ste koristili za potpisivanje prvog izdanja aplikacije.
  • Koristite poseban ključ za preuzimanje. Ako ste dali vlastiti ključ za potpisivanje aplikacije prilikom registracije za program, možete generirati novi ključ za preuzimanje radi sigurnosti. Ako to ne želite učiniti, koristite ključ za potpisivanje aplikacije kao ključ za preuzimanje za potpisivanje novih izdanja.
Certifikat (.der ili .pem)

Certifikat koji sadrži javni ključ i Dodatne informacije o njegovom vlasniku. Certifikat javnog ključa omogućava svakome da zna ko je potpisao App Bundle ili APK datoteku. Ovaj certifikat se može dijeliti jer ne uključuje privatni ključ.

Da biste registrirali svoje ključeve kod dobavljača API-ja, možete preuzeti javni certifikat za ključ za potpisivanje aplikacije Potpisivanje aplikacija u Play konzoli. Certifikat javnog ključa može se dijeliti sa svima jer ne uključuje privatni ključ.

Digitalni otisak sertifikata

Kratak i jedinstven identifikator za certifikat. Otisak prsta zajedno sa nazivom paketa često traže API provajderi da bi omogućili pristup svojim uslugama.

Digitalni otisci MD5, SHA-1 i SHA-256 certifikata za preuzimanje i potpis aplikacije mogu se pronaći na stranici Potpisivanje aplikacija u Play konzoli. Možete dobiti i drugu vrstu digitalnog otiska prsta. Da biste to učinili, preuzmite originalni certifikat u DER formatu na istoj stranici.

Java Key Store (.jks ili .keystore) Čuvanje sigurnosnih certifikata i privatnih ključeva.
PEPK alat

Alat za izvoz privatnih ključeva iz Java skladišta i njihovo šifriranje za prijenos na Google Play.

Nakon što Googleu dostavite svoj ključ za potpisivanje aplikacije, odaberite izvoz i preuzimanje vlastitog ključa (i opcionalno njegovog javnog certifikata), a zatim slijedite upute za preuzimanje i korištenje alata. Također možete preuzeti, pregledati i koristiti PEPK alat otvorenog koda.

Proces potpisivanja aplikacije

Možete preuzeti APK datoteke potpisane originalnim ključem za potpisivanje aplikacije prije ili nakon potpisivanja aplikacije na Google Playu.

Ako prelazite na Android App Bundle, možete ih testirati u verzijama za testiranje i koristiti postojeće APK-ove u produkcijskim verzijama. Evo kako to funkcionira:

  1. Potpisujete App Bundle ili APK i otpremate ga na Play konzolu.
  2. Proces potpisivanja aplikacije ovisi o tome šta preuzimate.
    • App Bundle. Google optimizira APK datoteke iz App Bundle-a, a zatim ih potpisuje ključem za potpisivanje aplikacije.
    • APK fajl potpisan ključem za preuzimanje. Google provjerava vaš potpis, uklanja ga i ponovo potpisuje APK fajlove pomoću ključa za potpisivanje aplikacije.
    • APK fajl potpisan ključem za potpisivanje aplikacije. Google provjerava potpis.
  3. Google isporučuje potpisane APK fajlove korisnicima.

Kako se prijaviti za Google Play program za potpisivanje aplikacija

Nove aplikacije

Korak 1: Kreirajte ključ za preuzimanje

  1. Kreirajte ključ za preuzimanje slijedeći upute.
  2. Potpišite novi APK fajl ključem za preuzimanje.

Korak 2: Pripremite izdanje

  1. , slijedeći upute.
  2. Nakon što odaberete vrstu verzije, konfigurirajte postavke potpisivanja aplikacije pod "Neka Google zaštiti i upravlja vašim ključem za potpisivanje aplikacije."
  3. Ako kliknete Nastavi, generirani ključ će postati ključ za preuzimanje koji će se koristiti za potpisivanje budućih izdanja. Također možete odabrati sljedeće Napredne postavke:
    • Koristite jedan ključ za različite aplikacije na nalogu programera (opcija 2).
    • Prenesite ključ za potpisivanje postojeće aplikacije (opcija 2, 3 i 4), birajući najprikladniji način izvoza i preuzimanja. Nakon što preuzmete ključ za potpisivanje aplikacije i njen javni certifikat, možete ga koristiti kao ključ za potpisivanje aplikacije.

Bilješka. Da biste nastavili, morate prihvatiti Uslove korištenja i prijaviti se u Program potpisivanja aplikacija.

Korak 3: Registrirajte svoj ključ za potpisivanje aplikacije kod svojih dobavljača API-ja

Ako vaša aplikacija koristi API, tada ćete za autentifikaciju najvjerovatnije morati registrirati certifikat ključa koji Google koristi za potpisivanje vaše aplikacije. Da biste pronašli certifikat:

  1. Prijavite se na Play konzolu.
  2. Odaberite aplikaciju.
  3. Iz menija na lijevoj strani odaberite Upravljanje izdanjima > Potpisi aplikacija.
    • Ako dobavljač API-ja zahtijeva drugu vrstu otiska prsta, možete preuzeti originalni certifikat u DER formatu i konvertirati ga po potrebi pomoću odgovarajućih alata.
Objavljene aplikacije

Korak 1: Prijavite se za Google Play program za potpisivanje aplikacija

  1. Prijavite se na Play konzolu.
  2. Odaberite aplikaciju.
  3. Iz menija na lijevoj strani odaberite Upravljanje izdanjima > Potpisi aplikacija.
  4. Ako je potrebno, pročitajte Uvjete korištenja i kliknite Prihvati.

Korak 2: Pošaljite originalni ključ Googleu i kreirajte ključ za preuzimanje

  1. Pronađite originalni ključ za potpisivanje aplikacije.
  2. Prijavite se na Play konzolu.
  3. Odaberite aplikaciju.
  4. Iz menija na lijevoj strani odaberite Upravljanje izdanjima > Potpisi aplikacija.
  5. Prenesite postojeći ključ za potpisivanje aplikacije na način koji najbolje odgovara vašem procesu izdavanja.
  1. i otpremite certifikat na Google Play.
    • Takođe možete koristiti ključ za potpisivanje aplikacije kao ključ za preuzimanje.
  2. Kopirajte digitalne otiske prstiju (MD5, SHA-1 i SHA-256) certifikata za potpisivanje aplikacije.
    • Da biste obavili testiranje, možda ćete trebati registrirati certifikat ključa za pokretanje kod dobavljača API-ja koristeći otisak prsta certifikata i ključ za potpisivanje aplikacije.

Korak 4: Potpišite sljedeće ažuriranje aplikacije pomoću ključa za preuzimanje

Objavljena ažuriranja aplikacije moraju biti potpisana ključem za preuzimanje.

Kako kreirati ključ za preuzimanje i ažurirati skladišta ključeva

Možete kreirati ključ za preuzimanje kada se prijavite za Google Play program za potpisivanje aplikacija ili ga možete generirati kasnije u Upravljanje izdanjima > Potpisi aplikacija.

Da kreirate ključ za preuzimanje, slijedite ove korake:

  1. Slijedite upute na web lokaciji Android Developers. Čuvajte ključ na sigurnom mjestu.
  2. Izvezite certifikat za ključ za pokretanje u PEM formatu. Zamijenite sljedeće argumente donjom crtom:
    • $ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
  3. Kada se to od vas zatraži tokom procesa izdavanja, preuzmite certifikat da ga registrujete na Google-u.

Ako koristite ključ za preuzimanje:

  • Ključ za preuzimanje se registruje kod Googlea samo da bi se potvrdio identitet kreatora aplikacije.
  • Vaš potpis se uklanja sa svih preuzimanja APK-a prije nego što dođu do korisnika.
Ograničenja
  • Ključ za preuzimanje mora koristiti RSA enkripciju i mora biti veličine najmanje 2048 bita.
  • DSA i EC ključevi nisu podržani, niti su RSA ključevi manji od 2048 bita.
Ažuriranje skladišta ključeva

Nakon što kreirate ključ za preuzimanje, provjerite i po potrebi ažurirajte sljedeće lokacije:

  • lokalni sistem;
  • zaštićeno lokalni server(sa različitim listama kontrole pristupa);
  • cloud sistem (sa raznim listama kontrole pristupa);
  • posebne usluge upravljanja ključevima;
  • Git spremišta.

Kako ažurirati ključ za potpisivanje za nove instalacije aplikacije

U nekim slučajevima, možda ćete moći zatražiti ažuriranje ključa za potpisivanje aplikacije. Novi ključ će se koristiti za potpisivanje novih instalacija i ažuriranja aplikacije, a zastarjeli će se koristiti za ažuriranje potpisanih verzija koje su korisnici već instalirali.

Ključ za potpisivanje može se ažurirati samo jednom za svaku aplikaciju. U malo vjerovatnom slučaju da koristite isti ključ za potpisivanje za više aplikacija da ih pokrenete u istom procesu, ključ se ne može ažurirati.

Trebali biste zatražiti ažuriranje ključa za potpisivanje aplikacije u sljedećim slučajevima:

  • Potreban vam je sigurniji ključ.
  • Ključ za potpisivanje aplikacije je kompromitovan.

Bilješka. Zahtjev za ažuriranje ključa za potpisivanje aplikacije na Play konzoli nije povezan sa zamjenom ključeva u Androidu P i novijim verzijama. Google Play trenutno ne podržava ovu zamjenu ključa.

Važne napomene o ažuriranju ključeva

Prije nego što zatražite ažuriranje ključa, važno je razumjeti koje promjene će to podrazumijevati.

  • Ako koristite isti ključ za potpisivanje za više aplikacija za korištenje istog koda ili podataka, morat ćete ažurirati aplikacije da prepoznaju i nove i stare ključeve.
  • Ako vaša aplikacija koristi API, obavezno registrirajte certifikate za nove i naslijeđene ključeve za potpisivanje aplikacija kod dobavljača API-ja prije nadogradnje aplikacije. Sertifikati su dostupni na stranici Potpisivanje aplikacija Play Console.
  • Ako mnogi korisnici vaše aplikacije instaliraju ažuriranja putem mreža za dijeljenje datoteka, moći će instalirati samo ažuriranja potpisana istim ključem kao i aplikacija instalirana na njihovim uređajima. Ako se aplikacije ne mogu ažurirati zbog instaliranu verziju potpisan drugim ključem, korisnici ga mogu deinstalirati i ponovo instalirati kako bi primali ažuriranja.
Zatražite ažuriranje ključa za nove instalacije. Da biste to učinili, slijedite ove korake:
  1. Prijavite se na Play konzolu.
  2. Odaberite aplikaciju.
  3. Iz menija na lijevoj strani odaberite Upravljanje izdanjima > Potpisi aplikacija.
  4. Na kartici "Ažuriraj ključ za potpisivanje za nove instalacije aplikacije" odaberite Zatražite ažuriranje ključa.
  5. Odaberite šta ćete raditi s uređajem.
    • Ovisno o opciji koju odaberete, možda ćete morati kontaktirati podršku da dovršite svoj zahtjev.
  6. Dozvolite Google Playu da generiše novi ključ za potpisivanje aplikacije (preporučeno) ili ga preuzmite.
    • Nakon ažuriranja ključa za potpisivanje aplikacije, ako ključ odgovara vašem ključu za preuzimanje, možete nastaviti koristiti stari ključ za potpisivanje aplikacije kao ključ za preuzimanje ili kreirati novi.
  • Ako ste također objavili svoju aplikaciju izvan Google Playa ili planirate to učiniti, možete generirati zajednički ključ za potpisivanje aplikacije i otpremiti ga na Google kada se prijavite za Google Play program za potpisivanje aplikacija.
  • Da zaštitite svoj račun, omogući verifikaciju u dva koraka za sve račune koji imaju pristup Play konzoli.
  • Nakon što se App Bundle objavi u testu ili radna verzija Možete otvoriti App Bundle Browser i preuzeti ZIP arhivu koja sadrži sve APK datoteke za određeni uređaj. Ovi APK fajlovi su već potpisani ključem za potpisivanje aplikacije. Možete ih instalirati na svoj uređaj iz ZIP arhive pomoću uslužnog programa komandna linija bundletool.
  • Za veću sigurnost, generirajte novi ključ za preuzimanje koji se razlikuje od ključa za potpisivanje aplikacije.
  • Ako želite testirati APK potpisan ključem za prijenos, registrirajte ključ na usluzi ili API-ju koji koristi potpis aplikacije za autentifikaciju (kao što je API google mape ili Facebook Developer Pack).
  • Ako koristite Google API, možete registrirati svoj certifikat za otpremanje u Google Cloud Console.

Šta učiniti ako je ključ izgubljen ili hakovan

Ako ste izgubili pristup svom privatnom ključu za preuzimanje ili je hakiran, pitajte vlasnika svog računa. Kada kontaktirate podršku, vlasnik naloga mora priložiti datoteku upload_certificate.pem.

Kada tim za podršku registruje novi ključ za preuzimanje, primit ćete e-poruku i tada možete ažurirati svoje skladišta ključeva i registrirati ključ kod dobavljača API-ja.

Bitan! Poništavanje ključa za preuzimanje ne utiče na ključ za potpisivanje aplikacije, koji Google Play koristi za potpisivanje APK datoteka prije nego što ih pošalje korisnicima.

Jesu li ove informacije bile korisne?

Kako se ovaj članak može poboljšati?

Ponekad neke aplikacije na Androidu na neki način ne odgovaraju korisniku. Primjer je nametljivo oglašavanje. A dešava se i da je program dobar za sve, ali prevod u njemu je ili kriv ili potpuno odsutan. Ili, na primjer, program je probni, ali ne postoji način da dobijete punu verziju. Kako promijeniti situaciju?

Uvod

U ovom članku ćemo govoriti o tome kako rastaviti APK paket sa aplikacijom, pogledati njegovu unutrašnju strukturu, rastaviti i dekompilirati bajtkod, a također ćemo pokušati napraviti nekoliko promjena u aplikacijama koje nam mogu donijeti jednu ili drugu korist.

Da biste sve ovo uradili sami, trebat će vam barem osnovno znanje jezika Java, na kojem su napisane Android aplikacije, i XML jezika koji se koristi svuda u Androidu – od opisivanja same aplikacije i njenih prava pristupa do pohranjivanja stringova koji će biti prikazano na ekranu. Također će vam trebati sposobnost korištenja specijaliziranog softvera za konzolu.

Dakle, šta je to APK paket u kojem se distribuira apsolutno sav Android softver?

Dekompilacija aplikacije

U ovom članku smo radili samo sa rastavljenim kodom aplikacije, ali ako se izvrše ozbiljnije promjene na velikim aplikacijama, razumijevanje malog koda će biti mnogo teže. Srećom, možemo dekompilirati dex kod u Java kod, koji, iako nije originalan i nije preveden nazad, mnogo je lakši za čitanje i razumijevanje logike aplikacije. Da bismo to učinili, trebat će nam dva alata:

  • dex2jar je prevodilac Dalvik bytecode-a u JVM bytecode, na osnovu kojeg možemo dobiti kod u jeziku Java;
  • jd-gui je sam dekompajler koji vam omogućava da dobijete čitljiv Java kod iz JVM bajtkoda. Kao alternativu, možete koristiti Jad (www.varaneckas.com/jad); Iako je prilično star, u nekim slučajevima generiše čitljiviji kod od Jd-gui.

Ovako ih treba koristiti. Prvo pokrećemo dex2jar, navodeći put do apk paketa kao argument:

% dex2jar.sh mail.apk

Kao rezultat toga, Java paket mail.jar će se pojaviti u trenutnom direktorijumu, koji se već može otvoriti u jd-gui za pregled Java koda.

Raspoređivanje APK paketa i njihovo primanje

Plasticna kesa Android aplikacije, u stvari, je obična ZIP datoteka, nisu potrebni posebni alati za pregled sadržaja i njegovo izdvajanje. Dovoljno je imati arhiver - 7zip za Windows ili konzolu unzip na Linuxu. Ali to je u vezi omotača. Šta je unutra? Generalno, unutra imamo sljedeću strukturu:

  • META-INF/- sadrži digitalni sertifikat aplikacije, koji identifikuje njenog kreatora, i kontrolne sume fajlova paketa;
  • res/ - različiti resursi koje aplikacija koristi u svom radu, kao što su slike, deklarativni opis interfejsa, kao i drugi podaci;
  • AndroidManifest.xml- opis aplikacije. Ovo uključuje, na primjer, listu potrebnih dozvola, potrebnu verziju Androida i potrebnu rezoluciju ekrana;
  • classes.dex- kompajlirani bajt kod aplikacije za virtuelna mašina Dalvik;
  • resursi.arsc- takođe resursi, ali drugačije vrste - posebno stringovi (da, ovaj fajl se može koristiti za rusifikacije!).

Navedene datoteke i direktoriji su, ako ne u svim, onda, možda, u velikoj većini APK-ova. Međutim, postoji još nekoliko ne tako uobičajenih datoteka/direktorija koje vrijedi spomenuti:

  • imovine- analogni resursi. Glavna razlika je u tome što za pristup resursu morate znati njegov identifikator, ali lista sredstava se može dobiti dinamički korištenjem metode AssetManager.list() u kodu aplikacije;
  • lib- izvorne Linux biblioteke napisane pomoću NDK (Native Development Kit).

Ovaj direktorij koriste proizvođači igara, postavljajući tamo motor igre napisan na C/C++, kao i kreatori aplikacija visokih performansi (npr. google chrome). Shvatili smo uređaj. Ali kako doći do paketne datoteke aplikacije koja vas zanima? Budući da nije moguće preuzeti APK fajlove sa uređaja bez root-a (nalaze se u direktorijumu /data/app), a rutiranje nije uvek preporučljivo, postoje najmanje tri načina da se fajl aplikacije prenese na računar:

  • APK Downloader ekstenzija za Chrome;
  • Real APK Leecher aplikacija;
  • razni fajl hosting i Vareznik.

Koji koristiti je stvar ukusa; radije koristimo odvojene aplikacije, pa ćemo opisati upotrebu Real APK Leecher-a, pogotovo jer je napisan u Javi i, shodno tome, radiće u Windows-u ili Nix-u.

Nakon pokretanja programa potrebno je popuniti tri polja: Email, Password i Device ID - i odabrati jezik. Prva dva su e-mail i lozinka vašeg Google naloga koji koristite na uređaju. Treći je identifikator uređaja, a može se dobiti upisivanjem koda na biraču # #8255## a zatim pronalaženje linije ID uređaja. Prilikom popunjavanja potrebno je samo unijeti ID bez android- prefiksa.

Nakon popunjavanja i spremanja, često se pojavljuje poruka “Greška pri povezivanju sa serverom”. Nema nikakve veze sa Google Play-om, pa ga slobodno zanemarite i potražite pakete koji vas zanimaju.

Pregledajte i izmijenite

Recimo da ste pronašli paket koji vas zanima, preuzeli ga, raspakovali... i kada ste pokušali da pogledate neki XML fajl, bili ste iznenađeni kada ste otkrili da fajl nije tekstualni. Kako ga dekompilirati i kako općenito raditi s paketima? Da li je zaista potrebno instalirati SDK? Ne, uopće nije potrebno instalirati SDK. Zapravo, svi koraci za izdvajanje, modificiranje i pakiranje APK paketa zahtijevaju sljedeće alate:

  • ZIP arhiver za raspakivanje i pakovanje;
  • smali- Dalvik virtualni stroj bytecode asembler/disassembler (code.google.com/p/smali);
  • aapt- alat za pakovanje resursa (podrazumevano, resursi se pohranjuju u binarnom obliku radi optimizacije performansi aplikacije). Uključeno u Android SDK, ali se može nabaviti zasebno;
  • potpisnik- alat za digitalno potpisivanje modificiranog paketa (bit.ly/Rmrv4M).

Sve ove alate možete koristiti zasebno, ali to je nezgodno, pa je bolje koristiti softver višeg nivoa napravljen na njihovoj osnovi. Ako radite na Linuxu ili Mac OS X-u, postoji alat koji se zove apktool. Omogućava vam da raspakujete resurse u njihovom originalnom obliku (uključujući binarne XML i arsc datoteke), ponovo napravite paket sa promijenjenim resursima, ali ne zna kako da potpiše pakete, tako da ćete morati ručno pokrenuti uslužni program potpisnika. Unatoč činjenici da je uslužni program napisan na Javi, njegova instalacija je prilično nestandardna. Prvo morate dobiti samu jar datoteku:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ export PATH=~/bin:$PATH

Ako radite na Windows-u, postoji odličan alat za to koji se zove Virtuous Ten Studio, koji također akumulira sve ove alate (uključujući sam apktool), ali umjesto CLI sučelja pruža korisniku intuitivno GUI, s kojim možete izvršiti operacije raspakivanja, rastavljanja i dekompajliranja u nekoliko klikova. Ovaj alat je Donation-ware, odnosno ponekad se pojavljuju prozori koji traže da dobijete licencu, ali na kraju se to može tolerirati. Nema smisla to opisivati, jer možete razumjeti sučelje za nekoliko minuta. Ali apktool, zbog njegove prirode konzole, trebalo bi detaljnije razgovarati.


Pogledajmo opcije apktool-a. Ukratko, postoje tri osnovne naredbe: d (dekodiranje), b (izgradnja) i if (instaliraj okvir). Ako je sve jasno sa prve dve komande, šta onda radi treća, uslovna izjava? Raspakira specificirani UI okvir, koji je neophodan u slučajevima kada secirate bilo koji sistemski paket.

Pogledajmo najzanimljivije opcije prve naredbe:

  • -s- ne rastavljajte dex fajlove;
  • -r- ne raspakujte resurse;
  • -b- nemojte umetati informacije o otklanjanju grešaka u rezultate rastavljanja dex fajla;
  • --frame-path- koristite specificirani UI okvir umjesto onog ugrađenog u apktool. Pogledajmo sada nekoliko opcija za komandu b:
  • -f- prinudna montaža bez provjere promjena;
  • -a- navedite put do aapt-a (alatka za pravljenje APK arhive), ako iz nekog razloga želite da ga koristite iz drugog izvora.

Korištenje apktool-a je vrlo jednostavno; da biste to učinili, samo navedite jednu od naredbi i putanju do APK-a, na primjer:

$ apktool d mail.apk

Nakon toga, sve ekstrahovane i rastavljene datoteke paketa će se pojaviti u imeniku pošte.

Priprema. Onemogućavanje oglašavanja

Teorija je, naravno, dobra, ali zašto je potrebna ako ne znamo šta da radimo sa raspakovanim paketom? Pokušajmo teoriju primijeniti u našu korist, naime modificirati neki softver tako da nam ne prikazuje reklamiranje. Na primjer, neka to bude Virtual Torch - virtualna baklja. Ovaj softver je idealan za nas, jer je do kraja ispunjen dosadnim reklamama i, osim toga, dovoljno je jednostavan da se ne izgubite u džungli koda.


Dakle, koristeći jednu od gore navedenih metoda, preuzmite aplikaciju sa tržišta. Ako odlučite koristiti Virtuous Ten Studio, jednostavno otvorite APK datoteku u aplikaciji i raspakirajte je, kreirajte projekt (File -> New project), a zatim odaberite Import File u kontekstualnom izborniku projekta. Ako je vaš izbor pao na apktool, samo pokrenite jednu naredbu:

$ apktool d com.kauf.particle.virtualtorch.apk

Nakon toga, stablo datoteka slično onome opisanom u prethodnom odeljku će se pojaviti u direktorijumu com.kauf.particle.virtualtorch, ali sa dodatnim smali direktorijumom umesto dex fajlova i apktool.yml fajlom. Prvi sadrži rastavljeni kod izvršne dex datoteke aplikacije, drugi sadrži servisne informacije neophodne da apktool sakupi paket nazad.

Prvo mjesto na koje bismo trebali pogledati je, naravno, AndroidManifest.xml. I tu odmah nailazimo na sljedeći red:

Nije teško pretpostaviti da je on odgovoran za davanje dozvole aplikaciji za korištenje internetske veze. U stvari, ako se samo želimo riješiti reklama, najvjerovatnije ćemo samo trebati blokirati aplikaciju s interneta. Hajde da pokušamo ovo da uradimo. Brišemo navedenu liniju i pokušavamo napraviti softver koristeći apktool:

$ apktool b com.kauf.particle.virtualtorch

Rezultirajuća APK datoteka će se pojaviti u direktoriju com.kauf.particle.virtualtorch/build/. Međutim, neće ga biti moguće instalirati, jer nema digitalni potpis i kontrolne sume datoteka (jednostavno nema META-INF/ direktorij). Moramo potpisati paket koristeći apk-signer uslužni program. Lansirano. Interfejs se sastoji od dvije kartice - na prvom (Key Generator) kreiramo ključeve, na drugom (APK Signer) potpisujemo. Da kreirate naš privatni ključ, popunite sljedeća polja:

  • Target File- izlazna datoteka skladišta ključeva; obično pohranjuje jedan par ključeva;
  • Lozinka I Potvrdi- lozinka za skladište;
  • Alias- naziv ključa u skladištu;
  • Alias ​​lozinka I Potvrdi- šifra tajnog ključa;
  • Validnost- rok važenja (u godinama). Zadana vrijednost je optimalna.

Preostala polja su, općenito, opciona - ali barem jedno mora biti popunjeno.


UPOZORENJE

Da biste potpisali aplikaciju pomoću apk-signera, morate instalirati Android SDK i navesti punu putanju do njega u postavkama aplikacije.

Sve informacije su date samo u informativne svrhe. Ni uredništvo ni autor nisu odgovorni za bilo kakvu moguću štetu uzrokovanu materijalima ovog članka.

Sada možete potpisati APK ovim ključem. Na kartici APK Signer odaberite novogeneriranu datoteku, unesite lozinku, pseudonim ključa i lozinku, zatim pronađite APK datoteku i hrabro kliknite na dugme “Potpiši”. Ako sve prođe kako treba, paket će biti potpisan.

INFO

Pošto smo paket potpisali vlastitim ključem, on će biti u sukobu s originalnom aplikacijom, što znači da ćemo kada pokušamo ažurirati softver preko tržišta dobiti grešku.

Digitalni potpis je potreban samo za softver treće strane, pa ako vršite izmjene sistemske aplikacije, koji se instaliraju kopiranjem u /system/app/ direktorij, ne morate ih potpisivati.

Nakon toga preuzmite paket na svoj pametni telefon, instalirajte ga i pokrenite. Voila, reklama je nestala! Umjesto toga, međutim, pojavila se poruka da nemamo internet ili da nemamo odgovarajuće dozvole. U teoriji, ovo bi moglo biti dovoljno, ali poruka izgleda dosadno i, da budemo iskreni, upravo smo imali sreće sa glupom aplikacijom. Uobičajeno napisani softver će najvjerovatnije razjasniti svoje vjerodajnice ili provjeriti internetsku vezu i u suprotnom će jednostavno odbiti pokretanje. Kako biti u ovom slučaju? Naravno, uredite kod.

Tipično, autori aplikacija kreiraju posebne klase za prikazivanje reklama i poziva metode ovih klasa kada se aplikacija ili jedna od njenih „aktivnosti“ (jednostavno rečeno, ekrani aplikacije) pokrene. Pokušajmo pronaći ove klase. Idemo u smali direktorij, zatim com (org sadrži samo otvorenu grafičku biblioteku cocos2d), pa kauf (ovdje je, jer je ovo ime programera i sav njegov kod je tamo) - i evo ga, marketinški imenik. Unutra nalazimo gomilu fajlova sa smali ekstenzijom. To su klase, a najistaknutija od njih je klasa Ad.smali, po čijem je nazivu lako pretpostaviti da je ona ta koja prikazuje oglašavanje.

Mogli bismo promijeniti logiku njegovog rada, ali bi bilo mnogo lakše jednostavno ukloniti pozive bilo kojoj od njegovih metoda iz same aplikacije. Stoga napuštamo marketinški direktorij i idemo na susjedni direktorij čestica, a zatim na virtualtorch. Datoteka MainActivity.smali ovdje zaslužuje posebnu pažnju. Ovo je standardna Android klasa koju kreira Android SDK i instalira se kao ulazna tačka u aplikaciju (analogno glavnoj funkciji u C). Otvorite datoteku za uređivanje.

Unutra se nalazi smali kod (lokalni asembler). Prilično je zbunjujuće i teško čitljivo zbog svoje niske razine, tako da ga nećemo proučavati, već ćemo jednostavno pronaći sve reference na klasu Ad u kodu i komentirati ih. U pretragu unosimo red "Oglas" i dolazimo do reda 25:

Terenski privatni oglas:Lcom/kauf/marketing/Ad;

Ovdje se kreira polje oglasa za pohranjivanje objekta klase oglasa. Komentiramo postavljanjem znaka ### ispred linije. Nastavljamo potragu. Linija 423:

Nova instanca v3, Lcom/kauf/marketing/Ad;

Ovdje dolazi do stvaranja objekta. Hajde da komentarišemo. Nastavljamo pretragu i u redovima 433, 435, 466, 468, 738, 740, 800 i 802 pronalazimo pozive metodama klase Ad. Hajde da komentarišemo. Izgleda da je to to. Sačuvaj. Sada paket treba ponovo sastaviti i provjeriti funkcionalnost i prisutnost reklama. Radi čistoće eksperimenta, vraćamo liniju uklonjenu iz AndroidManifest.xml, sastavljamo paket, potpisujemo i instaliramo.

Naš zamorac. Oglašavanje vidljivo

Ups! Reklama je nestala samo dok je aplikacija radila, ali je ostala u glavnom meniju, što vidimo kada pokrenemo softver. Dakle, čekajte, ali ulazna tačka je klasa MainActivity, a reklama je nestala dok je aplikacija radila, ali je ostala u glavnom meniju, pa je ulazna tačka drugačija? Da biste identificirali pravu ulaznu tačku, ponovo otvorite datoteku AndroidManifest.xml. I da, sadrži sljedeće redove:

Oni nam govore (i, što je još važnije, androidu) da aktivnost pod nazivom Start treba da se pokrene kao odgovor na generisanje namjere (događaja) android.intent.action.MAIN iz kategorije android.intent.category.LAUNCHER. Ovaj događaj se generiše kada dodirnete ikonu aplikacije u pokretaču, tako da određuje ulaznu tačku, odnosno klasu Start. Najvjerovatnije, programer je prvo napisao aplikaciju bez glavnog menija, u koju je ulazna tačka bila standardna MainActivity klasa, a zatim dodao novi prozor (aktivnost) koji sadrži meni i opisan u klasi Start, i ručno ga napravio unosom tačka.

Otvorite datoteku Start.smali i ponovo potražite red „Ad“, nalazimo u redovima 153 i 155 pominjanje klase FirstAd. Također je u izvornom kodu i, sudeći po nazivu, odgovoran je za prikazivanje oglasa na glavnom ekranu. Pogledajmo dalje, postoji kreiranje instance klase FirstAd i namjera koja je, prema kontekstu, povezana s ovom instancom, a zatim oznaka cond_10, uvjetni prijelaz na koju se vrši točno prije kreiranja instance razreda:

If-ne p1, v0, :cond_10 .line 74 nova instanca v0, Landroid/content/Intent; ... :cond_10

Najvjerovatnije, program nekako nasumično izračuna da li oglašavanje treba biti prikazano na glavnom ekranu, a ako ne, skače direktno na cond_10. Ok, pojednostavimo njen zadatak i zamijenimo uvjetni prijelaz bezuvjetnim:

#if-ne p1, v0, :cond_10 goto:cond_10

U kodu se više ne spominje FirstAd, pa zatvaramo datoteku i ponovo sastavljamo našu virtualnu lampu koristeći apktool. Kopirajte ga na svoj pametni telefon, instalirajte ga, pokrenite ga. Voila, sva reklama je nestala, na čemu nam svima čestitamo.

Rezultati

Ovaj članak je samo kratak uvod u metode hakovanja i modifikacije Android aplikacija. Mnogi problemi su ostali iza kulisa, kao što je uklanjanje zaštite, raščlanjivanje zamagljenog koda, prevođenje i zamjena resursa aplikacije, kao i modifikacija aplikacija napisanih pomoću Android NDK-a. Međutim, imajući osnovno znanje, samo je pitanje vremena da sve shvatite.

Pregleda postova: 5,618

Android Studio pruža široke mogućnosti kako za razvoj aplikacija tako i za povećanje automatizacije i udobnosti u programiranju.

Ako koristite sistem izgradnje Gradle da biste kreirali svoje aplikacije, također možete konfigurirati nekoliko opcija za kreiranje potpisa za svoje aplikacije.

Vjerovatno ne želite da objavite svoje potpisne ključeve, lozinke i korisnička imena u javnom (ili čak privatnom) spremištu. Stoga možete definirati ključ, lozinku i korisničko ime kao svojstva u zasebnoj datoteci.

Prije nego počnete potpisivati ​​svoju aplikaciju, morate kreirati novo svojstvo u datoteci gradle.properties. Hajde da ga pozovemo Keys.repo i, kao vrijednost, navedite putanju do mape u kojoj će se naknadno nalaziti spremište ključeva i datoteka sa svojstvima (na primjer, C:/Users/UserName/.signing).

Keys.repo=C:/Users/UserName/.signing

Zatim trebate kreirati ovu mapu ili, ako ste naveli postojeću, otvorite je. U njemu morate kreirati fajl YourProjectName.properties, unutar kojeg će put do skladišta ključeva, alias ključa i lozinka biti upisani kao svojstva u sljedećem obliku.

RELEASE_STORE_FILE=/Naziv Vašeg projekta/NazivStore ključeva.jks RELEASE_STORE_PASS=****** RELEASE_ALIAS=KeyAlias ​​RELEASE_KEY_PASS=******

Kako kreirati trezor ključeva?

Ako nemate skladište ključeva, lako ga možete kreirati koristeći Android Studio. Da biste to učinili, odaberite stavku menija Build -> Generirajte potpisani APK.

U prozoru koji se pojavi potrebno je da kliknete Napravi novi... Kao rezultat, otvorit će se prozor u kojem možete odrediti gdje će se nalaziti skladište ključeva (za ovu lekciju bolje je odmah odabrati putanju koju ste naveli u YourProjectName.properties u imovini RELEASE_STORE_FILE), kao i ključne informacije.

Zatim morate kreirati folder YourProjectName i premjestite ga tamo potreban fajl prodavnice ključeva.

Sada možete nastaviti direktno na proces potpisivanja. Da biste to učinili, morate otvoriti datoteku u svom projektu build.gradle(nalazi se u folderu aplikacije). Unutra u bloku android morate dodati sljedeći kod.

SigningConfigs ( debug ( /* nema promjena ovdje */ ) izdanje ( if (project.hasProperty("Keys.repo")) ( def projectPropsFile = file(project.property("Keys.repo") + "/Ime VašegProjekta.properties " ) if (projectPropsFile.exists()) (Properties props = new Properties() props.load(new FileInputStream(projectPropsFile)) storeFile file(file(project.property("Keys.repo") + props["RELEASE_STORE_FILE"] ) ) storePassword props["RELEASE_STORE_PASS"] keyAlias ​​props["RELEASE_ALIAS"] keyPassword props["RELEASE_KEY_PASS"] ) ) ostalo ( println "==================== = ====================================" println " - Molimo konfigurirajte okruženje za kompilaciju izdanja - npr. u ~/. potpisni direktorij" println "=========================================== ================== ==========" ) ) )

Koje su različite šeme za dobijanje potpisa?

Postoje dvije šeme za dobijanje APK potpisa: v1 JAR I v2 Cijeli APK.

U prvom slučaju je potpisan JAR-fajl, koji je tradicionalan način potpisivanje. Potpisivanje v1 ne štiti neke dijelove APK-a, kao što su ZIP metapodaci. APK verifikator mora rukovati s puno nepouzdanih (još ne provjerenih) struktura podataka, a zatim odbaciti podatke koji nisu potpisani, ostavljajući mnogo površine napada. Dodatno, APK verifikator mora dekomprimirati sve komprimirane unose, što gubi puno vremena i memorije. Za rješavanje ovih problema razvijena je druga shema v2 Full APK.

Šema v2 je predstavljena u Android 7.0 Nougat (API 25) i radi počevši od verzije Android Studio 2.2 I Android Gradle dodatak 2.2. Ova shema pruža bržu instalaciju aplikacije i dobru zaštitu od neovlaštenih promjena u APK-u. Sadržaj APK-a se raspršuje i potpisuje, a zatim rezultira Blok APK potpisa umetnut u APK.

Tokom verifikacije, v2 šema tretira APK kao blob i vrši provjeru potpisa na cijeloj datoteci. Svaka modifikacija APK-a, uključujući izmjene ZIP metapodataka, poništava potpis. Ovaj oblik provjere je mnogo brži i može otkriti više neovlaštenih modifikacija.

Novi format je kompatibilan unatrag, tako da se APK-ovi potpisani novom šemom mogu instalirati na starije uređaje (koji će jednostavno zanemariti novi potpis) sve dok su ti APK-ovi također potpisani v1 šemom.

Prema zadanim postavkama, potpisivanje koristi obje sheme tako da se aplikacije mogu instalirati na bilo koji uređaj. Međutim, ako postoji takva potreba, možete onemogućiti v1 ili v2 potpis. Da biste to učinili, u gornjem kodu u bloku pustiti Dovoljno je dodati sljedeće redove.

V1SigningEnabled false

V2SigningEnabled false

Također je važno napomenuti da morate potpisati shemom v1 prije potpisivanja shemom v2, budući da APK neće proći verifikaciju prema shemi v2 ako je potpisan dodatnim certifikatima nakon potpisivanja sa shemom v2.

Kada je kod dodan, uključite ovaj kod u blok buildTypes unutra pustiti. Na primjer:

BuildTypes ( release ( minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" signingConfig signingConfigs.release ))

Sada možete bezbedno u stavku menija Build izabrati Napravi APK, nakon što je prethodno promijenio tip sklopa iz debug on pustiti. Kao što vidite, ova metoda je zgodna jer je automatska, potrebno je samo jednom konfigurirati i vaša pohrana ključeva može biti sigurna.


Top