Si të hapni APK dhe si të modifikoni? Përdorimi i apktool Një program për të çmontuar dhe mbledhur një skedar apk

Ndonjëherë disa aplikacione në Android nuk i përshtaten përdoruesit në një farë mënyre. Një shembull është reklamimi ndërhyrës. Dhe gjithashtu ndodh që programi është i mirë për të gjithë, por përkthimi në të ose është i shtrembër ose mungon plotësisht. Ose, për shembull, programi është një provë, por nuk ka asnjë mënyrë për të marrë versionin e plotë. Si të ndryshoni situatën?

Prezantimi

Në këtë artikull do të flasim se si të çmontoni një paketë APK me një aplikacion, të shikojmë strukturën e saj të brendshme, të çmontoni dhe dekompilojmë bajtkodin, dhe gjithashtu të përpiqemi të bëjmë disa ndryshime në aplikacionet që mund të na sjellin një përfitim ose një tjetër.

Për t'i bërë të gjitha këto vetë, do t'ju duhet të paktën njohuri bazë për gjuhën Java, në të cilën janë shkruar aplikacionet Android, dhe gjuhën XML, e cila përdoret kudo në Android - nga përshkrimi i vetë aplikacionit dhe të drejtat e tij të aksesit deri te ruajtja e vargjeve. do të shfaqet në ekran. Do t'ju duhet gjithashtu aftësia për të përdorur softuer të specializuar të konsolës.

Pra, çfarë është një paketë APK në të cilën shpërndahet absolutisht i gjithë softueri Android?

Dekompilimi i aplikacionit

Në këtë artikull, ne kemi punuar vetëm me kodin e aplikacionit të çmontuar, por nëse bëhen ndryshime më serioze në aplikacione të mëdha, kuptimi i kodit smali do të jetë shumë më i vështirë. Për fat të mirë, ne mund ta dekompilojmë kodin dex në kodin Java, i cili, megjithëse nuk është origjinal dhe i pa kompiluar, është shumë më i lehtë për t'u lexuar dhe kuptuar logjikën e aplikacionit. Për ta bërë këtë, do të na duhen dy mjete:

  • dex2jar është një përkthyes i bytecode Dalvik në bytecode JVM, në bazë të të cilit mund të marrim kodin në gjuhën Java;
  • jd-gui është vetë një dekompilues që ju lejon të merrni kodin Java të lexueshëm nga bytecode JVM. Si alternativë, mund të përdorni Jad (www.varaneckas.com/jad); Edhe pse është mjaft i vjetër, në disa raste gjeneron kod më të lexueshëm se Jd-gui.

Kështu duhet të përdoren. Së pari, ne nisim dex2jar, duke specifikuar rrugën drejt paketës apk si argument:

% dex2jar.sh mail.apk

Si rezultat, paketa Java mail.jar do të shfaqet në drejtorinë aktuale, e cila tashmë mund të hapet në jd-gui për të parë kodin Java.

Rregullimi i paketave APK dhe marrja e tyre

Një paketë aplikacioni Android është në thelb një skedar i rregullt ZIP që nuk kërkon ndonjë mjet të veçantë për të parë përmbajtjen e tij ose për ta nxjerrë atë. Mjafton të keni një arkivues - 7zip për Windows ose tastierë unzip në Linux. Por kjo ka të bëjë me mbështjellësin. Çfarë ka brenda? Në përgjithësi, ne kemi strukturën e mëposhtme brenda:

  • META-INF/- përmban një certifikatë dixhitale të aplikacionit, duke identifikuar krijuesin e tij, dhe kontrolle të skedarëve të paketës;
  • res/ - burime të ndryshme që aplikacioni përdor në punën e tij, si imazhe, përshkrim deklarativ i ndërfaqes, si dhe të dhëna të tjera;
  • AndroidManifest.xml- përshkrimi i aplikacionit. Kjo përfshin, për shembull, një listë të lejeve të kërkuara, versionin e kërkuar të Android dhe rezolucionin e kërkuar të ekranit;
  • klasat.dex- bitekodi i përpiluar i aplikacionit për makinën virtuale Dalvik;
  • burimet.arsc- gjithashtu burime, por të një lloji tjetër - në veçanti, vargjet (po, ky skedar mund të përdoret për Rusifikimin!).

