Kā atvērt APK un kā rediģēt? Apktool izmantošana Programma apk faila izjaukšanai un salikšanai

Dažreiz dažas Android lietojumprogrammas lietotājam kaut kādā veidā nav piemērotas. Piemērs ir uzmācīga reklāma. Un gadās arī tā, ka programma ir laba visiem, bet tulkojums tajā ir vai nu greizs, vai vispār nav. Vai, piemēram, programma ir izmēģinājuma versija, bet nav iespējas iegūt pilno versiju. Kā mainīt situāciju?

Ievads

Šajā rakstā mēs runāsim par to, kā izjaukt APK pakotni ar lietojumprogrammu, apskatīt tās iekšējo struktūru, izjaukt un dekompilēt baitkodu, kā arī mēģināt veikt vairākas izmaiņas lietojumprogrammās, kas var sniegt mums vienu vai otru labumu.

Lai to visu izdarītu pats, jums būs nepieciešamas vismaz pamatzināšanas par Java valodu, kurā tiek rakstītas Android lietojumprogrammas, un XML valodu, kas tiek izmantota visur Android - no pašas lietojumprogrammas un tās piekļuves tiesību aprakstīšanas līdz virkņu glabāšanai tiks parādīts ekrānā. Jums būs nepieciešama arī iespēja izmantot specializētu konsoles programmatūru.

Tātad, kas ir APK pakotne, kurā tiek izplatīta pilnīgi visa Android programmatūra?

Lietojumprogrammu dekompilācija

Šajā rakstā mēs strādājām tikai ar izjauktu lietojumprogrammas kodu, taču, ja lielajās lietojumprogrammās tiks veiktas nopietnākas izmaiņas, smali koda izpratne būs daudz grūtāka. Par laimi, mēs varam dekompilēt dex kodu Java kodā, kas, lai arī nav oriģināls un nav kompilēts atpakaļ, ir daudz vieglāk lasāms un saprotams lietojumprogrammas loģiku. Lai to izdarītu, mums būs nepieciešami divi rīki:

  • dex2jar ir Dalvik baitkoda tulkotājs JVM baitkodā, uz kura pamata mēs varam iegūt kodu Java valodā;
  • jd-gui ir pats dekompilators, kas ļauj iegūt lasāmu Java kodu no JVM baitkoda. Kā alternatīvu varat izmantot Jad (www.varaneckas.com/jad); Lai gan tas ir diezgan vecs, dažos gadījumos tas ģenerē lasāmāku kodu nekā Jd-gui.

Šādi tie ir jāizmanto. Vispirms mēs palaižam dex2jar, kā argumentu norādot ceļu uz apk pakotni:

% dex2jar.sh mail.apk

Rezultātā Java pakotne mail.jar parādīsies pašreizējā direktorijā, kuru jau var atvērt jd-gui, lai skatītu Java kodu.

APK paku sakārtošana un saņemšana

Android lietotņu pakotne būtībā ir parasts ZIP fails, kuram nav nepieciešami īpaši rīki, lai skatītu tā saturu vai izvilktu to. Pietiek ar arhivētāju - 7zip priekš Windows vai konsoles unzip uz Linux. Bet tas ir par iesaiņojumu. Kas ir iekšā? Kopumā mums ir šāda struktūra:

  • META-INF/- satur lietojumprogrammas digitālo sertifikātu, kas identificē tās veidotāju, un pakotnes failu kontrolsummas;
  • res/ - dažādi resursi, ko aplikācija izmanto savā darbā, piemēram, attēli, interfeisa deklaratīvais apraksts, kā arī citi dati;
  • AndroidManifest.xml- pieteikuma apraksts. Tas ietver, piemēram, nepieciešamo atļauju sarakstu, nepieciešamo Android versiju un nepieciešamo ekrāna izšķirtspēju;
  • klases.dex- apkopots lietojumprogrammas baitkods Dalvik virtuālajai mašīnai;
  • resursi.arsc- arī resursi, bet cita veida - jo īpaši virknes (jā, šo failu var izmantot rusifikācijai!).

