Kako otvoriti APK i kako urediti? Korištenje apktool-a Program za rastavljanje i sastavljanje apk datoteke

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

Paket Android aplikacije je u suštini obična ZIP datoteka koja ne zahtijeva nikakve posebne alate za pregled njenog sadržaja ili ekstrakciju. 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 Dalvik virtuelnu mašinu;
  • 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 koji tamo postavljaju svoje motore za igre napisane na C/C++, kao i kreatori aplikacija visokih performansi (na primjer, 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, onda postoji odličan alat za to pod nazivom Virtuous Ten Studio, koji također akumulira sve ove alate (uključujući sam apktool), ali umjesto CLI sučelja pruža korisniku intuitivno grafičko sučelje s kojim možete izvršite operacije za raspakivanje, rastavljanje i dekompajliranje 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, tako da ako mijenjate sistemske aplikacije koje su instalirane kopiranjem u direktorij /system/app/, onda ih ne morate 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. Normalno napisani softver će najvjerovatnije razjasniti svoje vjerodajnice ili provjeriti internetsku vezu i u suprotnom će jednostavno odbiti da se pokrene. 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 je programer 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.

Iz ovog članka ćete naučiti od čega se sastoji Android aplikacija, kako otvoriti APK datoteku i pomoću kojih programa.

Šta je APK fajl?

APK je format Android operativnog sistema koji se koristi za arhivirane izvršne datoteke aplikacije, a ime samog fajla može biti bilo koji, ali ekstenzija bi trebala izgledati samo ovako.apk. APK analogi u drugim operativnim sistemima su .msi u Windows-u, .sis u Symbian-u, .rpm ili .deb u Linuxu.

Hajde da vidimo šta je unutra
U stvari, .apk je ZIP arhiva, tako da možete pogledati interni uređaj koristeći bilo koji upravitelj datoteka ili arhivator, na primjer WinRAR ili mobilnu aplikaciju X-plore.




Vrijedi zapamtiti da imate samo vizualni pristup internim resursima; mogućnosti uređivanja su izuzetno ograničene.

Pogledajmo strukturu
Unutar .apk-a vidimo brojne datoteke i mape, hajde da saznamo čemu služe:

  • AndroidManifest.xml je vrsta "pasoša" aplikacije iz koje možete saznati sve glavne točke, zahtjeve, verziju, dozvole itd.
  • META-INF ovaj fajl sadrži metapodatke, odnosno podatke o podacima, kontrolne sume, putanje do podataka, putanje i kontrolne sume resursa, sertifikate. Ovu datoteku možete otvoriti bilo kojim uređivačem teksta, ali je preporučljivo koristiti Notepad++.
  • Fascikla res sadrži sve resurse programa, grafiku, kao što su ikone, slike, tekst i elementi grafičkog interfejsa. Takođe možete lako pristupiti fascikli.
  • classes.dex je direktni programski kod aplikacije koji izvršava Dalvik VM virtualna mašina; možete vidjeti što se nalazi unutar ove datoteke samo dekompilacijom .apk-a, o tome ćemo govoriti u drugim člancima. resources.arsc - kompajlirana XML datoteka, ova datoteka sadrži podatke o svim resursima uključenim u program.
  • lib - fascikla sa izvornim bibliotekama, čijim se resursima može pristupiti samo korišćenjem specijalizovanih programa. APK također može sadržavati datoteke i mape kao što su com, org, udk, ali ne uvijek.

Sada pogledajmo detaljnije unutrašnju strukturu; za to nam je potreban program za dekompilaciju, Java i APK fajl. Glavni alat za rastavljanje .apk-a je Apktool, ali ovaj program radi samo sa linije, što nije baš zgodno. Za bržu i praktičniju analizu možete koristiti APKing, ovo je i dalje isti Apktool, ali sa mogućnošću rada iz kontekstnog menija.


I tako instaliramo APKing kao bilo koju aplikaciju za Windows i, nakon odabira .apk, kliknemo na njega desnom tipkom miša i Shift istovremeno, nakon čega ćemo vidjeti sljedeće:



I odaberite potrebnu radnju, na primjer, potpuno dekompilirajte, tada će program dovršiti operaciju i stvoriti mapu s istim imenom.



Otvaranjem foldera imat ćemo pristup svim resursima APK datoteke.



Sada se sve tekstualne datoteke mogu uređivati, uz pridržavanje osnovnih pravila, možete koristiti popularni program Notepad++, na primjer, uzmite u obzir AndroidManifest.xml

Spomenuo sam aplikaciju SmartAPKTool. Može izdvojiti, zipovati i potpisati modificirane apk datoteke. Njegova prednost je prisustvo grafičkog interfejsa. Međutim, postoji i ozbiljan nedostatak. SmartAPKTool dugo nije ažuriran, a program ne raspakuje i ne pakuje pravilno aplikacije za najnovije verzije Androida. Stoga ću ovdje pokušati objasniti kako koristiti aplikaciju u ove svrhe apktool.

Napomena 1.
Program SmartAPKTool je i dalje zgodan za korištenje za potpisivanje prikupljenih apk datoteka.
Napomena 2.
Veze ka programima pomenutim u članku su ↓

Program apktool nema grafički interfejs. Ovo je nedostatak za one koji nisu navikli raditi sa komandnom linijom. Ali postoji i plus: za razliku od SmartAPKTool-a, videćemo sve greške, što znači da ćemo znati šta da popravimo.

Skinimo dvije arhive: jednu zajedničku za sve sisteme, drugu za naš sistem (Windows u primjeru):

Otpakirajmo obje arhive u isti prazan folder (u našem primjeru C:\apktool\). Njegov sadržaj bi trebao izgledati ovako:

Od sada možemo koristiti program apktool.

Napomena 3.
Korisnici 64-bitnih verzija Linuxa morat će instalirati ia32-libs paket:

sudo apt-get install ia32-libs

U isti folder stavljamo fajl koji treba da raspakujemo. Na primjer, neka se zove orig.apk
Pritisnite i držite taster Shift i kliknite desnim tasterom miša na bilo koji prazan prostor u fascikli (nemojte klikati na fajlove!). Nakon toga odaberite "Otvori komandni prozor". U konzoli koja se pojavi upišite:

apktool decode orig.apk

Fajl će biti raspakovan:

Sada imamo fasciklu sa raspakovanom aplikacijom u direktorijumu C:\apktool\. Zove se isto kao i izvorni fajl, bez ekstenzije: C:\apktool\orig\. Izvorne datoteke možemo promijeniti kako je opisano u članku Android: kako instalirati dvije identične aplikacije na jedan telefon. Nakon što izvršimo promjene, prikupit ćemo kopiju aplikacije pakovanjem izvornih datoteka u apk:

apktool build orig result.apk

Ovdje result.apk je naziv datoteke koji smo smislili za izradu kopije. Ako nema grešaka, datoteka će biti sastavljena:

Ostalo je izvan okvira članka:

  1. Ako dođe do grešaka tokom montaže, potrebno je pronaći njihov uzrok i ispraviti ih.
  2. Ostaje samo da potpišete rezultirajuću datoteku result.apk. Ovo se može uraditi koristeći SmartAPKTool kao što je gore navedeno; Sve u vezi s tim je intuitivno. Postoje i drugi načini za potpisivanje apk datoteke.
  3. Do grešaka može doći i prilikom instaliranja kopije, tokom njenog pokretanja ili rada. Treba ih uhvatiti pomoću adb uslužnog programa uključenog u Android SDK.

Morate potpisati aplikaciju, inače se neće instalirati. Greške se ne događaju tako često, a najčešći problemi koji ih uzrokuju opisani su u članku

U procesu korištenja različitih firmvera za Android uređaje, ponekad je potrebno promijeniti na ovaj ili onaj način sistemske aplikacije ugrađene u operativni sistem. U ovom materijalu detaljno ćemo razmotriti ovo pitanje.

Naravno, morate rastaviti i ponovo sastaviti sistemsku APK datoteku tako da radi ispravno i stabilno. Hajde da shvatimo korak po korak šta je potrebno učiniti za ovo.

Prvo morate izvršiti proces dedeksiranja sistemskih APK datoteka. Reći ćemo vam kako to da uradite u.

Dakle, .apk fajl je dedeksiran i dekompiliran. Hajde da analiziramo aplikaciju koja nas zanima, neka ima naziv, radi jasnoće primjera, okvir- res. apk. Pamtimo ga u našim glavama kao originalnu aplikaciju.

Recimo da smo izvršili sve potrebne izmjene u aplikaciji. Razgovaraćemo više o svim aspektima APK fajlova. Sada ga morate spakovati nazad. Prisjetimo se gotove upakovane aplikacije u našim mislima kao modificirane aplikacije 2.

Sada ćemo objasniti zašto je bilo potrebno mentalno zapamtiti aplikacije kao originalne i modificirane 2. Aplikacija koju kompajlira program ApkTool (ili korištenjem ekstenzije grafičkog korisničkog interfejsa kao što je SmartApkTool) neće raditi, ali to nije problem. Vršimo sljedeće radnje:

Prikupljanje takvih datoteka nazad u APK je prilično jednostavno. Da biste to učinili, trebate pokrenuti apktool s odgovarajućom zastavicom za izgradnju i proslijediti joj putanju do mape u kojoj se nalazi dekompilirana aplikacija. Na primjer, ako imamo mapu aplikacije koja se nalazi u istom direktoriju kao apktool, tada bi naredba izgledala ovako:

Shell

java -jar apktool.jar b app

java - jar apktool .jar b aplikacija

Nakon sastavljanja, gotova APK datoteka će se nalaziti u direktoriju app/build. Zatim morate potpisati APK. Ovo se radi kako bi se osiguralo da aplikacija radi na uređajima na kojima je otklanjanje grešaka zabranjeno. Odnosno, zabranjeno je pokretanje nepotpisanih aplikacija na takvim uređajima. Više o digitalnim certifikatima i proceduri potpisivanja datoteka možete pročitati ovdje.

Potpisivanje datoteke je vrlo jednostavno: za to postoji poseban uslužni program koji se zove signapk. Mora se pokrenuti tako što se prvo prosljeđuju certifikati kao argumenti, zatim putanja do aplikacije i na kraju putanja za potpisanu aplikaciju (rezultat, gdje ga sačuvati). To izgleda otprilike ovako:

Shell

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

Gdje se može dobiti takav certifikat, pitate se? Sertifikati se mogu naći na internetu. Ili ga sami generirajte. Detaljna uputstva o postavljanju i generisanju svih potrebnih datoteka možete pronaći, na primjer, .

Zaključak

Kao što vidite, dekompajliranje i sastavljanje APK datoteka je prilično jednostavan proces, koji se, osim toga, može automatizirati, što istraživaču olakšava rad. Sama virtuelna mašina Dalvik je takođe laka za učenje i otvaranje, što, s jedne strane, smanjuje barijeru za ulazak programera, s druge strane je glavni razlog tako velikog procenta piraterije na Android platformi. To je dijelom razlog zašto programeri igara, na primjer, općenito nisu zainteresirani za objavljivanje zanimljivih igara sa zapletom. Mnogo je isplativije, s obzirom na sadašnji stav korisnika, zakivati ​​farme donacijama koje su međusobno upadljivo slične. Stoga kupujemo aplikacije, podržavamo programere i kao rezultat dobivamo zanimljiv sadržaj. Ali apsolutno nema potrebe za doniranjem!

Hvala svima, vidimo se opet.