Allekirjoita apk-tiedosto. Julkaisemme sovelluksia Google Playssa ja ansaitsemme miljoonia. Mitä tehdä, jos avain on kadonnut tai hakkeroitu

Joskus jotkut Android-sovellukset eivät sovi käyttäjälle jollain tavalla. Esimerkkinä tunkeileva mainonta. Ja tapahtuu myös niin, että ohjelma on hyvä kaikille, mutta siinä oleva käännös on joko vino tai puuttuu kokonaan. Tai esimerkiksi ohjelma on kokeiluversio, mutta hanki täysversio ei ole mahdollisuutta. Kuinka muuttaa tilannetta?

Johdanto

Tässä artikkelissa puhumme siitä, kuinka purkaa APK-paketti sovelluksella, tarkastellaan sen sisäistä rakennetta, puretaan ja puretaan tavukoodi ja yritämme myös tehdä useita muutoksia sovelluksiin, jotka voivat tuoda meille yhden tai toisen hyödyn.

Jotta voit tehdä kaiken tämän itse, tarvitset vähintään perustiedot Java kieli, jossa Android-sovellukset kirjoitetaan, ja XML-kieli, jota käytetään kaikkialla Androidissa - itse sovelluksen kuvauksesta ja sen käyttöoikeuksista näytöllä näkyvien merkkijonojen tallentamiseen. Tarvitset myös kyvyn käyttää erityisiä konsoliohjelmistoja.

Joten mikä on APK-paketti, jossa ehdottomasti kaikki Android-ohjelmistot jaetaan?

Sovelluksen purku

Tässä artikkelissa työskentelimme vain puretun sovelluskoodin kanssa, mutta jos suuriin sovelluksiin tehdään vakavampia muutoksia, smali-koodin ymmärtäminen on paljon vaikeampaa. Onneksi voimme purkaa dex-koodin Java-koodiksi, joka, vaikka ei ole alkuperäinen eikä käännetty takaisin, on paljon helpompi lukea ja ymmärtää sovelluksen logiikkaa. Tätä varten tarvitsemme kaksi työkalua:

  • dex2jar on Dalvik-tavukoodin kääntäjä JVM-tavukoodiksi, jonka perusteella saamme Java-kielistä koodia;
  • jd-gui on itse kääntäjä, jonka avulla voit saada luettavaa Java-koodia JVM-tavukoodista. Vaihtoehtoisesti voit käyttää Jadia (www.varaneckas.com/jad); Vaikka se on melko vanha, se tuottaa joissakin tapauksissa luettavampaa koodia kuin Jd-gui.

Näin niitä tulee käyttää. Ensin käynnistämme dex2jarin ja määritämme apk-paketin polun argumenttina:

% dex2jar.sh mail.apk

Tämän seurauksena Java-paketti mail.jar ilmestyy nykyiseen hakemistoon, joka voidaan jo avata jd-guissa Java-koodin tarkastelemiseksi.

APK-pakettien järjestäminen ja vastaanottaminen

Muovipussi Android-sovellukset, itse asiassa, on tavallinen ZIP-tiedosto, sisällön tarkastelemiseen ja purkamiseen ei tarvita erityisiä työkaluja. Riittää, että sinulla on arkistointi - 7zip Windowsille tai konsolin purkaminen Linuxissa. Mutta se koskee käärettä. Mitä on sisällä? Yleensä sisällämme on seuraava rakenne:

  • META-INF/- sisältää sovelluksen digitaalisen varmenteen, joka tunnistaa sen luojan ja pakettitiedostojen tarkistussummat;
  • res/ - erilaiset resurssit, joita sovellus käyttää työssään, kuten kuvat, rajapinnan deklaratiivinen kuvaus sekä muut tiedot;
  • AndroidManifest.xml- sovelluksen kuvaus. Tämä sisältää esimerkiksi luettelon vaadituista käyttöoikeuksista Android-versio ja vaadittu näytön tarkkuus;
  • classes.dex- käännetty sovelluksen tavukoodi virtuaalikone Dalvik;
  • resurssit.arsc- myös resursseja, mutta erilaista - erityisesti merkkijonoja (kyllä, tätä tiedostoa voidaan käyttää venäläistämiseen!).

Luetteloidut tiedostot ja hakemistot ovat, jos eivät kaikki, niin ehkä suurimmassa osassa APK:ita. On kuitenkin muutamia muita mainitsemisen arvoisia ei niin yleisiä tiedostoja/hakemistoja:

  • omaisuutta- resurssien analogia. Suurin ero on, että päästäksesi resurssiin sinun on tiedettävä sen tunniste, mutta resurssien luettelo voidaan saada dynaamisesti käyttämällä AssetManager.list()-metodia sovelluskoodissa;
  • lib- alkuperäiset Linux-kirjastot, jotka on kirjoitettu NDK:lla (Native Development Kit).

Tätä hakemistoa käyttävät pelien valmistajat sijoittaen sinne C/C++-kielellä kirjoitetun pelimoottorin sekä tehokkaiden sovellusten luojat (esim. Google Chrome). Selvitimme laitteen. Mutta miten saat kiinnostavan sovelluksen pakettitiedoston? Koska APK-tiedostoja ei ole mahdollista poimia laitteelta ilman pääkäyttäjää (ne sijaitsevat /data/app-hakemistossa), eikä juurtuminen ole aina suositeltavaa, on ainakin kolme tapaa saada sovellustiedosto tietokoneellesi:

  • APK Downloader -laajennus Chromelle;
  • Todellinen APK Leecher -sovellus;
  • eri tiedostojen isännöinti ja Varezniks.

