Kako odpreti APK in kako urediti? Uporaba apktool Program za razstavljanje in sestavljanje apk datoteke

Včasih nekatere aplikacije v Androidu uporabniku na nek način ne ustrezajo. Primer je vsiljivo oglaševanje. In zgodi se tudi, da je program dober za vse, vendar je prevod v njem bodisi ukrivljen ali popolnoma odsoten. Ali pa je na primer program preizkusna različica, vendar ni mogoče dobiti polne različice. Kako spremeniti situacijo?

Uvod

V tem članku bomo govorili o tem, kako razstaviti paket APK z aplikacijo, pogledati njegovo notranjo strukturo, razstaviti in dekompilirati bajtno kodo ter poskusiti narediti več sprememb v aplikacijah, ki nam lahko prinesejo eno ali drugo korist.

Če želite vse to narediti sami, boste potrebovali vsaj osnovno znanje jezika Java, v katerem so napisane aplikacije za Android, in jezika XML, ki se v Androidu uporablja povsod – od opisa same aplikacije in njenih dostopnih pravic do shranjevanja nizov, ki bo prikazano na zaslonu. Potrebovali boste tudi sposobnost uporabe specializirane programske opreme konzole.

Torej, kaj je paket APK, v katerem je distribuirana absolutno vsa programska oprema za Android?

Dekompilacija aplikacije

V tem članku smo delali samo z razstavljeno kodo aplikacije, če pa se v velikih aplikacijah izvedejo resnejše spremembe, bo razumevanje kode smali veliko težje. Na srečo lahko kodo dex dekompiliramo v kodo Java, ki je, čeprav ni originalna in ne prevedena nazaj, veliko lažja za branje in razumevanje logike aplikacije. Za to bomo potrebovali dve orodji:

  • dex2jar je prevajalnik bajtne kode Dalvik v bajtno kodo JVM, na podlagi katere lahko pridobimo kodo v jeziku Java;
  • jd-gui je sam dekompilator, ki vam omogoča, da iz bajtne kode JVM dobite berljivo kodo Java. Kot alternativo lahko uporabite Jad (www.varaneckas.com/jad); Čeprav je precej star, v nekaterih primerih ustvari bolj berljivo kodo kot Jd-gui.

Tako jih je treba uporabljati. Najprej zaženemo dex2jar in kot argument navedemo pot do paketa apk:

% dex2jar.sh mail.apk

Posledično se bo paket Java mail.jar pojavil v trenutnem imeniku, ki ga je že mogoče odpreti v jd-gui za ogled kode Java.

Ureditev APK paketov in prevzem le-teh

Paket aplikacij za Android je v bistvu običajna datoteka ZIP, ki ne potrebuje posebnih orodij za ogled vsebine ali ekstrahiranje. Dovolj je imeti arhivar - 7zip za Windows ali konzolni razpak na Linuxu. Ampak to je glede ovoja. Kaj je notri? Na splošno imamo v notranjosti naslednjo strukturo:

  • META-INF/- vsebuje digitalno potrdilo aplikacije, ki identificira njenega ustvarjalca, in kontrolne vsote paketnih datotek;
  • res/ - različni viri, ki jih aplikacija uporablja pri svojem delu, kot so slike, deklarativni opis vmesnika in drugi podatki;
  • AndroidManifest.xml- opis aplikacije. To vključuje na primer seznam zahtevanih dovoljenj, zahtevano različico Androida in zahtevano ločljivost zaslona;
  • razredi.dex- prevedena bajtna koda aplikacije za virtualni stroj Dalvik;
  • viri.arsc- tudi viri, vendar drugačne vrste - zlasti nizi (da, to datoteko je mogoče uporabiti za rusifikacijo!).

Navedene datoteke in imeniki so, če ne v vseh, potem morda v veliki večini APK-jev. Vendar pa obstaja še nekaj manj pogostih datotek/imenikov, ki jih je vredno omeniti:

  • sredstev- analog virov. Glavna razlika je v tem, da morate za dostop do vira poznati njegov identifikator, vendar je seznam sredstev mogoče dobiti dinamično z uporabo metode AssetManager.list() v kodi aplikacije;
  • lib- izvorne knjižnice Linuxa, napisane z NDK (Native Development Kit).