Skedarët dhe drejtoritë e listuara janë, nëse jo në të gjitha, atëherë, ndoshta, në shumicën dërrmuese të APK-ve. Sidoqoftë, ka disa skedarë/direktori jo aq të zakonshme që ia vlen të përmenden:

  • aseteve- analog i burimeve. Dallimi kryesor është se për të hyrë në një burim duhet të dini identifikuesin e tij, por lista e aseteve mund të merret në mënyrë dinamike duke përdorur metodën AssetManager.list() në kodin e aplikacionit;
  • lib- bibliotekat vendase Linux të shkruara duke përdorur NDK (Native Development Kit).

Ky direktori përdoret nga prodhuesit e lojërave që vendosin motorët e tyre të lojës të shkruar në C/C++ atje, si dhe nga krijuesit e aplikacioneve me performancë të lartë (për shembull, Google Chrome). Ne e kuptuam pajisjen. Por si e merrni skedarin e paketës së aplikacionit që ju intereson? Meqenëse nuk është e mundur të merren skedarët APK nga pajisja pa rrënjë (ato janë të vendosura në drejtorinë /data/app) dhe rooting nuk këshillohet gjithmonë, ekzistojnë të paktën tre mënyra për të marrë skedarin e aplikacionit në kompjuterin tuaj:

  • Shtesa e Shkarkuesit APK për Chrome;
  • Aplikacioni i vërtetë APK Leecher;
  • hostimi i skedarëve të ndryshëm dhe Varezniks.

Cilin të përdorni është çështje shije; ne preferojmë të përdorim aplikacione të veçanta, kështu që ne do të përshkruajmë përdorimin e Real APK Leecher, veçanërisht pasi është shkruar në Java dhe, në përputhje me rrethanat, do të funksionojë ose në Windows ose në Nix.

Pas fillimit të programit, duhet të plotësoni tre fusha: Email, Fjalëkalim dhe ID të pajisjes - dhe zgjidhni një gjuhë. Dy të parat janë posta elektronike dhe fjalëkalimi i llogarisë suaj të Google që përdorni në pajisje. E treta është identifikuesi i pajisjes dhe mund të merret duke shtypur kodin në diler # #8255## dhe më pas gjetja e linjës Device ID. Kur plotësoni, duhet të vendosni vetëm ID-në pa prefiksin android.

Pas plotësimit dhe ruajtjes, shpesh shfaqet mesazhi "Gabim gjatë lidhjes me serverin". Nuk ka asnjë lidhje me Google Play, ndaj mos ngurroni ta shpërfillni atë dhe të kërkoni paketa që ju interesojnë.

Shikoni dhe modifikoni

Le të themi se keni gjetur një paketë që ju intereson, e keni shkarkuar, shpaketuar ... dhe kur u përpoqët të shikonit disa skedarë XML, u habitët kur zbuluat se skedari nuk ishte tekst. Si ta dekompiloni atë dhe si të punoni me paketat në përgjithësi? A është vërtet e nevojshme të instaloni SDK-në? Jo, nuk është e nevojshme të instaloni SDK fare. Në fakt, të gjithë hapat për nxjerrjen, modifikimin dhe paketimin e paketave APK kërkojnë mjetet e mëposhtme:

  • arkivues ZIP për paketim dhe paketim;
  • i vogël- assembler/disassembler i bytecode makinës virtuale Dalvik (code.google.com/p/smali);
  • aapt- një mjet për paketimin e burimeve (si parazgjedhje, burimet ruhen në formë binare për të optimizuar performancën e aplikacionit). Përfshihet në Android SDK, por mund të merret veçmas;
  • nënshkrues- një mjet për nënshkrimin dixhital të një pakete të modifikuar (bit.ly/Rmrv4M).

Ju mund t'i përdorni të gjitha këto mjete veç e veç, por kjo është e papërshtatshme, kështu që është më mirë të përdorni softuer të nivelit më të lartë të ndërtuar mbi bazën e tyre. Nëse jeni duke përdorur Linux ose Mac OS X, ekziston një mjet i quajtur apktool. Kjo ju lejon të shpaketoni burimet në formën e tyre origjinale (përfshirë skedarët binar XML dhe arsc), të rindërtoni një paketë me burime të ndryshuara, por nuk di të nënshkruajë paketat, kështu që do t'ju duhet të ekzekutoni manualisht programin e nënshkruesit. Përkundër faktit se programi është shkruar në Java, instalimi i tij është mjaft jo standard. Së pari ju duhet të merrni vetë skedarin 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 $ eksport PATH=~/bin:$PATH