Sarakstā minētie faili un direktoriji ir, ja ne visos, tad, iespējams, lielākajā daļā APK. Tomēr ir vērts pieminēt vēl dažus ne tik izplatītus failus/direktorijus:

  • aktīviem- resursu analogs. Galvenā atšķirība ir tā, ka, lai piekļūtu resursam, ir jāzina tā identifikators, bet aktīvu sarakstu var iegūt dinamiski, lietojumprogrammas kodā izmantojot metodi AssetManager.list();
  • lib- vietējās Linux bibliotēkas, kas rakstītas, izmantojot NDK (Native Development Kit).

Šo direktoriju izmanto spēļu ražotāji, kas tur ievieto savus C/C++ valodā rakstītos spēļu dzinējus, kā arī augstas veiktspējas aplikāciju (piemēram, Google Chrome) veidotāji. Mēs izdomājām ierīci. Bet kā iegūt jūs interesējošās lietojumprogrammas pakotnes failu? Tā kā no ierīces nav iespējams paņemt APK failus bez saknes (tie atrodas /data/app direktorijā) un sakņu izveide ne vienmēr ir ieteicama, ir vismaz trīs veidi, kā iegūt lietojumprogrammas failu datorā:

  • APK Downloader paplašinājums pārlūkam Chrome;
  • Īsta APK Leecher lietotne;
  • dažādu failu mitināšana un Varezniks.

Kuru lietot, tas ir gaumes jautājums; mēs dodam priekšroku atsevišķu lietojumprogrammu izmantošanai, tāpēc mēs aprakstīsim Real APK Leecher lietošanu, jo īpaši tāpēc, ka tas ir rakstīts Java un attiecīgi darbosies vai nu Windows, vai Nix.

Pēc programmas palaišanas jums jāaizpilda trīs lauki: E-pasts, Parole un Ierīces ID - un jāizvēlas valoda. Pirmie divi ir jūsu Google konta e-pasts un parole, ko izmantojat ierīcē. Trešais ir ierīces identifikators, un to var iegūt, ierakstot kodu zvanītājā # #8255## un pēc tam atrodiet rindiņu Ierīces ID. Aizpildot, jāievada tikai ID bez android prefiksa.

Pēc aizpildīšanas un saglabāšanas bieži tiek parādīts ziņojums “Kļūda savienojuma laikā ar serveri”. Tam nav nekāda sakara ar Google Play, tāpēc droši ignorējiet to un meklējiet jūs interesējošās pakotnes.

Skatīt un modificēt

Pieņemsim, ka atradāt jūs interesējošo pakotni, lejupielādējāt to, izpakojāt... un, kad mēģinājāt apskatīt kādu XML failu, jūs pārsteigts atklājāt, ka fails nav teksts. Kā to dekompilēt un kā vispār strādāt ar pakotnēm? Vai tiešām ir nepieciešams instalēt SDK? Nē, SDK nav nepieciešams instalēt vispār. Faktiski visām APK pakotņu izvilkšanas, modificēšanas un pakotnes darbībām ir nepieciešami šādi rīki:

  • ZIP arhivētājs izsaiņošanai un iepakošanai;
  • smali- Dalvik virtuālās mašīnas baitu koda montētājs/demontētājs (code.google.com/p/smali);
  • aapt- rīks resursu iesaiņošanai (pēc noklusējuma resursi tiek glabāti binārā formā, lai optimizētu lietojumprogrammas veiktspēju). Iekļauts Android SDK, taču to var iegūt atsevišķi;
  • parakstītājs- rīks modificētas pakotnes digitālai parakstīšanai (bit.ly/Rmrv4M).

Jūs varat izmantot visus šos rīkus atsevišķi, taču tas ir neērti, tāpēc labāk ir izmantot augstāka līmeņa programmatūru, kas izveidota uz to pamata. Ja strādājat operētājsistēmā Linux vai Mac OS X, ir pieejams rīks apktool. Tas ļauj izpakot resursus to sākotnējā formā (ieskaitot bināros XML un arsc failus), pārbūvēt pakotni ar mainītiem resursiem, taču tas nezina, kā parakstīt pakotnes, tāpēc parakstītāja utilīta būs jāpalaiž manuāli. Neskatoties uz to, ka utilīta ir rakstīta Java valodā, tās instalēšana ir diezgan nestandarta. Vispirms jums jāiegūst pats jar fails:

$ 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 $ eksportēt PATH=~/bin:$PATH

Ja strādājat operētājsistēmā Windows, tad tam ir lielisks rīks Virtuous Ten Studio, kas arī uzkrāj visus šos rīkus (ieskaitot pašu apktool), taču CLI interfeisa vietā nodrošina lietotājam intuitīvu grafisko interfeisu, ar kuru jūs varat veikt izpakošanas, izjaukšanas un dekompilēšanas darbības ar dažiem klikšķiem. Šis rīks ir ziedošanas rīks, tas ir, dažreiz parādās logi, kas prasa iegūt licenci, taču galu galā to var pieļaut. Nav jēgas to aprakstīt, jo interfeisu var saprast dažu minūšu laikā. Bet apktool, ņemot vērā tā konsoles raksturu, ir jāapspriež sīkāk.


Apskatīsim apktool opcijas. Īsāk sakot, ir trīs pamata komandas: d (dekodēšana), b (build) un if (instalēt ietvaru). Ja ar pirmajām divām komandām viss ir skaidrs, tad ko dara trešais, nosacījuma paziņojums? Tas izpako norādīto lietotāja interfeisa ietvaru, kas ir nepieciešams gadījumos, kad tiek sadalīta jebkura sistēmas pakotne.

Apskatīsim interesantākās pirmās komandas iespējas:

  • -s- neizjauciet dex failus;
  • -r- neizpakot resursus;
  • -b- neievietojiet atkļūdošanas informāciju dex faila izjaukšanas rezultātos;
  • -- rāmja ceļš- izmantojiet norādīto UI ietvaru, nevis apktool iebūvēto. Tagad apskatīsim dažas komandas b iespējas:
  • -f- piespiedu montāža bez izmaiņu pārbaudes;
  • -a- norādiet ceļu uz aapt (rīks APK arhīva veidošanai), ja kāda iemesla dēļ vēlaties to izmantot no cita avota.

Apktool izmantošana ir ļoti vienkārša; lai to izdarītu, vienkārši norādiet vienu no komandām un ceļu uz APK, piemēram:

$ apktool d mail.apk

Pēc tam visi izvilktie un izjauktie pakotnes faili parādīsies pasta direktorijā.

Sagatavošana. Reklāmas atspējošana

Teorija, protams, ir laba, bet kāpēc tā ir vajadzīga, ja mēs nezinām, ko darīt ar neizpakoto iepakojumu? Mēģināsim pielietot teoriju savā labā, proti, modificēt kādu programmatūru tā, lai tā mums nerādītu reklāmu. Piemēram, lai tas būtu Virtual Torch - virtuālā lāpa. Šī programmatūra mums ir ideāli piemērota, jo tā ir līdz galam piepildīta ar kaitinošu reklāmu un turklāt ir pietiekami vienkārša, lai nepazustu koda džungļos.


Tātad, izmantojot kādu no iepriekš minētajām metodēm, lejupielādējiet lietojumprogrammu no tirgus. Ja izlemjat izmantot Virtuous Ten Studio, vienkārši atveriet lietojumprogrammā APK failu un izsaiņojiet to, izveidojiet projektu (Fails -> Jauns projekts), pēc tam projekta konteksta izvēlnē atlasiet Importēt failu. Ja jūsu izvēle bija apktool, vienkārši palaidiet vienu komandu:

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

Pēc tam direktorijā com.kauf.particle.virtualtorch parādīsies failu koks, kas līdzīgs iepriekšējā sadaļā aprakstītajam, bet ar papildu smali direktoriju dex failu un faila apktool.yml vietā. Pirmajā ir izjaukts lietojumprogrammas izpildāmā dex faila kods, otrajā ir pakalpojuma informācija, kas nepieciešama, lai apktool varētu salikt atpakaļ pakotni.

Pirmā vieta, kur mums vajadzētu meklēt, protams, ir AndroidManifest.xml. Un šeit mēs uzreiz saskaramies ar šādu rindu:

Nav grūti uzminēt, ka tā ir atbildīga par interneta pieslēguma lietošanas atļauju piešķiršanu lietojumprogrammai. Patiesībā, ja mēs vienkārši vēlamies atbrīvoties no reklāmas, mums, visticamāk, vajadzēs vienkārši bloķēt lietojumprogrammu no interneta. Mēģināsim to izdarīt. Mēs izdzēšam norādīto rindu un mēģinām izveidot programmatūru, izmantojot apktool:

$ apktool b com.kauf.particle.virtualtorch

Iegūtais APK fails parādīsies direktorijā com.kauf.particle.virtualtorch/build/. Tomēr to nevarēs instalēt, jo tam nav ciparparaksta un failu kontrolsummu (tam vienkārši nav META-INF/ direktorija). Mums ir jāparaksta pakotne, izmantojot utilītu apk-signer. Palaists. Interfeiss sastāv no divām cilnēm - pirmajā (Key Generator) mēs izveidojam atslēgas, otrajā (APK Signer) mēs parakstāmies. Lai izveidotu mūsu privāto atslēgu, aizpildiet šādus laukus:

  • Mērķa fails- atslēgu krātuves izvades fails; tas parasti glabā vienu atslēgu pāri;
  • Parole Un Apstiprināt- krātuves parole;
  • Alias- krātuvē esošās atslēgas nosaukums;
  • Alias ​​parole Un Apstiprināt- slepenās atslēgas parole;
  • Derīgums- derīguma termiņš (gados). Noklusējuma vērtība ir optimāla.

Pārējie lauki parasti nav obligāti, taču vismaz viens ir jāaizpilda.


BRĪDINĀJUMS

Lai parakstītu lietojumprogrammu, izmantojot apk-signer, jums ir jāinstalē Android SDK un lietojumprogrammas iestatījumos jānorāda pilns ceļš uz to.

Visa informācija tiek sniegta tikai informatīviem nolūkiem. Ne redaktori, ne autors nav atbildīgi par iespējamo kaitējumu, ko nodara šī raksta materiāli.

Tagad varat parakstīt APK ar šo atslēgu. Cilnē APK parakstītājs atlasiet tikko ģenerēto failu, ievadiet paroli, atslēgas aizstājvārdu un paroli, pēc tam atrodiet APK failu un drosmīgi noklikšķiniet uz pogas “Parakstīt”. Ja viss noritēs labi, paka tiks parakstīta.

INFORMĀCIJA

Tā kā mēs parakstījām pakotni ar savu atslēgu, tā būs pretrunā ar sākotnējo lietojumprogrammu, kas nozīmē, ka, mēģinot atjaunināt programmatūru, izmantojot tirgu, mēs saņemsim kļūdu.

Ciparparaksts ir nepieciešams tikai trešās puses programmatūrai, tādēļ, ja modificējat instalētās sistēmas lietojumprogrammas, kopējot tās direktorijā /system/app/, tās nav jāparaksta.

Pēc tam lejupielādējiet pakotni viedtālrunī, instalējiet to un palaidiet to. Voila, reklāma ir pazudusi! Taču tā vietā parādījās ziņojums, ka mums nav interneta vai nav atbilstošu atļauju. Teorētiski ar to varētu pietikt, taču ziņa izskatās kaitinoša, un, godīgi sakot, mums vienkārši paveicās ar muļķīgu pieteikumu. Parasti rakstīta programmatūra, visticamāk, noskaidro savus akreditācijas datus vai pārbaudīs interneta savienojumu un citādi vienkārši atsakās palaist. Kā būt šajā gadījumā? Protams, rediģējiet kodu.

Parasti aplikāciju autori izveido īpašas klases reklāmu rādīšanai un šo klašu metožu izsaukšanai, kad tiek palaista lietojumprogramma vai kāda no tās “aktivitātēm” (vienkāršāk sakot, aplikāciju ekrāni). Mēģināsim atrast šīs klases. Mēs ejam uz smali direktoriju, pēc tam com (org satur tikai atvērto grafisko bibliotēku cocos2d), tad kauf (šeit tas ir, jo tas ir izstrādātāja vārds un viss viņa kods) - un šeit tas ir, mārketinga direktoriju. Iekšpusē mēs atrodam virkni failu ar smali paplašinājumu. Tās ir klases, un visievērojamākā no tām ir Ad.smali klase, pēc kuras nosaukuma var viegli uzminēt, ka tā ir tā, kas rāda reklāmu.

