Kuinka avata APK ja kuinka muokata? apktoolin käyttäminen Ohjelma apk-tiedoston purkamiseen ja kokoamiseen

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 täysversiota ei voi saada. 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.

Tehdäksesi kaiken tämän itse tarvitset vähintään perustiedot Java-kielestä, jolla Android-sovellukset kirjoitetaan, ja XML-kielestä, jota käytetään kaikkialla Androidissa - itse sovelluksen ja sen käyttöoikeuksien kuvaamisesta merkkijonojen tallentamiseen. tulee näkyviin näytölle. 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 purkuohjelma, 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

Android-sovelluspaketti on pohjimmiltaan tavallinen ZIP-tiedosto, joka ei vaadi erityisiä työkaluja sen sisällön katseluun tai purkamiseen. 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, vaaditun Android-version ja vaaditun näytön resoluution;
  • classes.dex- käännetty sovellustavukoodi Dalvik-virtuaalikoneelle;
  • 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 tuottajat, jotka sijoittavat sinne C/C++-kielellä kirjoitetut pelimoottorinsa, sekä tehokkaiden sovellusten (esim. Google Chrome) luojat. 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 Playn kanssa, 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 APK-tiedosto sovelluksessa ja pura se, luo projekti (Tiedosto -> Uusi projekti) ja valitse sitten projektin kontekstivalikosta 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 on 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 muokkaat asennettuja järjestelmäsovelluksia kopioimalla ne /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. MainActivity.smali-tiedosto ansaitsee tässä erityistä huomiota. 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.

Tästä artikkelista opit, mistä Android-sovellus koostuu, kuinka APK-tiedosto avataan ja millä ohjelmilla.

Mikä on APK-tiedosto?

APK on Android-käyttöjärjestelmän muoto, jota käytetään arkistoiduille suoritettaville sovellustiedostoille, ja itse tiedoston nimi voi olla mikä tahansa, mutta laajennuksen tulee näyttää vain tältä.apk. APK-analogit muissa käyttöjärjestelmissä ovat .msi Windowsissa, .sis Symbianissa, .rpm tai .deb Linuxissa.

Katsotaan mitä sisällä on
Itse asiassa .apk on ZIP-arkisto, joten voit tarkastella sisäistä laitetta millä tahansa tiedostonhallinnalla tai arkistointilaitteella, esimerkiksi WinRARilla tai X-plore-mobiilisovelluksella.




On syytä muistaa, että saat vain visuaalisen pääsyn sisäisiin resursseihin; muokkausmahdollisuudet ovat erittäin rajalliset.

Katsotaanpa rakennetta
.apk-tiedoston sisällä näemme useita tiedostoja ja kansioita, katsotaanpa, mitä varten ne ovat:

  • AndroidManifest.xml on eräänlainen sovelluksen "passi", josta saat selville kaikki pääkohdat, vaatimukset, version, luvat jne.
  • META-INF Tämä tiedosto sisältää metatietoja, eli tietoja tiedoista, tarkistussummia, polkuja tietoihin, resurssien polkuja ja tarkistussummia, varmenteita. Voit avata tämän tiedoston millä tahansa tekstieditorilla, mutta on suositeltavaa käyttää Notepad++:aa.
  • Res-kansio sisältää kaikki ohjelmaresurssit, grafiikan, kuten kuvakkeet, kuvat, tekstin ja graafisen käyttöliittymän elementit. Pääset myös helposti kansioon.
  • classes.dex on Dalvik VM -virtuaalikoneen suorittama suora sovellusohjelmakoodi; näet tämän tiedoston sisällön vain purkamalla .apk-tiedoston. Puhumme tästä muissa artikkeleissa. resources.arsc - käännetty XML-tiedosto, tämä tiedosto sisältää tiedot kaikista ohjelmaan liittyvistä resursseista.
  • lib - kansio, jossa on alkuperäisiä kirjastoja, joiden resursseja voi käyttää vain erikoisohjelmia käytettäessä. APK voi sisältää myös tiedostoja ja kansioita, kuten com, org, udk, mutta ei aina.

Katsotaanpa nyt sisäistä rakennetta tarkemmin; tätä varten tarvitsemme purkuohjelman, Java- ja APK-tiedoston. Päätyökalu .apk:n purkamiseen on Apktool, mutta tämä ohjelma toimii vain riviltä, ​​mikä ei ole kovin kätevää. Nopeampaa ja kätevämpää analysointia varten voit käyttää APKingia, tämä on edelleen sama Apktool, mutta sillä on mahdollisuus työskennellä kontekstivalikosta.