Ta imenik uporabljajo proizvajalci iger, ki vanj postavljajo svoje motorje iger, napisane v C/C++, pa tudi ustvarjalci visoko zmogljivih aplikacij (na primer Google Chrome). Ugotovili smo napravo. Kako pa dobite paketno datoteko aplikacije, ki vas zanima? Ker datotek APK ni mogoče prevzeti iz naprave brez korena (nahajajo se v imeniku /data/app) in ni vedno priporočljivo koreniti, obstajajo vsaj trije načini za prenos datoteke aplikacije v vaš računalnik:

  • Razširitev APK Downloader za Chrome;
  • Aplikacija Real APK Leecher;
  • razna gostovanja datotek in Varežniki.

Katerega uporabiti, je stvar okusa; raje uporabljamo ločene aplikacije, zato bomo opisali uporabo Real APK Leecher, še posebej, ker je napisan v Javi in ​​bo posledično deloval v Windows ali Nix.

Po zagonu programa morate izpolniti tri polja: E-pošta, Geslo in ID naprave - in izbrati jezik. Prvi dve sta e-pošta in geslo vašega Google računa, ki ga uporabljate v napravi. Tretji je identifikator naprave in ga lahko dobite tako, da vtipkate kodo na klicalnik # #8255## in nato iskanje vrstice ID naprave. Pri izpolnjevanju morate vnesti samo ID brez predpone android-.

Po izpolnjevanju in shranjevanju se pogosto pojavi sporočilo »Napaka pri povezovanju s strežnikom«. Nima nobene zveze z Google Play, zato ga lahko prezrete in poiščete pakete, ki vas zanimajo.

Ogled in spreminjanje

Recimo, da ste našli paket, ki vas zanima, ga prenesli, razpakirali ... in ko ste si poskušali ogledati datoteko XML, ste presenečeni ugotovili, da datoteka ni besedilna. Kako ga dekompilirati in kako na splošno delati s paketi? Ali je res potrebno namestiti SDK? Ne, SDK sploh ni treba namestiti. Pravzaprav vsi koraki za ekstrahiranje, spreminjanje in pakiranje paketov APK zahtevajo naslednja orodja:

  • ZIP arhivator za razpakiranje in pakiranje;
  • mali- sestavljalnik/razstavljalnik bajtne kode virtualnega stroja Dalvik (code.google.com/p/smali);
  • aapt- orodje za pakiranje virov (privzeto so viri shranjeni v binarni obliki za optimizacijo delovanja aplikacije). Vključeno v Android SDK, vendar ga je mogoče dobiti ločeno;
  • podpisnik- orodje za digitalno podpisovanje spremenjenega paketa (bit.ly/Rmrv4M).

Vsa ta orodja lahko uporabljate ločeno, vendar je to neprijetno, zato je bolje uporabiti programsko opremo višje ravni, zgrajeno na njihovi osnovi. Če delate v sistemu Linux ali Mac OS X, obstaja orodje, imenovano apktool. Omogoča vam, da razpakirate vire v njihovi izvirni obliki (vključno z binarnimi datotekami XML in arsc), ponovno zgradite paket s spremenjenimi viri, vendar ne ve, kako podpisati pakete, zato boste morali pripomoček za podpisovanje zagnati ročno. Kljub dejstvu, da je pripomoček napisan v Javi, je njegova namestitev precej nestandardna. Najprej morate pridobiti samo datoteko jar:

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

Če delate v sistemu Windows, potem obstaja odlično orodje za to, imenovano Virtuous Ten Studio, ki prav tako akumulira vsa ta orodja (vključno s samim apktool), vendar namesto vmesnika CLI uporabniku ponuja intuitiven grafični vmesnik, s katerim lahko izvedite operacije za razpakiranje, razstavljanje in dekompilacijo v nekaj klikih. To orodje je Donation-ware, kar pomeni, da se včasih pojavijo okna, ki zahtevajo pridobitev licence, vendar se na koncu to lahko dopušča. Nima smisla ga opisovati, saj lahko vmesnik razumete v nekaj minutah. Toda apktool je zaradi svoje konzolne narave treba obravnavati podrobneje.


Oglejmo si možnosti apktool. Na kratko, obstajajo trije osnovni ukazi: d (decode), b (build) in if (install framework). Če je s prvima dvema ukazoma vse jasno, kaj potem naredi tretji, pogojni stavek? Razpakira podano ogrodje uporabniškega vmesnika, kar je potrebno v primerih, ko razčlenite kateri koli sistemski paket.