Mēs varētu mainīt tās darbības loģiku, taču daudz vienkāršāk būtu vienkārši noņemt zvanus uz jebkuru no tās metodēm no pašas lietojumprogrammas. Tāpēc mēs atstājam mārketinga direktoriju un dodamies uz blakus esošo daļiņu direktoriju un pēc tam uz virtualtorch. Īpašu uzmanību šeit ir pelnījis fails MainActivity.smali. Šī ir standarta Android klase, ko izveido Android SDK un kas instalēta kā lietojumprogrammas ieejas punkts (analoģiski C galvenajai funkcijai). Atveriet failu rediģēšanai.

Iekšā ir smali kods (vietējais montētājs). Tas ir diezgan mulsinoši un grūti lasāms sava zemā līmeņa dēļ, tāpēc mēs to nepētīsim, bet vienkārši atradīsim kodā visas atsauces uz reklāmu klasi un komentēsim. Meklēšanā ievadām rindiņu “Reklāma” un nonākam 25. rindā:

Lauka privātā reklāma:Lcom/kauf/marketing/Ad;

Šeit tiek izveidots reklāmas lauks, lai saglabātu reklāmu klases objektu. Mēs komentējam, novietojot zīmi ### rindas priekšā. Turpinām meklēšanu. 423. rindiņa:

Jauna instance v3, Lcom/kauf/marketing/Ad;

Šeit notiek objekta izveide. Komentējam. Turpinām meklēšanu un 433., 435., 466., 468., 738., 740., 800. un 802. rindā atrodam Ad klases metožu izsaukumus. Komentējam. Izskatās, ka tas ir viss. Saglabāt. Tagad pakotne atkal jāsaliek kopā un jāpārbauda funkcionalitāte un reklāmas klātbūtne. Eksperimenta tīrības labad mēs atgriežam no AndroidManifest.xml noņemto rindiņu, saliekam paketi, parakstām un instalējam.

Mūsu jūrascūciņa. Redzama reklāma

Hmm! Reklāma pazuda tikai lietojumprogrammas darbības laikā, bet palika galvenajā izvēlnē, ko mēs redzam, palaižot programmatūru. Tātad, pagaidiet, bet ieejas punkts ir MainActivity klase, un sludinājums pazuda, kamēr lietojumprogramma darbojās, bet palika galvenajā izvēlnē, tāpēc ieejas punkts ir atšķirīgs? Lai noteiktu patieso ievades punktu, atkārtoti atveriet failu AndroidManifest.xml. Un jā, tajā ir šādas rindas:

Tie norāda mums (un, vēl svarīgāk, android), ka darbība ar nosaukumu Sākt ir jāuzsāk, reaģējot uz nolūka (notikuma) android.intent.action.MAIN ģenerēšanu no kategorijas android.intent.category.LAUNCHER. Šis notikums tiek ģenerēts, pieskaroties lietojumprogrammas ikonai palaidējā, tādējādi tas nosaka ievades punktu, proti, sākuma klasi. Visticamāk, programmētājs vispirms uzrakstīja lietojumprogrammu bez galvenās izvēlnes, kuras ievades punkts bija standarta MainActivity klase, un pēc tam pievienoja jaunu logu (aktivitāti), kurā bija izvēlne un aprakstīta klasē Sākt, un manuāli padarīja to par ierakstu. punktu.

Atveriet failu Start.smali un atkal meklējiet rindu “Ad”, 153. un 155. rindā atrodam pieminējumu par FirstAd klasi. Tas ir arī avota kodā un, spriežot pēc nosaukuma, ir atbildīgs par reklāmu rādīšanu galvenajā ekrānā. Paskatīsimies tālāk, tur ir FirstAd klases instances izveide un nolūks, kas pēc konteksta ir saistīts ar šo gadījumu, un pēc tam etiķete cond_10, uz kuru nosacītā pāreja tiek veikta tieši pirms instances izveides. no klases:

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