Ja niin asennamme APKingin kuten minkä tahansa Windows-sovelluksen ja kun olet valinnut .apk:n, napsauta sitä hiiren oikealla painikkeella ja Shift samanaikaisesti, minkä jälkeen näemme seuraavan:



Ja valitse tarvittava toiminto, esimerkiksi pura kokonaan, sitten ohjelma suorittaa toiminnon ja luo samannimisen kansion.



Avaamalla kansion meillä on pääsy kaikkiin APK-tiedoston resursseihin.



Nyt kaikkia tekstitiedostoja voidaan muokata, mutta perussääntöjä noudattaen voit käyttää suosittua Notepad++ -ohjelmaa, esimerkiksi AndroidManifest.xml

Mainitsin SmartAPKTool-sovelluksen. Se voi purkaa, pakata ja allekirjoittaa muokattuja apk-tiedostoja. Sen etuna on graafisen käyttöliittymän läsnäolo. Siinä on kuitenkin myös vakava haittapuoli. SmartAPKToola ei ole päivitetty pitkään aikaan, eikä ohjelma pura ja pakkaa Androidin uusimpien versioiden sovelluksia oikein. Siksi yritän tässä selittää, kuinka sovellusta käytetään näihin tarkoituksiin apktool.

Huomautus 1.
SmartAPKTool-ohjelmaa on edelleen kätevä käyttää kerättyjen apk-tiedostojen allekirjoittamiseen.
Muistio 2.
Linkit artikkelissa mainittuihin ohjelmiin ovat ↓

Ohjelmoida apktool ei ole graafista käyttöliittymää. Tämä on haitta niille, jotka eivät ole tottuneet työskentelemään komentorivin kanssa. Mutta on myös plus: toisin kuin SmartAPKTool, näemme kaikki virheet, mikä tarkoittaa, että tiedämme mitä korjata.

Ladataan kaksi arkistoa: yksi yhteinen kaikille järjestelmille, toinen järjestelmällemme (esimerkissä Windows):

Puretaan molemmat arkistot samaan tyhjään kansioon (esimerkissämme C:\apktool\ ). Sen sisällön pitäisi näyttää tältä:

Tästä lähtien voimme käyttää ohjelmaa apktool.

Huomautus 3.
Linuxin 64-bittisten versioiden käyttäjien on asennettava ia32-libs-paketti:

sudo apt-get install ia32-libs

Laitamme samaan kansioon tiedoston, joka meidän on purettava. Oletetaan esimerkiksi orig.apk
Pidä Shift-näppäintä painettuna ja napsauta hiiren kakkospainikkeella mitä tahansa tyhjää kohtaa kansiossa (älä napsauta tiedostoja!). Valitse sen jälkeen "Avaa komentoikkuna". Kirjoita näkyviin tulevaan konsoliin:

apktool purkaa orig.apk

Tiedosto puretaan:

Nyt meillä on kansio, jossa on purettu sovellus C:\apktool\-hakemistossa. Sitä kutsutaan samalla nimellä kuin lähdetiedostoa, josta on vähennetty tunniste: C:\apktool\orig\ . Voimme muuttaa lähdetiedostoja artikkelissa Android kuvatulla tavalla: kuinka asentaa kaksi identtistä sovellusta yhteen puhelimeen. Kun olemme tehneet muutokset, keräämme kopion sovelluksesta pakkaamalla lähdetiedostot apk-tiedostoon:

apktool build orig result.apk

Tässä result.apk on tiedostonimi, jonka keksimme kopiointia varten. Jos virheitä ei ole, tiedosto kootaan:

Loput eivät kuulu artikkelin piiriin:

  1. Jos kokoonpanon aikana ilmenee virheitä, sinun on löydettävä niiden syy ja korjattava ne.
  2. Jäljelle jää vain allekirjoittaa tuloksena oleva result.apk-tiedosto. Tämä voidaan tehdä käyttämällä SmartAPKToola edellä mainitulla tavalla; Kaikki siinä on intuitiivista. On myös muita tapoja allekirjoittaa apk-tiedosto.
  3. Virheitä voi tapahtua myös kopiota asennettaessa, sen käynnistyksen tai käytön aikana. Ne on pyydettävä Android SDK:n adb-apuohjelmalla.

Sinun on allekirjoitettava sovellus, muuten se ei asennu. Virheitä ei esiinny niin usein, ja yleisimmät niitä aiheuttavat ongelmat kuvataan artikkelissa