Oglejmo si najbolj zanimive možnosti prvega ukaza:

  • -s- ne razstavljajte datotek dex;
  • -r- ne razpakirajte virov;
  • -b- ne vstavljajte informacij o odpravljanju napak v rezultate razstavljanja datoteke dex;
  • --frame-path- uporabite navedeni okvir uporabniškega vmesnika namesto tistega, ki je vgrajen v apktool. Zdaj pa si poglejmo nekaj možnosti za ukaz b:
  • -f- prisilna montaža brez preverjanja sprememb;
  • -a- navedite pot do aapt (orodje za gradnjo arhiva APK), če ga iz nekega razloga želite uporabiti iz drugega vira.

Uporaba apktool-a je zelo enostavna; samo navedite enega od ukazov in pot do APK-ja, na primer:

$ apktool d mail.apk

Po tem se bodo vse ekstrahirane in razstavljene datoteke paketa pojavile v poštnem imeniku.

Priprava. Onemogočanje oglaševanja

Teorija je seveda dobra, a zakaj je sploh potrebna, če ne vemo, kaj bi z nerazpakiranim paketom? Poskusimo teorijo uporabiti sebi v prid, in sicer spremenimo neko programsko opremo, da nam ne bo prikazovala oglasov. Na primer, naj bo Virtual Torch - virtualna bakla. Ta programska oprema je idealna za nas, saj je do konca napolnjena z nadležnim oglaševanjem in je poleg tega dovolj preprosta, da se ne izgubimo v džungli kode.


Torej, z uporabo enega od zgornjih načinov, prenesite aplikacijo s trga. Če se odločite za uporabo Virtuous Ten Studio, preprosto odprite datoteko APK v aplikaciji in jo razpakirajte, ustvarite projekt (Datoteka -> Nov projekt), nato izberite Uvozi datoteko v kontekstnem meniju projekta. Če je vaša izbira padla na apktool, potem samo zaženite en ukaz:

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

Po tem se bo v imeniku com.kauf.particle.virtualtorch pojavilo podobno drevo datotek, kot je opisano v prejšnjem razdelku, vendar z dodatnim imenikom smali namesto datotek dex in datoteke apktool.yml. Prvi vsebuje razstavljeno kodo izvršljive datoteke dex aplikacije, drugi vsebuje storitvene informacije, ki jih apktool potrebuje za ponovno sestavljanje paketa.

Prvo mesto, ki ga moramo pogledati, je seveda AndroidManifest.xml. In tukaj takoj naletimo na naslednjo vrstico:

Ni težko uganiti, da je odgovoren za podeljevanje dovoljenj aplikaciji za uporabo internetne povezave. Pravzaprav, če se le želimo znebiti oglaševanja, bomo najverjetneje morali samo blokirati aplikacijo iz interneta. Poskusimo to narediti. Izbrišemo navedeno vrstico in poskusimo zgraditi programsko opremo z apktool:

$ apktool b com.kauf.particle.virtualtorch

Nastala datoteka APK bo prikazana v imeniku com.kauf.particle.virtualtorch/build/. Ne bo pa ga mogoče namestiti, ker nima digitalnega podpisa in kontrolnih vsot datotek (preprosto nima imenika META-INF/). Paket moramo podpisati s pripomočkom apk-signer. Lansirano. Vmesnik je sestavljen iz dveh zavihkov – na prvem (Key Generator) ustvarjamo ključe, na drugem (APK Signer) pa podpisujemo. Če želite ustvariti naš zasebni ključ, izpolnite naslednja polja:

  • Ciljna datoteka- izhodna datoteka shrambe ključev; običajno hrani en par ključev;
  • Geslo in Potrdi- geslo za shranjevanje;
  • vzdevek- naziv ključa v hrambi;
  • Vzdevek gesla in Potrdi- geslo s tajnim ključem;
  • Veljavnost- rok veljavnosti (v letih). Privzeta vrednost je optimalna.

Preostala polja so na splošno neobvezna - vendar morate vsaj eno izpolniti.


OPOZORILO

Če želite podpisati aplikacijo z apk-signerjem, morate namestiti Android SDK in v nastavitvah aplikacije določiti celotno pot do njega.