Kumpaa käyttää, on makuasia; käytämme mieluummin erillisiä sovelluksia, joten kuvailemme Real APK Leecherin käyttöä, varsinkin kun se on kirjoitettu Java-kielellä ja toimii vastaavasti joko Windowsissa tai Nixissä.

Ohjelman käynnistämisen jälkeen sinun on täytettävä kolme kenttää: Sähköposti, Salasana ja Laitetunnus - ja valittava kieli. Kaksi ensimmäistä ovat laitteellasi käyttämäsi Google-tilisi sähköpostiosoite ja salasana. Kolmas on laitteen tunniste, ja se voidaan saada kirjoittamalla koodi numerovalitsimeen # #8255## ja etsi sitten Laitetunnus-rivi. Täyttäessäsi sinun tarvitsee syöttää vain tunnus ilman android-etuliitettä.

Täytön ja tallennuksen jälkeen näkyviin tulee usein viesti "Virhe muodostettaessa yhteyttä palvelimeen". Sillä ei ole mitään tekemistä Google Play, joten voit jättää sen huomiotta ja etsiä sinua kiinnostavia paketteja.

Katso ja muokkaa

Oletetaan, että löysit sinua kiinnostavan paketin, latasit sen, purit sen... ja kun yritit tarkastella XML-tiedostoa, yllätyit huomatessasi, että tiedosto ei ollut tekstiä. Kuinka purkaa se ja miten käsitellä paketteja yleensä? Onko SDK todella tarpeen asentaa? Ei, SDK:ta ei tarvitse asentaa ollenkaan. Itse asiassa kaikki vaiheet APK-pakettien purkamiseksi, muokkaamiseksi ja pakkaamiseksi vaativat seuraavat työkalut:

  • ZIP-arkistointi purkamiseen ja pakkaamiseen;
  • smali- Dalvik virtuaalikoneen tavukoodin kokoaja/disassembler (code.google.com/p/smali);
  • aapt- työkalu resurssien pakkaamiseen (oletusarvoisesti resurssit tallennetaan binäärimuodossa sovelluksen suorituskyvyn optimoimiseksi). Sisältää Android SDK:n, mutta sen voi hankkia erikseen;
  • allekirjoittaja- työkalu muokatun paketin digitaaliseen allekirjoittamiseen (bit.ly/Rmrv4M).

Voit käyttää kaikkia näitä työkaluja erikseen, mutta tämä on hankalaa, joten on parempi käyttää niiden pohjalta rakennettuja korkeamman tason ohjelmistoja. Jos työskentelet Linuxissa tai Mac OS X:ssä, käytettävissä on apktool-niminen työkalu. Sen avulla voit purkaa resurssit alkuperäisessä muodossaan (mukaan lukien binaariset XML- ja arsc-tiedostot), rakentaa paketin uudelleen muuttuneilla resursseilla, mutta se ei osaa allekirjoittaa paketteja, joten sinun on suoritettava allekirjoitusapuohjelma manuaalisesti. Huolimatta siitä, että apuohjelma on kirjoitettu Java-kielellä, sen asennus on melko epästandardi. Ensin sinun on hankittava itse jar-tiedosto:

$ 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 $ vienti PATH=~/bin:$PATH

Jos työskentelet Windowsilla, siihen on olemassa erinomainen työkalu nimeltään Virtuous Ten Studio, joka myös kerää kaikki nämä työkalut (mukaan lukien itse apktool), mutta CLI-käyttöliittymän sijaan se tarjoaa käyttäjälle intuitiivisen graafisen käyttöliittymän, jolla voit suorittaa pakkauksen purkamisen, purkamisen ja purkamisen muutamalla napsautuksella. Tämä työkalu on Donation-ware, toisin sanoen joskus ilmestyy ikkunat, jotka pyytävät sinua hankkimaan lisenssin, mutta loppujen lopuksi tämä voidaan sietää. Sitä on turha kuvailla, koska voit ymmärtää käyttöliittymän muutamassa minuutissa. Mutta apktoolista sen konsoliluonteen vuoksi tulisi keskustella yksityiskohtaisemmin.


Katsotaanpa apktool-asetuksia. Lyhyesti sanottuna peruskomentoja on kolme: d (dekoodaus), b (build) ja if (asenna kehys). Jos kaikki on selvää kahdella ensimmäisellä komennolla, mitä tekee kolmas, ehdollinen lause? Se purkaa määritetyn käyttöliittymäkehyksen, mikä on tarpeen tapauksissa, joissa irrotat minkä tahansa järjestelmäpaketin.

Katsotaanpa ensimmäisen komennon mielenkiintoisimpia vaihtoehtoja:

  • -s- älä pura dex-tiedostoja;
  • -r- älä pura resursseja;
  • -b- älä lisää virheenkorjaustietoja dex-tiedoston purkamisen tuloksiin;
  • --kehys-polku- käytä määritettyä käyttöliittymäkehystä apktooliin sisäänrakennetun sijaan. Katsotaanpa nyt paria vaihtoehtoa b-komennolle:
  • -f- pakotettu kokoonpano ilman muutosten tarkistamista;
  • -a- ilmoita polku aaptiin (työkalu APK-arkiston rakentamiseen), jos jostain syystä haluat käyttää sitä toisesta lähteestä.