Nëse punoni në Windows, atëherë ekziston një mjet i shkëlqyeshëm për të i quajtur Virtuous Ten Studio, i cili gjithashtu grumbullon të gjitha këto mjete (përfshirë vetë apktool), por në vend të një ndërfaqeje CLI, ai i siguron përdoruesit një ndërfaqe grafike intuitive me të cilën mund të kryeni operacione për zbërthimin, çmontimin dhe dekompilimin me disa klikime. Ky mjet është Donation-ware, domethënë, ndonjëherë shfaqen dritare që ju kërkojnë të merrni një licencë, por në fund kjo mund të tolerohet. Nuk ka kuptim ta përshkruajmë atë, sepse mund ta kuptoni ndërfaqen në pak minuta. Por apktool, për shkak të natyrës së tij të konsolës, duhet të diskutohet më në detaje.


Le të shohim opsionet e apktool. Shkurtimisht, ekzistojnë tre komanda themelore: d (deshifroj), b (ndërtoj) dhe if (instalo kornizën). Nëse gjithçka është e qartë me dy komandat e para, atëherë çfarë bën deklarata e tretë, e kushtëzuar? Ai shpaketon kornizën e specifikuar të UI, e cila është e nevojshme në rastet kur ju zbërtheni ndonjë paketë të sistemit.

Le të shohim opsionet më interesante të komandës së parë:

  • -s- mos i çmontoni skedarët dex;
  • -r- mos i shpaketoni burimet;
  • -b- mos futni informacionin e korrigjimit në rezultatet e çmontimit të skedarit dex;
  • --kornizë-rrugë- përdorni kornizën e specifikuar të UI në vend të atij të integruar në apktool. Tani le të shohim disa opsione për komandën b:
  • -f- montim i detyruar pa kontrolluar ndryshimet;
  • -a- tregoni rrugën drejt aapt (një mjet për ndërtimin e një arkivi APK), nëse për ndonjë arsye dëshironi ta përdorni nga një burim tjetër.

Përdorimi i apktool është shumë i thjeshtë për ta bërë këtë, thjesht specifikoni një nga komandat dhe shtegun për në APK, për shembull:

$ apktool d mail.apk

Pas kësaj, të gjithë skedarët e nxjerrë dhe të çmontuar të paketës do të shfaqen në drejtorinë e postës.

Përgatitja. Çaktivizimi i reklamave

Teoria është, sigurisht, e mirë, por pse është e nevojshme nëse nuk dimë çfarë të bëjmë me paketën e papaketuar? Le të përpiqemi ta zbatojmë teorinë në dobinë tonë, domethënë të modifikojmë disa softuer në mënyrë që të mos na tregojë reklama. Për shembull, le të jetë Virtual Torch - një pishtar virtual. Ky softuer është ideal për ne, sepse është i mbushur me reklama të bezdisshme dhe, për më tepër, është mjaft i thjeshtë për të mos humbur në xhunglën e kodit.


Pra, duke përdorur një nga metodat e mësipërme, shkarkoni aplikacionin nga tregu. Nëse vendosni të përdorni Virtuous Ten Studio, thjesht hapni skedarin APK në aplikacion dhe zbërthejeni atë, krijoni një projekt (File -> Projekt i ri), më pas zgjidhni Import File në menynë e kontekstit të projektit. Nëse zgjedhja juaj ra në apktool, atëherë thjesht ekzekutoni një komandë:

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

Pas kësaj, një pemë skedari e ngjashme me atë të përshkruar në seksionin e mëparshëm do të shfaqet në drejtorinë com.kauf.particle.virtualtorch, por me një drejtori shtesë smali në vend të skedarëve dex dhe një skedari apktool.yml. E para përmban kodin e çmontuar të skedarit dex të ekzekutueshëm të aplikacionit, i dyti përmban informacionin e shërbimit të nevojshëm që apktool të mbledhë paketën përsëri.

Vendi i parë që duhet të shohim është, sigurisht, AndroidManifest.xml. Dhe këtu menjëherë hasim rreshtin e mëposhtëm:

Nuk është e vështirë të merret me mend se është përgjegjëse për dhënien e lejeve të aplikacionit për të përdorur lidhjen në internet. Në fakt, nëse thjesht duam të heqim qafe reklamat, ka shumë të ngjarë që thjesht të bllokojmë aplikacionin nga Interneti. Le të përpiqemi ta bëjmë këtë. Ne fshijmë rreshtin e specifikuar dhe përpiqemi të ndërtojmë softuerin duke përdorur apktool:

$ apktool b com.kauf.particle.virtualtorch

Skedari APK që rezulton do të shfaqet në direktorinë com.kauf.particle.virtualtorch/build/. Sidoqoftë, nuk do të jetë e mundur ta instaloni atë, pasi nuk ka një nënshkrim dixhital dhe kontrolle të skedarëve (thjesht nuk ka një drejtori META-INF/). Ne duhet të nënshkruajmë paketën duke përdorur programin apk-signer. Nisur. Ndërfaqja përbëhet nga dy skeda - në të parën (Key Generator) ne krijojmë çelësa, në të dytën (APK Signer) ne nënshkruajmë. Për të krijuar çelësin tonë privat, plotësoni fushat e mëposhtme:

  • Skedari i synuar- skedari i daljes së dyqanit të çelësave; zakonisht ruan një palë çelësa;
  • Fjalëkalimi Dhe Konfirmo- fjalëkalimi për ruajtjen;
  • Alias- emri i çelësit në ruajtje;
  • Fjalëkalimi i pseudonimit Dhe Konfirmo- fjalëkalimi i çelësit sekret;
  • Vlefshmëria- periudha e vlefshmërisë (në vite). Vlera e paracaktuar është optimale.

Fushat e mbetura janë, në përgjithësi, opsionale - por të paktën një duhet të plotësohet.


PARALAJMËRIM

Për të nënshkruar një aplikacion duke përdorur apk-signer, duhet të instaloni Android SDK dhe të specifikoni rrugën e plotë drejt tij në cilësimet e aplikacionit.

I gjithë informacioni jepet vetëm për qëllime informative. As redaktorët dhe as autori nuk janë përgjegjës për ndonjë dëm të mundshëm të shkaktuar nga materialet e këtij artikulli.

Tani mund të nënshkruani APK-në me këtë çelës. Në skedën APK Signer, zgjidhni skedarin e krijuar rishtazi, futni fjalëkalimin, pseudonimin kryesor dhe fjalëkalimin, më pas gjeni skedarin APK dhe klikoni me guxim butonin "Sign". Nëse gjithçka shkon mirë, paketa do të nënshkruhet.

INFO

Meqenëse e kemi nënshkruar paketën me çelësin tonë, ajo do të jetë në konflikt me aplikacionin origjinal, që do të thotë se kur të përpiqemi të përditësojmë softuerin përmes tregut, do të marrim një gabim.

Një nënshkrim dixhital kërkohet vetëm për softuerin e palëve të treta, kështu që nëse po modifikoni aplikacionet e sistemit që janë instaluar duke i kopjuar ato në drejtorinë /system/app/, atëherë nuk keni nevojë t'i nënshkruani ato.

Pas kësaj, shkarkoni paketën në smartphone tuaj, instaloni dhe lansoni atë. Voila, reklama është zhdukur! Në vend të kësaj, megjithatë, u shfaq një mesazh se ne nuk kemi internet ose nuk kemi lejet e duhura. Në teori, kjo mund të jetë e mjaftueshme, por mesazhi duket i bezdisshëm dhe, për të qenë i sinqertë, thjesht patëm fat me një aplikim budalla. Softueri i shkruar normalisht ka shumë të ngjarë të qartësojë kredencialet e tij ose të kontrollojë për një lidhje interneti dhe përndryshe thjesht refuzon të nisë. Si të jesh në këtë rast? Sigurisht, modifikoni kodin.

Në mënyrë tipike, autorët e aplikacioneve krijojnë klasa të veçanta për shfaqjen e reklamave dhe metodat e thirrjeve të këtyre klasave kur aplikacioni ose një nga "aktivitetet" e tij (me fjalë të thjeshta, ekranet e aplikacionit) hapet. Le të përpiqemi të gjejmë këto klasa. Shkojmë te direktoria smali, pastaj com (org përmban vetëm bibliotekën grafike të hapur cocos2d), pastaj kauf (këtu është, sepse ky është emri i zhvilluesit dhe i gjithë kodi i tij është atje) - dhe ja ku është, drejtoria e marketingut. Brenda gjejmë një mori skedarësh me ekstensionin smali. Këto janë klasa, dhe më e dalluara prej tyre është klasa Ad.smali, nga emri i së cilës mund të merret me mend se është ajo që shfaq reklamat.