Vse informacije so zgolj informativne narave. Niti urednik niti avtor ne odgovarjata za morebitno škodo, povzročeno z gradivi tega članka.

Zdaj lahko podpišete APK s tem ključem. Na zavihku Podpisnik APK izberite novo ustvarjeno datoteko, vnesite geslo, vzdevek ključa in geslo, nato poiščite datoteko APK in pogumno kliknite gumb »Podpiši«. Če bo vse v redu, bo paket podpisan.

INFO

Ker smo paket podpisali z lastnim ključem, bo le-ta v konfliktu z izvirno aplikacijo, kar pomeni, da bomo ob poskusu posodobitve programske opreme prek marketa prejeli napako.

Digitalni podpis je potreben samo za programsko opremo tretjih oseb, tako da, če spreminjate sistemske aplikacije, ki so nameščene tako, da jih kopirate v imenik /system/app/, vam jih ni treba podpisati.

Po tem prenesite paket na svoj pametni telefon, ga namestite in zaženite. Voila, oglasa ni več! Namesto tega pa se je pojavilo sporočilo, da nimamo interneta oziroma nimamo ustreznih dovoljenj. Teoretično bi bilo to morda dovolj, vendar je sporočilo videti moteče in, če sem iskren, smo imeli srečo z neumno aplikacijo. Običajno napisana programska oprema bo najverjetneje razjasnila svoje poverilnice ali preverila internetno povezavo in drugače preprosto zavrnila zagon. Kako biti v tem primeru? Seveda uredite kodo.

Običajno avtorji aplikacij ustvarijo posebne razrede za prikazovanje oglasov in klicne metode teh razredov, ko se aplikacija ali ena od njenih "aktivnosti" (preprosto povedano, zasloni aplikacije) zažene. Poskusimo najti te razrede. Gremo v imenik smali, nato com (org vsebuje samo odprto grafično knjižnico cocos2d), nato kauf (tukaj je, ker je to ime razvijalca in tam je vsa njegova koda) - in tukaj je, marketinški imenik. V notranjosti najdemo kopico datotek s končnico smali. To so razredi, najbolj opazen med njimi je razred Ad.smali, iz imena katerega je zlahka razbrati, da je tisti, ki prikazuje oglaševanje.

Lahko bi spremenili logiko njegovega delovanja, vendar bi bilo veliko lažje preprosto odstraniti klice katere koli njegove metode iz same aplikacije. Zato zapustimo marketinški imenik in gremo v sosednji imenik delcev in nato v virtualtorch. Tu si posebno pozornost zasluži datoteka MainActivity.smali. To je standardni razred Android, ki ga ustvari Android SDK in namesti kot vstopno točko v aplikacijo (analogno glavni funkciji v C). Odprite datoteko za urejanje.

V notranjosti je smali koda (lokalni asembler). Je precej zmeden in težko berljiv zaradi svoje narave na nizki ravni, zato ga ne bomo preučevali, ampak bomo preprosto poiskali vse sklice na razred Ad v kodi in jih komentirali. V iskanje vnesemo vrstico »Oglas« in pridemo do vrstice 25:

Polje zasebni oglas:Lcom/kauf/marketing/Oglas;

Tukaj je ustvarjeno oglasno polje za shranjevanje objekta razreda oglasa. Komentiramo tako, da pred vrstico postavimo znak ###. Nadaljujemo z iskanjem. Vrstica 423:

Nov primerek v3, Lcom/kauf/marketing/Ad;

Tu pride do ustvarjanja objekta. Komentirajmo. Nadaljujemo z iskanjem in v vrsticah 433, 435, 466, 468, 738, 740, 800 in 802 najdemo klice metod razreda Ad. Komentirajmo. Videti je, da je to to. Varčujmo. Zdaj je treba paket sestaviti nazaj in preveriti funkcionalnost in prisotnost oglaševanja. Za čistost eksperimenta vrnemo vrstico, odstranjeno iz AndroidManifest.xml, sestavimo paket, ga podpišemo in namestimo.

Naš poskusni zajček. Oglaševanje vidno

Ups! Oglaševanje je izginilo le med delovanjem aplikacije, ostalo pa je v glavnem meniju, ki ga vidimo, ko zaženemo program. Torej, počakaj, ampak vstopna točka je razred MainActivity in oglas je med delovanjem aplikacije izginil, vendar je ostal v glavnem meniju, torej je vstopna točka drugačna? Če želite prepoznati pravo vstopno točko, znova odprite datoteko AndroidManifest.xml. In ja, vsebuje naslednje vrstice:

Povedo nam (in, kar je še pomembneje, androidu), da je treba aktivnost z imenom Start zagnati kot odgovor na generiranje namena (dogodka) android.intent.action.MAIN iz kategorije android.intent.category.LAUNCHER. Ta dogodek se ustvari, ko tapnete ikono aplikacije v zaganjalniku, tako da določi vstopno točko, in sicer razred Start. Najverjetneje je programer najprej napisal aplikacijo brez glavnega menija, katere vstopna točka je bil standardni razred MainActivity, nato pa je dodal novo okno (aktivnost), ki vsebuje meni in je opisano v razredu Start, in ga ročno naredil vnos točka.

Odprite datoteko Start.smali in znova poiščite vrstico »Ad«, v vrsticah 153 in 155 najdemo omembo razreda FirstAd. Je tudi v izvorni kodi in je, sodeč po imenu, odgovoren za prikazovanje oglasov na glavnem zaslonu. Poglejmo naprej, obstaja ustvarjanje primerka razreda FirstAd in namere, ki je glede na kontekst povezana s tem primerkom, nato pa oznaka cond_10, pogojni prehod na katerega se izvede tik pred ustvarjanjem primerka razreda:

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

Najverjetneje program nekako naključno izračuna, ali naj bo oglas prikazan na glavnem zaslonu, in če ne, skoči neposredno na cond_10. Ok, poenostavimo njeno nalogo in zamenjajmo pogojni prehod z brezpogojnim:

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

V kodi ni več omemb FirstAd-a, zato zapremo datoteko in ponovno sestavimo našo virtualno svetilko z orodjem apktool. Kopirajte ga na svoj pametni telefon, namestite, zaženite. Voila, vsa reklama je izginila, za kar vsem čestitamo.

Rezultati

Ta članek je le kratek uvod v metode hekanja in spreminjanja aplikacij za Android. Številne težave so ostale v zakulisju, kot so odstranjevanje zaščite, razčlenjevanje zakrite kode, prevajanje in zamenjava aplikacijskih virov ter spreminjanje aplikacij, napisanih z uporabo Android NDK. Vendar pa je z osnovnim znanjem le vprašanje časa, da vse ugotovite.

Iz tega članka boste izvedeli, iz česa je sestavljena aplikacija za Android, kako odpreti datoteko APK in s katerimi programi.

Kaj je datoteka APK?

APK je format operacijskega sistema Android, ki se uporablja za arhivirane izvršljive aplikacijske datoteke, ime same datoteke pa je lahko poljubno, končnica pa naj izgleda samo tako.apk. Analogi APK v drugih operacijskih sistemih so .msi v sistemu Windows, .sis v sistemu Symbian, .rpm ali .deb v sistemu Linux.

Poglejmo, kaj je notri
Pravzaprav je .apk arhiv ZIP, tako da si lahko notranjo napravo ogledate s katerim koli upraviteljem datotek ali arhivarjem, na primer WinRAR ali mobilno aplikacijo X-plore.




Ne pozabite, da imate le vizualni dostop do notranjih virov; možnosti urejanja so zelo omejene.

Poglejmo strukturo
Znotraj .apk vidimo številne datoteke in mape, poglejmo, čemu so namenjene:

  • AndroidManifest.xml je nekakšen "potni list" aplikacije, iz katerega lahko izveste vse glavne točke, zahteve, različico, dovoljenja itd.
  • META-INF ta datoteka vsebuje metapodatke, to je podatke o podatkih, kontrolne vsote, poti do podatkov, poti in kontrolne vsote virov, potrdila. To datoteko lahko odprete s katerim koli urejevalnikom besedil, vendar je priporočljivo uporabljati Notepad++.
  • Mapa res vsebuje vse programske vire, grafiko, kot so ikone, slike, besedilo in elemente grafičnega vmesnika. Do mape lahko tudi enostavno dostopate.
  • classes.dex je neposredna aplikacijska programska koda, ki jo izvaja navidezni stroj Dalvik VM; lahko vidite, kaj je v tej datoteki samo z dekompilacijo .apk, o tem bomo govorili v drugih člankih. resources.arsc - prevedena datoteka XML, ta datoteka vsebuje podatke o vseh virih, vključenih v program.
  • lib - mapa z izvornimi knjižnicami, katerih viri so dostopni le z uporabo specializiranih programov. Tudi v APK-ju so lahko datoteke in mape, kot so com, org, udk, vendar ne vedno.