Apktoolin käyttäminen on hyvin yksinkertaista; tehdäksesi tämän, määritä vain yksi komennoista ja polku APK:hen, esimerkiksi:

$ apktool d mail.apk

Tämän jälkeen kaikki paketin puretut ja puretut tiedostot näkyvät postihakemistossa.

Valmistautuminen. Mainonnan poistaminen käytöstä

Teoria on tietysti hyvä, mutta miksi sitä tarvitaan, jos emme tiedä mitä tehdä pakkaamattomalle paketille? Yritetään soveltaa teoriaa hyödyksemme, nimittäin muokata jotain ohjelmistoa niin, ettei se näytä meille mainoksia. Olkoon se esimerkiksi Virtual Torch - virtuaalinen taskulamppu. Tämä ohjelmisto on ihanteellinen meille, koska se on täynnä ärsyttäviä mainoksia ja on lisäksi riittävän yksinkertainen, jotta se ei eksy koodin viidakkoon.


Joten lataa sovellus markkinoilta jollakin yllä olevista menetelmistä. Jos päätät käyttää Virtuous Ten Studiota, avaa vain APK-tiedosto sovelluksessa ja pura se, jota varten luo projekti (Tiedosto -> Uusi projekti) ja sitten kontekstivalikko projekti, valitse Tuo tiedosto. Jos valintasi osui apktooliin, suorita vain yksi komento:

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

Tämän jälkeen com.kauf.particle.virtualtorch-hakemistoon ilmestyy edellisessä osiossa kuvatun kaltainen tiedostopuu, mutta siinä on ylimääräinen smali-hakemisto dex-tiedostojen ja apktool.yml-tiedoston sijaan. Ensimmäinen sisältää sovelluksen suoritettavan dex-tiedoston puretun koodin, toinen sisältää palvelutiedot, joita apktool tarvitsee kokoamaan paketin takaisin.

Ensimmäinen paikka, johon meidän pitäisi etsiä, on tietysti AndroidManifest.xml. Ja tässä kohtaamme heti seuraavan rivin:

Ei ole vaikea arvata, että se on vastuussa Internet-yhteyden käyttöoikeuksien myöntämisestä sovellukselle. Itse asiassa, jos haluamme vain päästä eroon mainonnasta, meidän on todennäköisesti vain estettävä sovellus Internetistä. Yritetään tehdä tämä. Poistamme määritetyn rivin ja yritämme rakentaa ohjelmiston apktoolilla:

$ apktool b com.kauf.particle.virtualtorch

Tuloksena oleva APK-tiedosto näkyy hakemistossa com.kauf.particle.virtualtorch/build/. Sitä ei kuitenkaan voi asentaa, koska siinä ei ole digitaalista allekirjoitusta ja tiedostojen tarkistussummia (sillä ei yksinkertaisesti ole META-INF/-hakemistoa). Meidän on allekirjoitettava paketti apk-signer-apuohjelmalla. Käynnistetty. Käyttöliittymä koostuu kahdesta välilehdestä - ensimmäisessä (Key Generator) luomme avaimet, toisessa (APK Signer) allekirjoitamme. Luodaksesi yksityisen avaimemme, täytä seuraavat kentät:

  • Kohdetiedosto- avainsäilön tulostustiedosto; se tallentaa yleensä yhden parin avaimia;
  • Salasana Ja Vahvistaa- tallennustilan salasana;
  • Alias- avaimen nimi varastossa;
  • Alias-salasana Ja Vahvistaa- salaisen avaimen salasana;
  • Voimassaolo- voimassaoloaika (vuosina). Oletusarvo on optimaalinen.

Muut kentät ovat yleensä valinnaisia, mutta vähintään yksi on täytettävä.


VAROITUS

Jos haluat allekirjoittaa sovelluksen apk-signerilla, sinun on asennettava Android SDK ja määritettävä sen koko polku sovelluksen asetuksissa.

Kaikki tiedot on tarkoitettu vain tiedoksi. Toimittajat tai kirjoittaja eivät ole vastuussa tämän artikkelin materiaalien mahdollisesti aiheuttamista haitoista.

Nyt voit allekirjoittaa APK:n tällä avaimella. Valitse APK Signer -välilehdellä juuri luotu tiedosto, kirjoita salasana, avainalias ja salasana, etsi APK-tiedosto ja napsauta rohkeasti "Allekirjoita"-painiketta. Jos kaikki menee hyvin, paketti allekirjoitetaan.

TIEDOT

Koska allekirjoitimme paketin omalla avaimellamme, se tulee olemaan ristiriidassa alkuperäisen sovelluksen kanssa, mikä tarkoittaa, että kun yritämme päivittää ohjelmistoa markkinoiden kautta, saamme virheilmoituksen.

Digitaalinen allekirjoitus vaaditaan vain kolmannen osapuolen ohjelmistoille, joten jos olet muokkaamassa järjestelmäsovelluksia, jotka asennetaan kopioimalla /system/app/-hakemistoon, sinun ei tarvitse allekirjoittaa niitä.