Visticamāk, programma kaut kā nejauši aprēķina, vai reklāma ir jārāda galvenajā ekrānā, un, ja nē, pāriet tieši uz cond_10. Labi, vienkāršosim viņas uzdevumu un aizstāsim nosacīto pāreju ar beznosacījuma pāreju:

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

Kodā vairs nav minēts FirstAd, tāpēc mēs aizveram failu un no jauna saliekam savu virtuālo lāpu, izmantojot apktool. Kopējiet to viedtālrunī, instalējiet un palaidiet. Voila, visa reklāma ir pazudusi, ar ko mēs apsveicam mūs visus.

Rezultāti

Šis raksts ir tikai īss ievads Android lietojumprogrammu uzlaušanas un modificēšanas metodēm. Daudzas problēmas palika aizkulisēs, piemēram, aizsardzības noņemšana, neskaidra koda parsēšana, lietojumprogrammu resursu tulkošana un aizstāšana, kā arī lietojumprogrammu modificēšana, kas rakstītas, izmantojot Android NDK. Tomēr, ja ir pamatzināšanas, tas ir tikai laika jautājums, lai to visu izdomātu.

No šī raksta jūs uzzināsit, no kā sastāv Android lietojumprogramma, kā atvērt APK failu un ar kādām programmām.

Kas ir APK fails?

APK ir Android operētājsistēmas formāts, ko izmanto arhivētiem izpildāmo lietojumprogrammu failiem, un paša faila nosaukums var būt jebkas, taču paplašinājumam vajadzētu izskatīties tikai šādi.apk. APK analogi citās operētājsistēmās ir .msi operētājsistēmā Windows, .sis sistēmā Symbian, .rpm vai .deb operētājsistēmā Linux.

Paskatīsimies, kas ir iekšā
Faktiski .apk ir ZIP arhīvs, tāpēc jūs varat apskatīt iekšējo ierīci, izmantojot jebkuru failu pārvaldnieku vai arhivētāju, piemēram, WinRAR vai mobilo lietojumprogrammu X-plore.




Ir vērts atcerēties, ka jūs saņemat tikai vizuālu piekļuvi iekšējiem resursiem; rediģēšanas iespējas ir ļoti ierobežotas.

Apskatīsim struktūru
.apk failā mēs redzam vairākus failus un mapes, noskaidrosim, kam tie ir paredzēti:

  • AndroidManifest.xml ir sava veida lietojumprogrammas “pase”, no kuras var uzzināt visus galvenos punktus, prasības, versiju, atļaujas utt.
  • META-INF šajā failā ir metadati, tas ir, dati par datiem, kontrolsummas, ceļi uz datiem, ceļi un resursu kontrolsummas, sertifikāti. Šo failu var atvērt ar jebkuru teksta redaktoru, taču ieteicams izmantot Notepad++.
  • Res mapē ir visi programmas resursi, grafika, piemēram, ikonas, attēli, teksts un grafiskā interfeisa elementi. Varat arī viegli piekļūt mapei.
  • classes.dex ir tiešais lietojumprogrammas kods, ko izpilda Dalvik VM virtuālā mašīna; jūs varat redzēt, kas atrodas šajā failā, tikai dekompilējot .apk, par to mēs runāsim citos rakstos. resources.arsc - apkopots XML fails, šajā failā ir dati par visiem programmā iesaistītajiem resursiem.
  • lib - mape ar vietējām bibliotēkām, kuru resursiem var piekļūt, tikai izmantojot specializētas programmas. APK var saturēt arī failus un mapes, piemēram, com, org, udk, bet ne vienmēr.

Tagad aplūkosim iekšējo struktūru sīkāk; šim nolūkam mums ir nepieciešama dekompilācijas programma, Java un APK fails. Galvenais rīks .apk izjaukšanai ir Apktool, taču šī programma darbojas tikai no līnijas, kas nav īpaši ērti. Ātrākai un ērtākai analīzei varat izmantot APKing, tas joprojām ir tas pats Apktool, bet ar iespēju strādāt no konteksta izvēlnes.


Un tāpēc mēs instalējam APKing tāpat kā jebkuru Windows lietojumprogrammu un, atlasot .apk, noklikšķiniet uz tā ar peles labo pogu un vienlaikus Shift, pēc tam mēs redzēsim sekojošo:



Un atlasiet vajadzīgo darbību, piemēram, pilnībā dekompilēt, tad programma pabeigs darbību un izveidos mapi ar tādu pašu nosaukumu.



Atverot mapi, mēs varēsim piekļūt visiem APK faila resursiem.



Tagad visus teksta failus var rediģēt, ievērojot pamatnoteikumus, varat izmantot populāro programmu Notepad++, piemēram, ņemiet vērā AndroidManifest.xml

Es minēju SmartAPKTool lietojumprogrammu. Tas var iegūt, zip un parakstīt modificētus APK failus. Tās priekšrocība ir grafiskā interfeisa klātbūtne. Tomēr ir arī nopietns trūkums. SmartAPKTool ilgu laiku nav atjaunināts, un programma nepareizi izpako un neiepako lietojumprogrammas jaunākajām Android versijām. Tāpēc šeit es mēģināšu izskaidrot, kā lietot lietojumprogrammu šiem mērķiem apktool.

1. piezīme.
Programmu SmartAPKTool joprojām ir ērti izmantot savākto apk failu parakstīšanai.
2. piezīme.
Saites uz rakstā minētajām programmām ir ↓

Programma apktool nav grafiskā interfeisa. Tas ir trūkums tiem, kuri nav pieraduši strādāt ar komandrindu. Bet ir arī pluss: atšķirībā no SmartAPKTool, mēs redzēsim visas kļūdas, kas nozīmē, ka mēs zināsim, ko labot.

Lejupielādēsim divus arhīvus: viens kopīgs visām sistēmām, otrs mūsu sistēmai (piemērā Windows):

Izpakosim abus arhīvus vienā tukšā mapē (mūsu piemērā C:\apktool\ ). Tās saturam vajadzētu izskatīties šādi:

No šī brīža mēs varam izmantot programmu apktool.

3. piezīme.
Linux 64 bitu versiju lietotājiem būs jāinstalē pakotne ia32-libs:

sudo apt-get install ia32-libs

Tajā pašā mapē ievietojam failu, kas mums ir jāizpako. Piemēram, ļaujiet to saukt par orig.apk
Nospiediet un turiet taustiņu Shift un ar peles labo pogu noklikšķiniet uz jebkuras tukšas vietas mapē (neklikšķiniet uz failiem!). Pēc tam atlasiet “Atvērt komandu logu”. Parādītajā konsolē ierakstiet:

apktool atšifrēt orig.apk

Fails tiks izsaiņots:

Tagad mums ir mape ar neizpakoto lietojumprogrammu direktorijā C:\apktool\. To sauc tāpat kā avota failu, atskaitot paplašinājumu: C:\apktool\orig\. Mēs varam mainīt avota failus, kā aprakstīts rakstā Android: kā vienā tālrunī instalēt divas identiskas lietojumprogrammas. Pēc izmaiņu veikšanas izveidosim lietojumprogrammas kopiju, iesaiņojot avota failus APK:

apktool build orig result.apk

Šeit result.apk ir faila nosaukums, ko mēs izdomājām kopijas veidošanai. Ja kļūdu nav, fails tiks samontēts:

Pārējais ir ārpus raksta darbības jomas:

  1. Ja montāžas laikā rodas kļūdas, jums ir jāatrod to cēlonis un jānovērš.
  2. Atliek tikai parakstīt iegūto result.apk failu. To var izdarīt, izmantojot SmartAPKTool, kā minēts iepriekš; Viss tajā ir intuitīvs. Ir arī citi veidi, kā parakstīt apk failu.
  3. Kļūdas var rasties arī instalējot kopiju, tās palaišanas vai darbības laikā. Tie ir jānoķer, izmantojot adb utilītu, kas iekļauta Android SDK.

Jums ir jāparaksta lietojumprogramma, pretējā gadījumā tā netiks instalēta. Kļūdas nerodas tik bieži, un visbiežāk sastopamās problēmas, kas tās izraisa, ir aprakstītas rakstā

Izmantojot dažādas programmaparatūras Android ierīcēm, dažreiz ir nepieciešams vienā vai otrā veidā mainīt operētājsistēmā iebūvētās sistēmas lietojumprogrammas. Šajā materiālā mēs detalizēti apsvērsim šo jautājumu.