Zdaj pa si podrobneje oglejmo notranjo strukturo; za to potrebujemo program za dekompilacijo, Javo in datoteko APK. Glavno orodje za razstavljanje .apk je Apktool, vendar ta program deluje samo iz vrstice, kar ni zelo priročno. Za hitrejše in bolj priročno razčlenjevanje lahko uporabite APKing, to je še vedno isti Apktool, vendar z možnostjo dela iz kontekstnega menija.


In tako namestimo APKing kot vsako aplikacijo za Windows in, ko izberemo .apk, kliknemo nanj z desnim gumbom miške in hkrati Shift, nato pa bomo videli naslednje:



In izberite zahtevano dejanje, na primer popolnoma dekompiliraj, nato bo program dokončal operacijo in ustvaril mapo z istim imenom.



Z odpiranjem mape bomo imeli dostop do vseh virov datoteke APK.



Zdaj je mogoče urejati vse besedilne datoteke, ob upoštevanju osnovnih pravil pa lahko uporabite priljubljen program Notepad++, na primer upoštevajte AndroidManifest.xml

Omenil sem aplikacijo SmartAPKTool. Lahko ekstrahira, stisne in podpiše spremenjene apk datoteke. Njegova prednost je prisotnost grafičnega vmesnika. Vendar pa obstaja tudi resna pomanjkljivost. SmartAPKTool že dolgo ni bil posodobljen in program ne razpakira in pakira pravilno aplikacij za najnovejše različice Androida. Zato bom tukaj poskušal razložiti, kako uporabljati aplikacijo za te namene apktool.

Opomba 1.
Program SmartAPKTool je še vedno priročen za uporabo za podpisovanje zbranih apk datotek.
Opomba 2.
Povezave do programov, omenjenih v članku, so ↓

Program apktool nima grafičnega vmesnika. To je slabost za tiste, ki niso vajeni dela z ukazno vrstico. Obstaja pa tudi plus: za razliko od SmartAPKTool bomo videli vse napake, kar pomeni, da bomo vedeli, kaj popraviti.

Prenesimo dva arhiva: enega skupnega za vse sisteme, drugega za naš sistem (v primeru Windows):

Razpakirajmo oba arhiva v isto prazno mapo (v našem primeru C:\apktool\). Njegova vsebina bi morala izgledati takole:

Od zdaj naprej lahko uporabljamo program apktool.

Opomba 3.
Uporabniki 64-bitnih različic Linuxa bodo morali namestiti paket ia32-libs:

sudo apt-get namestite ia32-libs

V isto mapo postavimo datoteko, ki jo moramo razpakirati. Na primer, naj se imenuje orig.apk
Pritisnite in držite tipko Shift ter z desno miškino tipko kliknite kateri koli prazen prostor v mapi (ne kliknite na datoteke!). Po tem izberite »Odpri ukazno okno«. V konzolo, ki se prikaže, vnesite:

apktool dekodira orig.apk

Datoteka bo razpakirana:

Zdaj imamo mapo z nepakirano aplikacijo v imeniku C:\apktool\. Imenuje se enako kot izvorna datoteka, brez pripone: C:\apktool\orig\ . Izvorne datoteke lahko spremenimo, kot je opisano v članku Android: kako namestiti dve enaki aplikaciji na en telefon. Ko bomo naredili spremembe, bomo zbrali kopijo aplikacije tako, da bomo zapakirali izvorne datoteke v apk:

apktool build original rezultat.apk

Tu je result.apk ime datoteke, ki smo si jo izmislili za gradnjo kopije. Če ni napak, bo datoteka sestavljena:

Ostalo je izven obsega članka:

  1. Če med montažo pride do napak, morate najti njihov vzrok in jih odpraviti.
  2. Vse kar ostane je, da podpišete nastalo datoteko result.apk. To lahko storite s programom SmartAPKTool, kot je navedeno zgoraj; Vse o njem je intuitivno. Obstajajo tudi drugi načini za podpis apk datoteke.
  3. Napake se lahko pojavijo tudi pri nameščanju kopije, med njenim zagonom ali delovanjem. Ujeti jih je treba s pomočjo pripomočka adb, vključenega v Android SDK.