Lataa sen jälkeen paketti älypuhelimeesi, asenna se ja käynnistä se. Voila, mainos on poissa! Sen sijaan ilmestyi viesti, että meillä ei ole Internetiä tai meillä ei ole tarvittavia käyttöoikeuksia. Teoriassa tämä saattaa riittää, mutta viesti näyttää ärsyttävältä, ja rehellisesti sanottuna meillä kävi tuuri tyhmän sovelluksen kanssa. Normaalisti kirjoitettu ohjelmisto todennäköisesti selventää valtuustietojaan tai tarkistaa Internet-yhteyden ja muuten vain kieltäytyy käynnistymästä. Kuinka olla tässä tapauksessa? Tietysti muokkaa koodia.

Tyypillisesti sovellusten tekijät luovat erityisluokkia mainosten näyttämistä varten ja näiden luokkien kutsumenetelmiä, kun sovellus tai jokin sen "toimintoista" (yksinkertaisesti sanottuna sovellusnäytöt) käynnistetään. Yritetään löytää nämä luokat. Siirrymme smali-hakemistoon, sitten com (org sisältää vain avoimen grafiikkakirjaston cocos2d), sitten kauf (tässä se on, koska tämä on kehittäjän nimi ja kaikki hänen koodinsa on siellä) - ja tässä se on, markkinointihakemistosta. Sisältä löydämme joukon tiedostoja smali-tunnisteella. Nämä ovat luokkia, joista merkittävin on Ad.smali-luokka, jonka nimestä on helppo arvata, että se on se, joka näyttää mainoksia.

Voisimme muuttaa sen toiminnan logiikkaa, mutta olisi paljon helpompaa yksinkertaisesti poistaa kutsut mihin tahansa sen menetelmään itse sovelluksesta. Siksi poistumme markkinointihakemistosta ja siirrymme viereiseen hiukkashakemistoon ja sitten virtualtorchiin. Erityistä huomiota MainActivity.smali-tiedosto ansaitsee tämän. Tämä on tavallinen Android-luokka, joka on luotu Android SDK:lla ja asennettu sovelluksen sisääntulopisteeksi (analogisesti C:n päätoiminnon kanssa). Avaa tiedosto muokkausta varten.

Sisällä on smali-koodi (paikallinen kokoaja). Se on varsin hämmentävä ja vaikealukuinen matalan tason luonteensa vuoksi, joten emme tutki sitä, vaan yksinkertaisesti etsimme koodista kaikki viittaukset Mainosluokkaan ja kommentoimme niitä. Kirjoitamme rivin "Mainos" hakuun ja pääsemme riville 25:

Kentän yksityinen mainos:Lcom/kauf/marketing/Ad;

Täällä luodaan mainoskenttä mainosluokan objektin tallentamiseksi. Kommentoimme asettamalla ###-merkin rivin eteen. Jatkamme etsintää. Rivi 423:

Uusi instanssi v3, Lcom/kauf/marketing/Ad;

Tässä kohteen luominen tapahtuu. Kommentoidaan. Jatkamme hakua ja etsimme riveiltä 433, 435, 466, 468, 738, 740, 800 ja 802 kutsuja Ad-luokan menetelmiin. Kommentoidaan. Näyttää siltä, ​​että se on siinä. Tallentaa. Nyt paketti on koottava uudelleen ja tarkistettava toimivuuden ja mainonnan varalta. Kokeen puhtauden vuoksi palautamme AndroidManifest.xml-tiedostosta poistetun rivin, kokoamme paketin, allekirjoitamme ja asennamme.

Meidän marsumme. Mainokset näkyvät

Oho! Mainos katosi vain sovelluksen ollessa käynnissä, mutta jäi päävalikkoon, jonka näemme ohjelmiston käynnistäessä. Joten, odota, mutta aloituspiste on MainActivity-luokka ja mainos katosi sovelluksen ollessa käynnissä, mutta jäi päävalikkoon, joten aloituspiste on erilainen? Tunnista todellinen aloituspiste avaamalla AndroidManifest.xml-tiedosto uudelleen. Ja kyllä, se sisältää seuraavat rivit:

Ne kertovat meille (ja mikä tärkeintä, Androidille), että aloitus-niminen toiminto tulisi käynnistää vastauksena intent-tapahtuman (tapahtuman) luomiseen android.intent.action.MAIN luokasta android.intent.category.LAUNCHER. Tämä tapahtuma luodaan, kun napautat sovelluskuvaketta käynnistysohjelmassa, joten se määrittää aloituskohdan, nimittäin aloitusluokan. Todennäköisesti ohjelmoija kirjoitti ensin sovelluksen ilman päävalikkoa, jonka sisääntulopisteenä oli tavallinen MainActivity-luokka, ja lisäsi sitten uuden ikkunan (toiminto), joka sisälsi valikon ja kuvasi aloitusluokassa, ja teki siitä manuaalisesti merkinnän. kohta.

Avaa Start.smali-tiedosto ja etsi uudelleen rivi "Ad", riveillä 153 ja 155 mainitaan FirstAd-luokka. Se on myös lähdekoodissa, ja nimestä päätellen se vastaa mainosten näyttämisestä päänäytöllä. Katsotaanpa lisää, siellä on FirstAd-luokan esiintymän luominen ja tarkoitus, joka kontekstin mukaan liittyy tähän ilmentymään, ja sitten cond_10-tunniste, johon ehdollinen siirtyminen suoritetaan täsmälleen ennen ilmentymän luomista luokasta:

If-ne p1, v0, :cond_10 .line 74 uusi esiintymä v0, Landroid/content/Intent; ... :cond_10