Ne mund të ndryshonim logjikën e funksionimit të tij, por do të ishte shumë më e lehtë që thjesht të hiqnin thirrjet në ndonjë nga metodat e tij nga vetë aplikacioni. Prandaj, ne largohemi nga direktoria e marketingut dhe shkojmë te drejtoria ngjitur e grimcave, dhe më pas te virtual Torch. Skedari MainActivity.smali meriton vëmendje të veçantë këtu. Kjo është një klasë standarde Android që krijohet nga Android SDK dhe instalohet si pikë hyrëse në aplikacion (analog me funksionin kryesor në C). Hapni skedarin për redaktim.

Brenda ka kod smali (ambler lokal). Është mjaft konfuze dhe e vështirë për t'u lexuar për shkak të natyrës së tij të nivelit të ulët, kështu që ne nuk do ta studiojmë atë, por thjesht do t'i gjejmë të gjitha referencat për klasën Ad në kod dhe do t'i komentojmë ato. Ne futim rreshtin "Ad" në kërkim dhe arrijmë në rreshtin 25:

Reklamë private në terren:Lcom/kauf/marketing/Ad;

Këtu krijohet një fushë reklame për të ruajtur një objekt të klasës Ad. Ne komentojmë duke vendosur një shenjë ### përpara rreshtit. Ne vazhdojmë kërkimin. Rreshti 423:

Instance e re v3, Lcom/kauf/marketing/Ad;

Këtu ndodh krijimi i objektit. Le të komentojmë. Ne vazhdojmë kërkimin dhe gjejmë në rreshtat 433, 435, 466, 468, 738, 740, 800 dhe 802 thirrjet e metodave të klasës Ad. Le të komentojmë. Dukej se kaq është. Ruaj. Tani paketa duhet të bashkohet përsëri dhe të kontrollohet për funksionalitetin dhe praninë e reklamave. Për pastërtinë e eksperimentit, ne e kthejmë linjën e hequr nga AndroidManifest.xml, e mbledhim paketën, e nënshkruajmë dhe e instalojmë.

Derri ynë gini. Reklamimi i dukshëm

Oops! Reklamimi u zhduk vetëm gjatë ekzekutimit të aplikacionit, por mbeti në menynë kryesore, të cilën e shohim kur lëshojmë softuerin. Pra, prisni, por pika e hyrjes është klasa MainActivity, dhe reklama u zhduk gjatë ekzekutimit të aplikacionit, por mbeti në menunë kryesore, pra pika e hyrjes është e ndryshme? Për të identifikuar pikën e vërtetë të hyrjes, rihap skedarin AndroidManifest.xml. Dhe po, ai përmban rreshtat e mëposhtëm:

Ata na thonë (dhe, më e rëndësishmja, android-i) se një aktivitet i quajtur Start duhet të nisë në përgjigje të gjenerimit të një qëllimi (ngjarjeje) android.intent.action.MAIN nga kategoria android.intent.category.LAUNCHER. Kjo ngjarje gjenerohet kur trokitni lehtë mbi ikonën e aplikacionit në lëshuesin, kështu që përcakton pikën e hyrjes, përkatësisht klasën Start. Me shumë mundësi, programuesi fillimisht shkroi një aplikacion pa një menu kryesore, pika hyrëse në të cilën ishte klasa standarde MainActivity, dhe më pas shtoi një dritare të re (aktivitet) që përmban menunë dhe të përshkruar në klasën Start, dhe e bëri manualisht hyrjen. pikë.

Hapni skedarin Start.smali dhe kërkoni përsëri rreshtin "Ad", ne gjejmë në rreshtat 153 dhe 155 një përmendje të klasës FirstAd. Është gjithashtu në kodin burimor dhe, duke gjykuar nga emri, është përgjegjës për shfaqjen e reklamave në ekranin kryesor. Le të shohim më tej, ekziston krijimi i një instance të klasës FirstAd dhe një qëllim që, sipas kontekstit, lidhet me këtë shembull, dhe më pas etiketa cond_10, kalimi i kushtëzuar në të cilin kryhet pikërisht përpara krijimit të një instance. të klasës:

Nëse-ne p1, v0, :cond_10 .linja 74 e re-instancës v0, Landroid/content/Intent; ... :cond_10

Me shumë mundësi, programi llogarit në një farë mënyre rastësisht nëse reklamimi duhet të shfaqet në ekranin kryesor dhe, nëse jo, hidhet drejtpërdrejt në cond_10. Ok, le të thjeshtojmë detyrën e saj dhe të zëvendësojmë tranzicionin e kushtëzuar me një të pakushtëzuar:

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