Aplikacijo morate podpisati, sicer se ne bo namestila. Napake se ne pojavljajo tako pogosto, v članku pa so opisane najpogostejše težave, ki jih povzročajo

V procesu uporabe različnih vdelanih programov za naprave Android je včasih potrebno na tak ali drugačen način spremeniti sistemske aplikacije, vgrajene v operacijski sistem. V tem gradivu bomo to vprašanje podrobno obravnavali.

Seveda morate sistemsko datoteko APK razstaviti in znova sestaviti, da bo pravilno in stabilno delovala. Ugotovimo korak za korakom, kaj je treba storiti za to.

Najprej morate izvesti postopek deodeksiranja sistemskih datotek APK. Povedali vam bomo, kako to storiti v.

Torej je bila datoteka .apk deodeksirana in dekompilirana. Analizirajmo aplikacijo, ki nas zanima, naj ima ime, za jasnost primera, ogrodje- res. apk. V glavi si ga zapomnimo kot prvotno aplikacijo.

Recimo, da smo naredili vse potrebne spremembe v aplikaciji. Več o vseh vidikih datotek APK bomo govorili v. Zdaj ga morate zapakirati nazaj. Zapomnimo si končano pakirano aplikacijo v mislih kot spremenjeno aplikacijo 2.

Zdaj bomo razložili, zakaj si je bilo treba miselno zapomniti aplikacije kot izvirne in spremenjene 2. Aplikacija, ki jo je prevedel program ApkTool (ali z uporabo razširitve grafičnega uporabniškega vmesnika, kot je SmartApkTool), ne bo delovala, vendar to ni problem. Izvajamo naslednja dejanja:

Zbiranje takih datotek nazaj v APK je zelo preprosto. Če želite to narediti, morate zagnati apktool z ustrezno gradbeno zastavico in mu posredovati pot do mape z dekompilirano aplikacijo v njej. Na primer, če imamo mapo aplikacij, ki se nahaja v istem imeniku kot apktool, bi bil ukaz videti takole:

školjka

java -jar apktool.jar b app

java - jar apktool .jar b app

Po sestavljanju bo končana datoteka APK v imeniku aplikacija/gradnja. Nato morate podpisati APK. To se naredi za zagotovitev, da aplikacija deluje na napravah, kjer je odpravljanje napak prepovedano. To pomeni, da je zagon nepodpisanih aplikacij na takih napravah prepovedan. Več o digitalnih potrdilih in postopku podpisovanja datotek si lahko preberete tukaj.

Podpisovanje datoteke je zelo preprosto: za to obstaja poseben pripomoček, imenovan signapk. Zagnati ga je treba tako, da najprej posredujete potrdila kot argumente, nato pot do aplikacije in na koncu pot za podpisano aplikacijo (rezultat, kam ga shraniti). Videti je nekako takole:

školjka

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

java - jar signapk .jar testni ključ .x509 .pem testni ključ .pk8 * .apk apk_signed .apk

Kje se da dobiti takšno potrdilo, se sprašujete? Certifikate najdete na internetu. Ali pa ga ustvarite sami. Podrobna navodila za nastavitev in generiranje vseh potrebnih datotek lahko najdete, na primer, .

Zaključek

Kot lahko vidite, je dekompiliranje in sestavljanje APK datotek dokaj preprost postopek, ki ga je poleg tega mogoče avtomatizirati, kar raziskovalcu olajša delo. Tudi sam virtualni stroj Dalvik je enostaven za učenje in odpiranje, kar po eni strani zmanjšuje vstopne ovire za razvijalce, po drugi strani pa je glavni razlog za tako velik odstotek piratstva na platformi Android. To je deloma razlog, zakaj na primer razvijalci iger na splošno niso zainteresirani za izdajanje zanimivih iger z zapletom. Veliko bolj donosno je glede na trenutni odnos uporabnikov zakovičiti kmetije z donacijami, ki so si med seboj presenetljivo podobne. Zato kupujemo aplikacije, podpiramo razvijalce in posledično dobimo zanimivo vsebino. Ampak donirati ni treba!

Hvala vsem, se vidimo spet.