Todennäköisesti ohjelma jotenkin satunnaisesti laskee, pitäisikö mainoksia näyttää päänäytöllä, ja jos ei, hyppää suoraan kohtaan cond_10. Ok, yksinkertaistetaan hänen tehtäväänsä ja korvataan ehdollinen siirtymä ehdottomalla:

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

Koodissa ei enää mainita FirstAdista, joten suljemme tiedoston ja kokoamme virtuaalisen taskulamppumme uudelleen apktoolilla. Kopioi se älypuhelimeesi, asenna se ja käynnistä se. Voila, kaikki mainonta on kadonnut, mistä onnittelemme meitä kaikkia.

Tulokset

Tämä artikkeli on vain lyhyt johdatus Android-sovellusten hakkerointi- ja muokkaamismenetelmiin. Monet ongelmat jäivät kulissien taakse, kuten suojauksen poistaminen, hämärän koodin jäsentäminen, sovellusresurssien kääntäminen ja korvaaminen sekä Android NDK:lla kirjoitettujen sovellusten muokkaaminen. Perustiedolla on kuitenkin vain ajan kysymys selvittää se kaikki.

Viimeksi päivitetty: 30.10.2015

Kun sovellus on luotu, testattu ja virheenkorjattu, voimme aloittaa sen julkaisemisen. Julkaisun ydin on luoda tiedosto tunnisteella .apk, joka edustaa sovellusta ja sen myöhempää sijoittamista Google Play Marketiin tai muille ulkoisille sivustoille. Oletusarvoisesti apk-tiedosto on jo luotu virheenkorjauksen ja sovelluksen luomisen aikana, ja löydämme sen polun varrelta projektikansiosta Projektin_nimi\app\build\outputs\apk. Oletuksena tiedostoa kutsutaan app-debug.apk ja esittelee virheenkorjausversion.

Tämä tiedosto ei kuitenkaan välttämättä riitä koko julkaisuun. Ja meidän on vielä tehtävä hieman lisävalmisteluja projektista julkaisua varten. Tätä varten sinun tulee määrittää elementin luettelotiedostossa attribuutit android:versionCode ja android:versionName on asetettu. Myös luettelotiedostossa elementti ei saa sisältää android:debuggable-attribuuttia

Lisäksi tässä vaiheessa voit asettaa sovellukselle kuvakkeen, joka näkyy gadgetin työnäytöllä, sovelluksen nimen (elementin android:label-attribuutti) ja voit myös asettaa lisenssisopimuksen.

Luettelotiedoston tulee myös määrittää paketin nimi (elementin pakettiattribuutti ), jota käytetään myöhemmin sovelluksessa. Oletusarvoisesti sovelluspaketit alkavat Android Studiossa kehitettäessä com.example. Älä jätä tätä nimeä, koska paketin nimi toimii sovelluksesi yksilöllisenä tunnisteena. Esimerkiksi alla minun tapauksessani paketin nimi on "com.maverics.eugene.telephonelist":

Lisäksi, jos Java-kooditiedostoissa tiedoston alussa olevan paketin nimen tulee myös vastata sovelluspakettia.

Vaatimusten asettaminen

Esijulkaisuvaiheessa voit myös asettaa API-vaatimuksia. Esimerkiksi sovelluksessamme on tietty vähimmäisversio Android-käyttöjärjestelmästä, joten voimme määrittää luettelotiedoston elementille sopivat attribuutit.

    android:minSdkVersion - vähintään Android-versio

    android:targetSdkVersion - optimaalinen API-versio

    android:maxSdkVersion - suurin järjestelmäversio

Olkoon Jelly Beansin vähimmäisversio esimerkiksi 4.1.2 ja KitKatin optimaalinen versio 4.4.4:

//.............................

Hakemuksen allekirjoitus

Kun kaikki on valmis, Android-sovellus tulee allekirjoittaa varmenteella, jonka avulla sovelluksen tekijä voidaan tunnistaa. Kun testaamme sovellusta asentamalla sen Android Studion kautta laitteelle, se allekirjoitetaan automaattisesti. Mutta julkaisuversion luomiseksi meidän on suoritettava useita lisätoimintoja.

Varmennetta luotaessa tulee muistaa, että sovellusta päivitettäessä järjestelmä vertaa vanhan ja uuden version varmenteita. Ja päivitys tapahtuu, jos molempien versioiden varmenteet vastaavat. Mutta jos uusi versio allekirjoitetaan uudella varmenteella, sovellus katsotaan täysin uudeksi, ei liity vanhaan versioon ja edustaa täysin eri sovellusta. Tässä tapauksessa, jotta se voidaan asentaa, uudella versiolla on oltava eri paketin nimi kuin vanhalla.

Valitse ensin Android Studiossa valikosta Build -> Generate Signed APK. Tämän jälkeen ohjattu toimintoikkuna avautuu:

Napsauta Luo uusi... -painiketta. Tämän jälkeen avaimen luontiikkuna avautuu:

Kirjoita Avaimen säilytyspolku -kenttään polku luotavaan verkkovarmennetiedostoon. Jos määritettyä kansiota ei ole olemassa, se on luotava tai olemassa oleva kansio on määritettävä.

Kirjoita salasana Salasana/Vahvista-kenttään.

Alias-kentässä osoitamme aliaksen. Voit antaa mukautetun nimen.