Käytettäessä erilaisia ​​​​laiteohjelmistoja Android-laitteille, joskus on tarpeen muuttaa tavalla tai toisella käyttöjärjestelmään sisäänrakennettuja järjestelmäsovelluksia. Tässä materiaalissa tarkastelemme tätä asiaa yksityiskohtaisesti.

Luonnollisesti sinun on purettava ja koottava järjestelmän APK-tiedosto, jotta se toimii oikein ja vakaasti. Selvitetään askel askeleelta, mitä tälle on tehtävä.

Ensin sinun on suoritettava järjestelmän APK-tiedostojen deodeksointiprosessi. Kerromme sinulle, kuinka tämä tehdään.

Joten .apk-tiedosto deodeksoitiin ja käännettiin. Analysoidaan meitä kiinnostava sovellus, annetaan sille nimi selvyyden vuoksi, puitteet- res. apk. Muistamme sen päässämme alkuperäisenä sovelluksena.

Oletetaan, että olemme tehneet kaikki tarvittavat muutokset sovellukseen. Puhumme lisää kaikista APK-tiedostojen näkökohdista. Nyt sinun täytyy pakata se takaisin. Muistetaanpa valmis pakattu sovellus mielessämme modifioituna sovelluksena 2.

Nyt selitetään miksi sovellukset piti muistaa henkisesti alkuperäisinä ja muokattuina 2. ApkTool-ohjelman (tai graafisen käyttöliittymän laajennuksen, kuten SmartApkTool) avulla käännetty sovellus ei toimi, mutta tämä ei ole ongelma. Suoritamme seuraavat toimenpiteet:

Tällaisten tiedostojen kerääminen takaisin APK:ksi on melko yksinkertaista. Tätä varten sinun on suoritettava apktool sopivalla koontilipulla ja välitettävä polku kansioon, jonka sisällä on purettu sovellus. Jos meillä on esimerkiksi sovelluskansio, joka sijaitsee samassa hakemistossa kuin apktool, komento näyttää tältä:

Kuori

java -jar apktool.jar b -sovellus

java - jar apktool .jar b app

Kokoamisen jälkeen valmis APK-tiedosto sijaitsee hakemistossa sovellus/rakennus. Seuraavaksi sinun on allekirjoitettava APK. Tämä tehdään sen varmistamiseksi, että sovellus toimii laitteissa, joissa virheenkorjaus on kielletty. Eli allekirjoittamattomien sovellusten käynnistäminen tällaisissa laitteissa on kielletty. Voit lukea lisää digitaalisista varmenteista ja tiedostojen allekirjoitusmenettelystä täältä.

Tiedoston allekirjoittaminen on hyvin yksinkertaista: tätä varten on erityinen apuohjelma nimeltä signapk. Se on käynnistettävä antamalla ensin argumentteina varmenteet, sitten polku sovellukseen ja lopuksi allekirjoitetun sovelluksen polku (tulos, mihin se tallennetaan). Se näyttää jotakuinkin tältä:

Kuori

java -jar signapk.jar testkey.x509.pem testkey.pk8 *.apk apk_signed.apk

java - jar signapk .jar testkey .x509 .pem testkey .pk8 * .apk apk_signed .apk

Mistä sellaisen todistuksen saa, kysyt? Sertifikaatit löytyvät Internetistä. Tai luo se itse. Tarkat ohjeet kaikkien tarvittavien tiedostojen asettamiseen ja luomiseen löytyy esimerkiksi .

Johtopäätös

Kuten näette, APK-tiedostojen purkaminen ja kokoaminen on melko yksinkertainen prosessi, joka voidaan lisäksi automatisoida, mikä helpottaa tutkijan työtä. Itse Dalvik-virtuaalikone on myös helppo oppia ja avata, mikä toisaalta vähentää kehittäjien pääsyn esteitä, toisaalta on suurin syy niin suureen piratismin prosenttiosuuteen Android-alustalla. Osittain tästä syystä esimerkiksi pelien kehittäjät eivät yleensä ole kiinnostuneita julkaisemaan kiinnostavia pelejä, joissa on juoni. Käyttäjien nykyinen asenne huomioon ottaen on paljon kannattavampaa tehdä niittitiloilla lahjoituksia, jotka ovat hämmästyttävän samanlaisia. Siksi ostamme sovelluksia, tuemme kehittäjiä ja saamme sen seurauksena mielenkiintoista sisältöä. Mutta lahjoittaminen on turhaa!

Kiitos kaikille, nähdään taas.