Protams, jums ir jāizjauc un jāsamontē sistēmas APK fails, lai tas darbotos pareizi un stabili. Soli pa solim izdomāsim, kas šim nolūkam ir jādara.

Pirmkārt, jums ir jāveic sistēmas APK failu deodeksēšanas process. Mēs jums pateiksim, kā to izdarīt.

Tātad .apk fails tika deodeksēts un dekompilēts. Analizēsim mūs interesējošo lietojumprogrammu, piemēra skaidrības labad ļaujiet tai nosaukt nosaukumu, ietvaros- res. apk. Mēs to savās galvās atceramies kā sākotnējo pieteikumu.

Pieņemsim, ka lietojumprogrammā esam veikuši visas nepieciešamās izmaiņas. Mēs runāsim vairāk par visiem APK failu aspektiem. Tagad jums tas jāiepako atpakaļ. Atcerēsimies gatavo iesaiņoto lietojumprogrammu mūsu prātā kā modificētu lietojumprogrammu 2.

Tagad mēs paskaidrosim, kāpēc bija nepieciešams mentāli atcerēties lietojumprogrammas kā oriģinālas un modificētas 2. Programma, kas apkopota ar ApkTool programmu (vai izmantojot grafisko lietotāja interfeisa paplašinājumu, piemēram, SmartApkTool), nedarbosies, taču tā nav problēma. Mēs veicam šādas darbības:

Šādu failu apkopošana atpakaļ APK ir diezgan vienkārša. Lai to izdarītu, jums ir jāpalaiž apktool ar atbilstošo būvēšanas karogu un jānodod ceļš uz mapi, kurā atrodas dekompilētā lietojumprogramma. Piemēram, ja mums ir lietotņu mape, kas atrodas tajā pašā direktorijā, kur apktool, komanda izskatīsies šādi:

Apvalks

java -jar apktool.jar b lietotne

java — jar apktool .jar b app

Pēc montāžas gatavais APK fails atradīsies direktorijā lietotne/būvējums. Pēc tam jums jāparaksta APK. Tas tiek darīts, lai nodrošinātu, ka lietojumprogramma darbojas ierīcēs, kurās atkļūdošana ir aizliegta. Tas nozīmē, ka šādās ierīcēs ir aizliegts palaist neparakstītas lietojumprogrammas. Vairāk par ciparsertifikātiem un failu parakstīšanas procedūru varat lasīt šeit.

Faila parakstīšana ir ļoti vienkārša: šim nolūkam ir īpaša utilīta, ko sauc par signapk. Tas ir jāpalaiž, vispirms nododot sertifikātus kā argumentus, pēc tam ceļu uz lietojumprogrammu un visbeidzot parakstītās lietojumprogrammas ceļu (rezultāts, kur to saglabāt). Tas izskatās apmēram šādi:

Apvalks

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

Kur tādu sertifikātu var dabūt, jautāsiet? Sertifikātus var atrast internetā. Vai arī ģenerējiet to pats. Detalizētus norādījumus par visu nepieciešamo failu iestatīšanu un ģenerēšanu var atrast, piemēram, .

Secinājums

Kā redzat, APK failu dekompilēšana un salikšana ir diezgan vienkāršs process, kuru turklāt var automatizēt, atvieglojot pētnieka darbu. Arī pati Dalvik virtuālā mašīna ir viegli apgūstama un atverama, kas, no vienas puses, samazina barjeru ienākšanai izstrādātājiem, no otras puses, ir galvenais iemesls tik lielam pirātisma procentam Android platformā. Daļēji tāpēc, piemēram, spēļu izstrādātāji parasti nav ieinteresēti izlaist interesantas spēles ar sižetu. Daudz izdevīgāk, ņemot vērā pašreizējo lietotāju attieksmi, ir kniežu fermas ar ziedojumiem, kas ir pārsteidzoši līdzīgi viens otram. Tāpēc mēs pērkam aplikācijas, atbalstām izstrādātājus un rezultātā iegūstam interesantu saturu. Bet ziedot nav absolūti nekādas vajadzības!

Paldies visiem, tiekamies vēlreiz.