Kirjoita Etu- ja sukunimi -kenttään etu- ja sukunimesi. Ja sitten kirjoitamme divisioonan, organisaation, kaupungin, maan ja maakoodin.

Napsauta lopuksi OK.

Tämän jälkeen ensimmäinen ikkuna päivittyy automaattisesti:

Viimeinen ikkuna näyttää meille polun hakemistoon, jossa allekirjoitettu apk-sovellus sijaitsee julkaisuversiossa. Napsauta Valmis.

Nyt määritetyltä polulta löydät allekirjoitetun apk:n, jolla on nimi app-release.apk:

Voimme nimetä tiedoston uudelleen säilyttäen sen laajennuksen ja ladata sen Play Marketiin tai mille tahansa verkkosivustolle tai ladata sen heti mobiililaitteeseen. Kun olet ladannut puhelimeesi/tablettiisi, napsauta sitä ja sovellus asennetaan tavallisella paketin asennusohjelmalla. Tässä meidän on kuitenkin myös otettava huomioon, että jos asennamme sovelluksen muualta kuin Play Marketista, niin asetuksissa meidän on sallittava asennus muista lähteistä - Suojaus-> Tuntemattomat lähteet (Salli sovellusten asennus muista lähteistä)

Edellisessä osassa kuvattu Keytool-apuohjelma luo digitaalisen varmenteen, joka on yksi jarsigner-työkalun parametreista. Toinen parametri on Android-paketti, joka on allekirjoitettava. Luodaksesi Android-paketin sinun on käytettävä Export Unsigned Application Package -apuohjelmaa Eclipsen ADT-moduulista. Kutsuaksesi tätä apuohjelmaa, sinun on napsautettava hiiren kakkospainikkeella Android-projektia Eclipsessä, valittava pikavalikosta Android-työkalut ja sitten Vie allekirjoittamaton sovelluspaketti -vaihtoehto. Kun tämä apuohjelma on käynnistetty, se luo .apk-tiedoston, jota ei ole allekirjoitettu virheenkorjausvarmenteella.

Kokeile tätä ajamalla Export Unsigned Application Package -apuohjelmaa jossakin Android-projektistasi ja tallenna luotu .apk-tiedosto jonnekin. Tässä esimerkissä käytämme aiemmin luotua avainsäilökansiota ja luomme .apk-tiedoston nimeltä C:\android\release\myappraw.apk.

Nyt meillä on .apk-tiedosto ja avainsäilön kohde, voimme suorittaa jarsigner-työkalun allekirjoittamaan .apk-tiedoston (katso 14.2). Tässä tapauksessa avainsäilötiedostolle ja .apk-tiedostolle on määritettävä täydelliset polut.

.apk-tiedoston allekirjoittamista varten jarsigner-apuohjelma välittää avainsäilön sijainnin, avainsäilön salasanan, salaisen avaimen salasanan, polun .apk-tiedostoon ja avainsäilökohteen aliaksen. Jarsigner allekirjoittaa sitten .apk-tiedoston käyttämällä avainsäilön alkion digitaalista sertifikaattia. Jos haluat suorittaa jarsigner-apuohjelman, sinun on joko avattava työkaluikkuna (katso luku 2) tai avattava komentokehote-ikkuna tai pääteikkuna ja avattava hakemiston bin-kansio.

JDK (jos tätä kansiota ei ole määritetty PATH-ympäristömuuttujassa). Turvallisuussyistä on parasta olla välittämättä salasanoja komentoargumentteina, jolloin jarsigner pyytää sinua antamaan salasanat ajon aikana. Kuvassa Kuvassa 14.3 on esimerkki jarsigner-apuohjelman kutsumisesta. Olet ehkä huomannut, että kuvassa. 14.3 jarsigner-apuohjelma pyytää vain yhtä salasanaa. Tämä johtuu siitä, että avainsalausta ei kysytä, jos kaupan salasana ja avainsalasana ovat samat. Tarkkaan ottaen jarsigner-komennon e 14.2:ssa tarvitsee vain määrittää -keypass-salasana, kun se on eri kuin -storepass-salasana.

Kuten aiemmin mainittiin, Android vaatii sovelluksesi digitaalista allekirjoitusta, jotta haittaohjelmat eivät korvaa sovellustasi omalla versiollaan. Tätä varten Android vaatii, että sovelluspäivitykset on allekirjoitettava samalla allekirjoituksella kuin alkuperäinen sovellus. Jos sovellus on allekirjoitettu eri allekirjoituksella, Android pitää niitä eri sovelluksina. Siksi muistutamme vielä kerran: käsittele avainsäilötiedostoa huolellisesti, jotta se on käytettävissäsi myöhemmin, kun sinun on julkaistava sovelluspäivitys.

Olet siis työskennellyt monta päivää (ja ehkä jopa öitä), ja nyt ensimmäinen hybridimobiilisovelluksesi on valmis. Se on melko vakaa, suurin osa kriittisistä virheistä on suljettu. Pieniä on jäljellä, mutta kun muistat, että perfektionismi on pahasta, teet vahvan tahdon päätöksen julkaista sovellus.

Tämän edellytyksenä on allekirjoitetun APK-tiedoston olemassaolo. Tässä artikkelissa opit allekirjoittamaan apk-tiedoston.

Pieni retriitti