Nuk ka më përmendje të FirstAd në kod, kështu që ne mbyllim skedarin dhe rimontojmë pishtarin tonë virtual duke përdorur apktool. Kopjojeni atë në telefonin tuaj inteligjent, instaloni, lëshojeni. Voila, çdo reklamë është zhdukur, për të cilën ne përgëzojmë të gjithëve.

Rezultatet

Ky artikull është vetëm një hyrje e shkurtër e metodave të hakimit dhe modifikimit të aplikacioneve Android. Shumë çështje mbetën prapa skenave, të tilla si heqja e mbrojtjes, analizimi i kodit të turbullt, përkthimi dhe zëvendësimi i burimeve të aplikacionit, si dhe modifikimi i aplikacioneve të shkruara duke përdorur Android NDK. Megjithatë, duke pasur njohuri bazë, është vetëm çështje kohe për t'i kuptuar të gjitha.

Nga ky artikull do të mësoni se nga çfarë përbëhet aplikacioni Android, si të hapni një skedar APK dhe me çfarë programesh.

Çfarë është një skedar APK?

APK është një format i sistemit operativ Android që përdoret për skedarët e aplikacioneve të ekzekutueshme të arkivuara dhe emri i vetë skedarit mund të jetë çdo gjë, por shtrirja duhet të duket vetëm si kjo.apk. Analogët APK në sistemet e tjera operative janë .msi në Windows, .sis në Symbian, .rpm ose .deb në Linux.

Le të shohim se çfarë ka brenda
Në fakt, .apk është një arkiv ZIP, kështu që mund të shikoni pajisjen e brendshme duke përdorur çdo menaxher skedari ose arkivues, për shembull WinRAR ose aplikacionin celular X-plore.




Vlen të kujtohet se ju merrni vetëm akses vizual në burimet e brendshme, aftësitë e redaktimit janë jashtëzakonisht të kufizuara.

Le të shohim strukturën
Brenda .apk ne shohim një numër skedarësh dhe dosjesh, le të zbulojmë se për çfarë shërbejnë:

  • AndroidManifest.xml është një lloj "pasaporte" e aplikacionit nga e cila mund të zbuloni të gjitha pikat kryesore, kërkesat, versionin, lejet, etj.
  • META-INF ky skedar përmban meta të dhëna, domethënë të dhëna për të dhënat, shumat e kontrollit, shtigjet drejt të dhënave, shtigjet dhe shumat kontrolluese të burimeve, certifikatat. Ju mund ta hapni këtë skedar me çdo redaktues teksti, por rekomandohet të përdorni Notepad++.
  • Dosja res përmban të gjitha burimet e programit, grafikë, të tilla si ikona, fotografi, tekst dhe elementë të ndërfaqes grafike. Ju gjithashtu mund të përdorni lehtësisht dosjen.
  • classes.dex është kodi i programit të drejtpërdrejtë i ekzekutuar nga makina virtuale Dalvik VM, ju mund të shihni se çfarë ka brenda këtij skedari vetëm duke dekompiluar .apk, ne do të flasim për këtë në artikuj të tjerë; resources.arsc - skedari i përpiluar XML, ky skedar përmban të dhëna për të gjitha burimet e përfshira në program.
  • lib - një dosje me biblioteka vendase, burimet e të cilave mund të aksesohen vetëm kur përdorni programe të specializuara. Gjithashtu në APK mund të ketë skedarë dhe dosje të tilla si com, org, udk, por jo gjithmonë.

Tani le të shohim strukturën e brendshme në mënyrë më të detajuar për këtë na duhet një program dekompilimi, Java dhe një skedar APK; Mjeti kryesor për çmontimin e .apk është Apktool, por ky program funksionon vetëm nga linja, e cila nuk është shumë e përshtatshme. Për analizë më të shpejtë dhe më të përshtatshme, mund të përdorni APKing, ky është ende i njëjti Apktool, por me aftësinë për të punuar nga menyja e kontekstit.


Dhe kështu ne instalojmë APKing si çdo aplikacion për Windows dhe, pasi kemi zgjedhur .apk, klikojmë mbi të me butonin e djathtë të miut dhe Shift në të njëjtën kohë, pas së cilës do të shohim sa vijon:



Dhe zgjidhni veprimin e kërkuar, për shembull, dekompiloni plotësisht, atëherë programi do të përfundojë operacionin dhe do të krijojë një dosje me të njëjtin emër.



Me hapjen e dosjes do të kemi akses në të gjitha burimet e skedarit APK.



Tani të gjithë skedarët e tekstit mund të redaktohen, duke respektuar rregullat bazë, mund të përdorni programin popullor Notepad++, për shembull, merrni parasysh AndroidManifest.xml

Unë përmenda aplikacionin SmartAPKTool. Mund të nxjerrë, zip dhe nënshkruajë skedarë apk të modifikuar. Avantazhi i tij është prania e një ndërfaqe grafike. Megjithatë, ka një pengesë serioze. SmartAPKTool nuk është përditësuar për një kohë të gjatë dhe programi nuk shpaketon dhe paketon saktë aplikacionet për versionet më të fundit të Android. Prandaj, këtu do të përpiqem të shpjegoj se si ta përdor aplikacionin për këto qëllime apktool.

Shënim 1.
Programi SmartAPKTool është ende i përshtatshëm për t'u përdorur për nënshkrimin e skedarëve të mbledhur apk.
Shënim 2.
Lidhjet me programet e përmendura në artikull janë ↓

Programi apktool nuk ka një ndërfaqe grafike. Ky është një disavantazh për ata që nuk janë mësuar të punojnë me vijën e komandës. Por ka edhe një plus: ndryshe nga SmartAPKTool, ne do të shohim të gjitha gabimet, që do të thotë se do të dimë se çfarë të rregullojmë.

Le të shkarkojmë dy arkiva: një i zakonshëm për të gjitha sistemet, tjetri për sistemin tonë (Windows në shembull):

Le t'i shpaketojmë të dy arkivat në të njëjtën dosje bosh (në shembullin tonë, C:\apktool\). Përmbajtja e tij duhet të duket si kjo:

Tani e tutje ne mund ta përdorim programin apktool.

Shënim 3.
Përdoruesit e versioneve 64-bit të Linux do të duhet të instalojnë paketën ia32-libs:

sudo apt-get instaloni ia32-libs

Në të njëjtën dosje vendosim skedarin që duhet të shpaketojmë. Për shembull, le të quhet orig.apk
Shtypni dhe mbani tastin Shift dhe kliko me të djathtën në çdo hapësirë ​​boshe në dosje (mos klikoni mbi skedarët!). Pas kësaj, zgjidhni "Hap dritaren e komandës". Në tastierën që shfaqet, shkruani:

apktool deshifroj orig.apk

Skedari do të zbërthehet:

Tani kemi një dosje me aplikacionin e papaketuar në drejtorinë C:\apktool\. Quhet njësoj si skedari burimor, minus shtesën: C:\apktool\orig\ . Ne mund të ndryshojmë skedarët burimor siç përshkruhet në artikullin Android: si të instaloni dy aplikacione identike në një telefon. Pasi të kemi bërë ndryshimet, ne do të mbledhim një kopje të aplikacionit duke paketuar skedarët burim në një apk:

apktool build orig result.apk

Këtu result.apk është emri i skedarit që kemi gjetur për ndërtimin e kopjes. Nëse nuk ka gabime, skedari do të mblidhet:

Pjesa tjetër është përtej qëllimit të artikullit:

  1. Nëse ka gabime gjatë montimit, duhet të gjeni shkakun e tyre dhe t'i korrigjoni ato.
  2. Gjithçka që mbetet është të nënshkruani skedarin result.apk që rezulton. Kjo mund të bëhet duke përdorur SmartAPKTool siç u përmend më lart; Gjithçka në lidhje me të është intuitive. Ka edhe mënyra të tjera për të nënshkruar një skedar apk.
  3. Gabimet mund të ndodhin gjithashtu gjatë instalimit të një kopjeje, gjatë nisjes ose funksionimit të saj. Ata duhet të kapen duke përdorur programin adb të përfshirë në Android SDK.

Ju duhet të nënshkruani aplikacionin, përndryshe nuk do të instalohet. Gabimet nuk ndodhin aq shpesh, dhe problemet më të zakonshme që i shkaktojnë ato përshkruhen në artikull

Në procesin e përdorimit të firmware të ndryshëm për pajisjet Android, ndonjëherë bëhet e nevojshme të ndryshohen në një mënyrë ose në një tjetër aplikacionet e sistemit të integruara në sistemin operativ. Në këtë material ne do ta shqyrtojmë këtë çështje në detaje.