Kun lemmikkiprojektini lähestyi julkaisua, aloin etsiä tietoa siitä, kuinka nopeasti ja kivuttomasti julkaista sovellus. Monet löydetyistä ohjeista näyttivät yksinkertaisilta. Ohjeet valitsin Ionic-kehyksen tekijöiltä, ​​joiden pohjalta sovellus kehitettiin. Kaikki ei toiminut ensimmäisellä kerralla, sillä on useita erityispiirteitä. Allekirjoitusprosessi kuvataan tässä artikkelissa, ja tärkeitä kohtia on korostettu.

Alkutiedot

Oletan, että sinulla on kaikki valmiina kehittämään hybridimobiilisovelluksia Apache Cordovan avulla. On asennettava:
  • Apache Cordova
  • Java-kehityspaketti
  • Android SDK -työkalut
Projektin ja sovelluksen nimi on lcf. Korvaa tarvittaessa projektisi nimellä.

Mennä

Ensin sinun on luotava sovelluksesi julkaisuversio. Mutta ennen sitä varmistetaan, että kaikki tarpeettomat laajennukset on poistettu. Emme esimerkiksi tarvitse laajennusta, joka lähettää virheenkorjaustiedot konsoliin. Poistetaan se:

$ cordova plugin rm cordova-plugin-console
Luo julkaisuversio Androidille käyttämällä komentoa rakentaa lipun kanssa --vapauta:

$ cordova build -- julkaisu Android
Tämä komento luo allekirjoittamaton APK-tiedosto hakemistossa:

Alustat/android/build/outputs/apk
Esimerkiksi platforms/android/build/outputs/apk/ android-release-unsigned.apk. Sitten meidän on allekirjoitettava tämä tiedosto ja suoritettava apuohjelma zipalign optimoidaksesi ja valmistellaksesi tiedoston Google Playta varten.

Tiedoston allekirjoittamiseen tarvitaan varmenne. Luodaan se apuohjelman avulla näppäintyökalu joka sisältyy JDK:han:

$ keytool -genkey -v -keystore lcf.keystore -alias lcf -keyalg RSA -keysize 2048 -validity 10000
Tärkeä

Parametrin -alias arvo on muistettava tai vielä parempi kirjoittaa ylös. Yllä olevassa esimerkissä se on yhtä kuin lcf (perustuu sovelluksen nimen Kanta-asiakas ilmainen ensimmäisiin kirjaimiin). En anna täällä yksityiskohtia, jos olet kiinnostunut, kirjoita kommentteihin, kerron sinulle tarkemmin.

Aliasta käytetään aina, kun allekirjoitat * sovellukset. Käytä avainsäilötiedoston nimeä aliaksena, jotta se on helpompi muistaa, esimerkiksi:


-avainkauppa hello-world.keystore -alias hello-world -avainkauppa weather-app.keystore -alias sääsovellus -avainkauppa todo.keystore -alias todo
* Sinun on allekirjoitettava hakemus aina, kun päivityksiä julkaistaan

Apuohjelma näppäintyökalu kysyy sarjan kysymyksiä. Niitä tulee yhteensä 8. Saadaksesi käsityksen kysymyksistä ja likimääräisistä vastauksista etukäteen, ne on kaikki alla, spoilerin alla.

Avaintyökalukysymykset ja esimerkkivastaukset niihin

1. Anna avainsäilön salasana:
Täällä sinun on syötettävä tiedoston salasana (vähintään 6 merkkiä). Syötetty salasana on kirjoitettava muistiin turvalliseen paikkaan, sitä tarvitaan aina hakemuksen allekirjoittamisen yhteydessä.

2. Kirjoita uusi salasana uudelleen:
Kirjoita salasanasi uudelleen.

3. Mikä on etu- ja sukunimesi?
: Ivan Petrov
Etu- ja sukunimesi. Hakasulkeissa oleva arvo on oletusarvo.

4. Mikä on organisaatioyksikkösi nimi?
: SE
Yrityksesi divisioonan nimi. Voit jättää sen tyhjäksi, ilmoitan IT.

5. Mikä on organisaatiosi nimi?
: 2 kehittäjää
Organisaatiosi nimi. Ilmoita jos saatavilla.

6. Mikä on kaupunkisi tai paikkakuntasi nimi?
: Moskova
Kaupungin nimi

7. Mikä on osavaltiosi tai maakuntasi nimi?
: M.O.
Alueen nimi

8. Mikä on tämän laitteen kaksikirjaiminen maakoodi?
: RU
Maan koodi. Osoitan RU:ta.

: y

Vahvista, onko kaikki oikein, tai paina Enter päästäksesi uudelleen.


Lopuksi ilmestyy viesti, joka ilmaisee onnistuneen avaimen luomisen. Sinua pyydetään asettamaan salasana yksityiselle avaimelle (jos haluat jättää sen samaksi kuin varmenteessa, paina Enter):

Luodaan 2 048-bittinen RSA-avainpari ja itseallekirjoitettu varmenne (SHA256withRSA), jonka voimassaoloaika on 10 000 päivää: CN=Ivan Petrov, OU=IT, O=2kehittäjät, L=Moskova, ST=MO, C=RU Anna avain salasana (PALAA, jos sama kuin avainsäilön salasana):
Nykyiseen hakemistoon luodaan tiedosto lcf.keystore.

Tärkeä

Luotu tiedosto on tallennettava turvalliseen paikkaan. Jos käytät yksityistä arkistoa, tiedosto voidaan sitoa yhdessä sovelluksen lähdekoodin kanssa. Yleensä on parempi säilyttää varmenteet erikseen. Jos kadotat varmenteen, et voi myöntää sovelluspäivityksiä.

Jäljellä on kaksi vaihetta, ja sinulla on APK-tiedosto valmiina jakeluun. Jatketaan allekirjoittamiseen.

Allekirjoita apk-tiedosto käyttämällä apuohjelmaa jarsigner, joka sisältyy myös JDK:han.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -avainkauppa lcf.keystore android-release-unsigned.apk lcf
Varmenteen nimi näkyy parametrin jälkeen - avainsäilö, alias - tiedostonimen jälkeen.

Lopuksi apk-tiedoston optimoimiseksi käytämme apuohjelmaa zipalign:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
Viimeinen parametri on sen tiedoston nimi, jonka lataat Google Playhin.

Tärkeä.

Apuohjelma zipalign se on osa Android SDK Toolsia ja löytyy täältä:

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

Johtopäätös

Sinulla on nyt jakeluvalmis apk-tiedosto, joka voidaan ladata Google Playhin. Täytä kuvaus, määritä hakemuksesi luokitus ja napsauta "Julkaise".

Koska googletin kysymyksen itse" kuinka allekirjoittaa apk-tiedosto?", tiedän, että todella toimivien ja täysin ymmärrettävien ohjeiden löytäminen ei ole niin helppoa. Siksi päätin kirjoittaa itse materiaalia siitä, kuinka ohjelma tai peli allekirjoitetaan oikein Androidilla.

Kuten nyt tiedämme, ilman digitaalista allekirjoitusta luomuksesi ei pääse markkinoille, ja tämä on jo vakavaa. Olen huomannut, että monet nuoret Android-kehittäjät, niin sanotusti aloittelijat unohtavat allekirjoittaa hakemuksensa ja yrittää tehdä sille jotain myöhemmin, ja se ihmettelee, miksi he eivät pysty suorittamaan tätä tai toista toimintoa APK-tiedostollaan.

Joten älkäämme raahaako jaloistamme ja aloita heti siitä, kuinka voit allekirjoittaa APK-tiedostosi ja mitä sinun tarvitsee käyttää halutun tuloksen saavuttamiseksi.

Tämä menetelmä on oikein kaikista luetelluista, joten kuvaamme sen tässä materiaalissa. Valmistamme omat avaimemme omilla tiedoillamme ja varmenteillamme ja käytämme niitä luomasi sovelluksen allekirjoittamiseen.

Toimiaksemme tarvitsemme: OpenSSL ja SignApk.

Luodaan ensin varmenne ja allekirjoitusavain. Asenna OpenSSL. Asennuksen aikana asennusohjelma kehottaa kopioimaan komponentit Windows-kansio, valitse Bin-kansio, johon asennat kaikki OpenSSL:t.

Nyt auki nimellä Järjestelmänvalvoja(tämä on erittäin tärkeää!) komentoriviltä. Siirry sitten kohtaan komentorivi bin-kansioon, joka sijaitsee kansiossa, johon asensit OpenSSL:n (esim. C:\OpenSSL\Bin\ tai C:\Ohjelmatiedostot\OpenSSL\Bin\). Jos et tiedä, vaihtaminen toiseen kansioon tehdään komennolla CD. Eli mennäkseen haluttu kansio sinun pitäisi suorittaa seuraava komento:

cd C:\OpenSSL\Bin\

Kun olet Bin-kansiossa, voit jatkaa suoraan varmenteen ja avaimen luomiseen.

Vaihe 1(Luomme 1024 bitin pituisen avaimen)

Suorita komento:

openssl genrsa -out key.pem 1024

Vaihe 2(Luomme varmennepyynnön avaimen perusteella)

Suorita komento:

openssl req -new -key key.pem -out request.pem

Tässä vaiheessa sinun on syötettävä tietosi, jotka tunnistavat sinut varmenteessa.

Vaihe 3 (Luomme yksityisen avaimen varmenteesta)

Suorita komento:

openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem

Vaihe 4(Luomme julkisen avaimen)

Suorita komento:

openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

Tässä vaiheessa pelien ja sovellusten allekirjoittamiseen tarvittavien tiedostojen luominen on valmis. Luodun avaimen ja varmenteen avulla voit allekirjoittaa Androidilla niin monta peliä ja sovellusta kuin haluat.

Aloitetaan nyt hakemuksen allekirjoittaminen. Pura yllä olevasta linkistä ladattu SingApk-arkisto. Siirrä 2 tiedostoa Bin-kansiosta, johon loimme varmenteen ja avaimen: todistus.pem Ja key.pk8 kansioon, josta purit SingApkin. Windowsin pitäisi näyttää tiedoston korvaamisvalintaikkuna - vaihda.

Nyt voit allekirjoittaa apk-tiedoston ainutlaatuisella digitaalinen allekirjoitus, jonka teit itse, vedä apk-tiedosto hiirellä siihen sign_APK.bat. Jotta et vedä tiedostoa ikkunasta toiseen (tämä ei ole kätevää), siirrä apk-tiedosto kansioon SingApkin avulla. Suorituksen jälkeen tiedosto tulee näkyviin kansioon, jossa on SingApk apk_signed.apk, joka on allekirjoittamasi sovelluksesi tai pelisi.