Natyrisht, ju duhet të çmontoni dhe rimontoni skedarin APK të sistemit në mënyrë që të funksionojë siç duhet dhe në mënyrë të qëndrueshme. Le të kuptojmë hap pas hapi se çfarë duhet bërë për këtë.

Së pari, duhet të kryeni procesin e dedeksimit të skedarëve APK të sistemit. Ne do t'ju tregojmë se si ta bëni këtë në.

Pra, skedari .apk u dedeksua dhe u dekompilua. Le të analizojmë aplikacionin që na intereson, le të ketë emrin, për qartësi të shembullit, kornizë- res. apk. Ne e kujtojmë atë në kokën tonë si aplikacionin origjinal.

Le të themi se kemi bërë të gjitha ndryshimet e nevojshme në aplikacion. Do të flasim më shumë për të gjitha aspektet e skedarëve APK në. Tani ju duhet ta paketoni përsëri. Le të kujtojmë aplikacionin e përfunduar të paketuar në mendjen tonë si aplikacioni i modifikuar 2.

Tani do të shpjegojmë pse ishte e nevojshme të mbani mend aplikacionet si origjinale dhe të modifikuara 2. Aplikacioni i përpiluar nga programi ApkTool (ose duke përdorur një shtesë grafike të ndërfaqes së përdoruesit si SmartApkTool) nuk do të funksionojë, por ky nuk është problem. Ne kryejmë veprimet e mëposhtme:

Mbledhja e skedarëve të tillë përsëri në APK është mjaft e thjeshtë. Për ta bërë këtë, duhet të ekzekutoni apktool me flamurin e duhur të ndërtimit dhe t'i kaloni shtegun në dosje me aplikacionin e dekompiluar brenda. Për shembull, nëse kemi një dosje aplikacioni që ndodhet në të njëjtën direktori si apktool, atëherë komanda do të duket kështu:

Guaskë

java -jar apktool.jar b app

java - jar apktool .jar b app

Pas montimit, skedari i përfunduar APK do të gjendet në drejtori aplikacion/ndërtim. Më pas duhet të nënshkruani APK-në. Kjo bëhet për të siguruar që aplikacioni të funksionojë në pajisjet ku korrigjimi i gabimeve është i ndaluar. Kjo është, nisja e aplikacioneve të panënshkruara në pajisje të tilla është e ndaluar. Mund të lexoni më shumë rreth certifikatave dixhitale dhe procedurës së nënshkrimit të skedarëve këtu.

Nënshkrimi i një skedari është shumë i thjeshtë: ekziston një mjet i veçantë për këtë që quhet signapk. Duhet të lansohet duke kaluar së pari certifikatat si argumente, më pas shtegun drejt aplikacionit dhe në fund shtegun për aplikacionin e nënshkruar (rezultati, ku duhet ruajtur). Duket diçka si kjo:

Guaskë

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

Ku mund të merrni një certifikatë të tillë, ju pyesni? Certifikatat mund të gjenden në internet. Ose gjenerojeni vetë. Mund të gjenden udhëzime të hollësishme për konfigurimin dhe gjenerimin e të gjithë skedarëve të nevojshëm, për shembull, .

konkluzioni

Siç mund ta shihni, dekompilimi dhe montimi i skedarëve APK është një proces mjaft i thjeshtë, i cili, përveç kësaj, mund të automatizohet, duke e bërë më të lehtë punën e studiuesit. Vetë makina virtuale Dalvik është gjithashtu e lehtë për t'u mësuar dhe hapur, gjë që, nga njëra anë, zvogëlon pengesën e hyrjes për zhvilluesit, nga ana tjetër, është arsyeja kryesore për një përqindje kaq të madhe të piraterisë në platformën Android. Kjo është pjesërisht arsyeja pse zhvilluesit e lojërave, për shembull, përgjithësisht nuk janë të interesuar të lëshojnë lojëra interesante me një komplot. Është shumë më fitimprurëse, duke pasur parasysh qëndrimin aktual të përdoruesve, të thumbash ferma me donacione që janë jashtëzakonisht të ngjashme me njëra-tjetrën. Prandaj, ne blejmë aplikacione, mbështesim zhvilluesit dhe, si rezultat, marrim përmbajtje interesante. Por nuk ka absolutisht nevojë për të dhuruar!

Faleminderit të gjithëve, shihemi përsëri.