Hogyan lehet megnyitni az APK-t és hogyan kell szerkeszteni? apktool használata Apk fájl szétszedésére és összeállítására szolgáló program

Néha egyes Android-alkalmazások valamilyen módon nem felelnek meg a felhasználónak. Ilyen például a tolakodó reklám. És az is előfordul, hogy a program mindenkinek jó, de a fordítás benne vagy ferde, vagy teljesen hiányzik. Vagy például a program próbaverzió, de nincs mód a teljes verzió beszerzésére. Hogyan lehet változtatni a helyzeten?

Bevezetés

Ebben a cikkben arról fogunk beszélni, hogyan lehet szétszedni az APK-csomagot egy alkalmazással, megnézzük a belső szerkezetét, szétszedjük és visszafordítjuk a bájtkódot, valamint megpróbálunk több olyan változtatást végrehajtani az alkalmazásokon, amelyek bizonyos előnyökkel járhatnak.

Ahhoz, hogy mindezt saját kezűleg megtehesd, legalább alapszintű ismeretekre lesz szükséged a Java nyelvről, amelyen az Android alkalmazások íródnak, és az XML nyelvről, amelyet mindenhol használnak az Androidban – magának az alkalmazásnak és hozzáférési jogainak leírásától a karakterláncok tárolásáig. jelenik meg a képernyőn. Szüksége lesz speciális konzolszoftver használatának képességére is.

Tehát mi az az APK-csomag, amelyben az összes Android-szoftver el van terjesztve?

Alkalmazás dekompiláció

Ebben a cikkben csak szétszerelt alkalmazáskóddal dolgoztunk, de ha komolyabb változtatásokat hajtanak végre a nagy alkalmazásokban, akkor a smali kód megértése sokkal nehezebb lesz. Szerencsére a dex kódot vissza tudjuk fordítani Java kódra, ami ugyan nem eredeti és nem is visszafordított, de sokkal könnyebben olvasható és megérthető az alkalmazás logikája. Ehhez két eszközre lesz szükségünk:

  • A dex2jar a Dalvik bájtkód JVM bájtkódra fordítója, amely alapján Java nyelvű kódot kaphatunk;
  • A jd-gui maga egy visszafejtő, amely lehetővé teszi, hogy olvasható Java kódot kapjon a JVM bájtkódból. Alternatív megoldásként használhatja a Jad-t (www.varaneckas.com/jad); Bár meglehetősen régi, bizonyos esetekben olvashatóbb kódot generál, mint a Jd-gui.

Így kell őket használni. Először elindítjuk a dex2jar-t, argumentumként megadva az apk-csomag elérési útját:

% dex2jar.sh mail.apk

Ennek eredményeként az aktuális könyvtárban megjelenik a mail.jar Java csomag, amely már megnyitható jd-gui-ban a Java kód megtekintéséhez.

APK-csomagok rendezése és átvétele

Az Android-alkalmazáscsomagok lényegében egy normál ZIP-fájl, amelynek tartalmának megtekintéséhez vagy kibontásához nincs szükség speciális eszközökre. Elég egy archiváló - 7zip Windowshoz vagy konzolos kicsomagolás Linuxon. De ez a burkolatról szól. Mi van benne? Általában a következő szerkezettel rendelkezünk belül:

  • META-INF/- tartalmazza az alkalmazás digitális tanúsítványát, amely azonosítja annak készítőjét, valamint a csomagfájlok ellenőrző összegeit;
  • res/ - különféle erőforrások, amelyeket az alkalmazás a munkája során használ, például képek, a felület deklaratív leírása, valamint egyéb adatok;
  • AndroidManifest.xml- a pályázat leírása. Ez magában foglalja például a szükséges engedélyek listáját, a szükséges Android verziót és a szükséges képernyőfelbontást;
  • osztályok.dex- lefordított alkalmazás bytecode a Dalvik virtuális géphez;
  • források.arsc- források is, de más jellegűek - különösen karakterláncok (igen, ez a fájl oroszosításra használható!).

A felsorolt ​​fájlok és könyvtárak, ha nem is az összesben, de talán az APK-k túlnyomó többségében megtalálhatók. Van azonban még néhány, nem túl gyakori fájl/könyvtár, amelyet érdemes megemlíteni:

  • eszközök- az erőforrások analógja. A fő különbség az, hogy egy erőforrás eléréséhez ismerni kell az azonosítóját, de az eszközök listája dinamikusan beszerezhető az alkalmazás kódjában található AssetManager.list() metódussal;
  • lib- NDK-val (Native Development Kit) írt natív Linux-könyvtárak.

Ezt a könyvtárat a játékgyártók használják, akik oda helyezik el C/C++ nyelven írt játékmotorjaikat, valamint a nagy teljesítményű alkalmazások (például Google Chrome) készítői. Kitaláltuk a készüléket. De hogyan juthat hozzá az Önt érdeklő alkalmazás csomagfájljához? Mivel root nélkül nem lehet az APK fájlokat felvenni az eszközről (a /data/app könyvtárban találhatók), és a rootolás nem mindig tanácsos, legalább háromféleképpen juthat el az alkalmazásfájl a számítógépére:

  • APK Downloader bővítmény Chrome-hoz;
  • Valódi APK Leecher alkalmazás;
  • különféle fájltárolás és Varezniks.

Hogy melyiket használjuk, az ízlés dolga; mi inkább különálló alkalmazásokat használunk, ezért leírjuk a Real APK Leecher használatát, különösen mivel Java nyelven íródott, és ennek megfelelően Windows vagy Nix alatt is működik.

A program elindítása után három mezőt kell kitölteni: Email, Jelszó és Eszközazonosító - és válasszon nyelvet. Az első kettő az eszközön használt Google-fiókjának e-mail címe és jelszava. A harmadik az eszközazonosító, amelyet a tárcsázó kódjának beírásával kaphatunk meg # #8255## majd keresse meg az Eszközazonosító sort. Kitöltéskor csak az azonosítót kell megadni az android- előtag nélkül.

A kitöltés és mentés után gyakran megjelenik a „Hiba a szerverhez való csatlakozáskor” üzenet. Ennek semmi köze a Google Playhez, ezért nyugodtan hagyja figyelmen kívül, és keressen olyan csomagokat, amelyek érdeklik.

Megtekintés és módosítás

Tegyük fel, hogy talált egy olyan csomagot, amely érdekli, letöltötte, kicsomagolta... és amikor megpróbált megnézni egy XML-fájlt, meglepődve tapasztalta, hogy a fájl nem szöveges. Hogyan lehet visszafejteni és általában hogyan kell csomagokkal dolgozni? Valóban szükséges az SDK telepítése? Nem, egyáltalán nem szükséges telepíteni az SDK-t. Valójában az APK-csomagok kibontásának, módosításának és csomagolásának minden lépéséhez a következő eszközökre van szükség:

  • ZIP archiváló ki- és csomagoláshoz;
  • smali- Dalvik virtuális gép bytecode assembler/disassembler (code.google.com/p/smali);
  • aapt- eszköz az erőforrások csomagolására (alapértelmezés szerint az erőforrásokat bináris formában tárolják az alkalmazás teljesítményének optimalizálása érdekében). Az Android SDK része, de külön is beszerezhető;
  • aláíró- módosított csomag digitális aláírására szolgáló eszköz (bit.ly/Rmrv4M).

Ezeket az eszközöket külön-külön is használhatja, de ez kényelmetlen, ezért érdemes magasabb szintű, ezekre épített szoftvereket használni. Ha Linuxon vagy Mac OS X-en dolgozik, van egy apktool nevű eszköz. Lehetővé teszi az erőforrások eredeti formájukban való kicsomagolását (beleértve a bináris XML és arsc fájlokat), a megváltozott erőforrásokkal rendelkező csomagok újraépítését, de nem tudja, hogyan kell aláírni a csomagokat, ezért manuálisan kell futtatnia az aláíró segédprogramot. Annak ellenére, hogy a segédprogram Java nyelven íródott, telepítése meglehetősen nem szabványos. Először magát a jar fájlt kell beszereznie:

$ 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

Ha Windowson dolgozol, akkor van rá egy kiváló eszköz a Virtuous Ten Studio, amely szintén felhalmozza ezeket az eszközöket (beleértve magát az apktool-t is), de CLI felület helyett intuitív grafikus felületet biztosít a felhasználónak, amellyel néhány kattintással kicsomagolási, szétszerelési és visszafordítási műveleteket hajthat végre. Ez az eszköz Donation-ware, azaz néha megjelennek az ablakok, amelyek engedélyt kérnek, de végül ez elviselhető. Nincs értelme leírni, mert pár perc alatt érthető a felület. De az apktool konzol jellegéből adódóan részletesebben tárgyalandó.


Nézzük az apktool beállításait. Röviden, három alapvető parancs létezik: d (dekódolás), b (build) és if (keretrendszer telepítése). Ha az első két paranccsal minden világos, akkor mit csinál a harmadik, feltételes utasítás? Kibontja a megadott UI keretrendszert, ami olyan esetekben szükséges, amikor bármilyen rendszercsomagot boncolgat.

Nézzük meg az első parancs legérdekesebb lehetőségeit:

  • -s- ne szedje szét a dex fájlokat;
  • -r- ne csomagolja ki az erőforrásokat;
  • -b- ne illesszen be hibakeresési információkat a dex fájl szétszerelésének eredményébe;
  • --frame-path- használja a megadott UI keretrendszert az apktool-ba beépített helyett. Most nézzünk meg néhány lehetőséget a b parancshoz:
  • -f- kényszerszerelés a változtatások ellenőrzése nélkül;
  • -a- adja meg az aapt (APK archívum létrehozására szolgáló eszköz) elérési útját, ha valamilyen okból más forrásból szeretné használni.

Az apktool használata nagyon egyszerű, csak adja meg az egyik parancsot és az APK elérési útját, például:

$ apktool d mail.apk

Ezt követően a csomag összes kibontott és szétszedett fájlja megjelenik a levelezőkönyvtárban.

Készítmény. A reklámozás letiltása

Az elmélet persze jó, de miért van rá szükség, ha nem tudunk mit kezdeni a kicsomagolt csomaggal? Próbáljuk meg az elméletet a javunkra alkalmazni, nevezetesen módosítsunk valamilyen szoftvert úgy, hogy az ne mutasson nekünk reklámot. Legyen például Virtual Torch – virtuális fáklya. Ez a szoftver ideális számunkra, mert zsúfolásig tele van bosszantó reklámokkal, ráadásul elég egyszerű ahhoz, hogy ne vesszen el a kód dzsungelében.


Tehát a fenti módszerek egyikével töltse le az alkalmazást a piacról. Ha a Virtuous Ten Studio használata mellett dönt, egyszerűen nyissa meg az APK fájlt az alkalmazásban, és csomagolja ki, hozzon létre egy projektet (Fájl -> Új projekt), majd válassza a Fájl importálása lehetőséget a projekt helyi menüjében. Ha a választása az apktoolra esett, akkor csak futtasson egy parancsot:

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

Ezt követően a com.kauf.particle.virtualtorch könyvtárban egy, az előző részben leírthoz hasonló fájlfa jelenik meg, de a dex fájlok és egy apktool.yml fájl helyett egy további smali könyvtárral. Az első az alkalmazás végrehajtható dex fájljának szétszedett kódját tartalmazza, a második az apktool számára a csomag visszaállításához szükséges szolgáltatási információkat tartalmazza.

Az első hely, amelyet érdemes megvizsgálnunk, természetesen az AndroidManifest.xml. És itt rögtön a következő sorral találkozunk:

Nem nehéz kitalálni, hogy ez a felelős azért, hogy az alkalmazás engedélyeket adjon az internetkapcsolat használatához. Valójában, ha csak meg akarunk szabadulni a reklámoktól, nagy valószínűséggel csak le kell tiltanunk az alkalmazást az internetről. Próbáljuk meg ezt megtenni. Töröljük a megadott sort, és megpróbáljuk felépíteni a szoftvert az apktool segítségével:

$ apktool b com.kauf.particle.virtualtorch

Az eredményül kapott APK-fájl a com.kauf.particle.virtualtorch/build/ könyvtárban fog megjelenni. Telepíteni azonban nem lesz lehetséges, mivel nem rendelkezik digitális aláírással és fájlellenőrző összegekkel (egyszerűen nincs META-INF/ könyvtára). A csomagot az apk-signer segédprogrammal kell aláírnunk. Elindult. A felület két lapból áll - az elsőn (Key Generator) kulcsokat hozunk létre, a másodikon (APK Signer) aláírjuk. Privát kulcsunk létrehozásához töltse ki a következő mezőket:

  • Célfájl- kulcstároló kimeneti fájl; általában egy pár kulcsot tárol;
  • JelszóÉs megerősít- jelszó a tárolóhoz;
  • Álnév- a kulcs neve a tárolóban;
  • Alias ​​jelszóÉs megerősít- titkos kulcs jelszava;
  • Érvényesség- érvényességi idő (években). Az alapértelmezett érték az optimális.

A többi mezőt általában nem kötelező kitölteni, de legalább egyet ki kell tölteni.


FIGYELEM

Egy alkalmazás apk-signer használatával történő aláírásához telepítenie kell az Android SDK-t, és meg kell adnia a teljes elérési utat az alkalmazás beállításaiban.

Minden információ csak tájékoztató jellegű. Sem a szerkesztők, sem a szerző nem vállal felelősséget a cikk anyagai által okozott esetleges károkért.

Most már aláírhatja az APK-t ezzel a kulccsal. Az APK-aláíró lapon válassza ki az újonnan generált fájlt, adja meg a jelszót, a kulcs álnevet és a jelszót, majd keresse meg az APK fájlt, és bátran kattintson az „Aláírás” gombra. Ha minden jól megy, a csomagot aláírják.

INFO

Mivel a csomagot saját kulcsunkkal írtuk alá, az ütközni fog az eredeti alkalmazással, ami azt jelenti, hogy amikor a piacon keresztül próbáljuk frissíteni a szoftvert, hibaüzenetet kapunk.

Digitális aláírás csak harmadik féltől származó szoftverekhez szükséges, így ha úgy módosítja a telepített rendszeralkalmazásokat, hogy átmásolja azokat a /system/app/ könyvtárba, akkor nem kell aláírnia azokat.

Ezután töltse le a csomagot okostelefonjára, telepítse és indítsa el. Voila, a hirdetés eltűnt! Ehelyett azonban egy üzenet jelent meg, hogy nincs internetünk, vagy nem rendelkezünk a megfelelő jogosultságokkal. Elméletileg ez elég is lehet, de az üzenet bosszantónak tűnik, és hogy őszinte legyek, szerencsénk volt egy hülye alkalmazással. Az általában írt szoftver valószínűleg tisztázza a hitelesítő adatait, vagy ellenőrzi az internetkapcsolatot, és egyébként egyszerűen megtagadja az indítást. Hogyan lehet ebben az esetben? Természetesen módosítsa a kódot.

Jellemzően az alkalmazás szerzői speciális osztályokat hoznak létre a hirdetések megjelenítésére és ezen osztályok metódusainak meghívására, amikor az alkalmazás vagy annak egyik „tevékenysége” (egyszerű szóval alkalmazásképernyők) elindul. Próbáljuk meg megtalálni ezeket az osztályokat. Bemegyünk a smali könyvtárba, majd a com-ba (az org-ban csak a cocos2d nyílt grafikus könyvtár van), majd a kauf-ra (itt van, mert ez a fejlesztő neve és ott van az összes kódja) - és itt van, a marketing címtárat. Belül egy csomó smali kiterjesztésű fájlt találunk. Ezek osztályok, és ezek közül a legfigyelemreméltóbb az Ad.smali osztály, amelynek nevéből könnyen kitalálható, hogy ez az, amelyik reklámot jelenít meg.

Módosíthatnánk működésének logikáját, de sokkal egyszerűbb lenne egyszerűen eltávolítani a metódusainak hívását magából az alkalmazásból. Ezért elhagyjuk a marketing könyvtárat, és a szomszédos részecskekönyvtárba, majd a virtualtorch-ba lépünk. A MainActivity.smali fájl itt külön figyelmet érdemel. Ez egy szabványos Android-osztály, amelyet az Android SDK hoz létre, és az alkalmazás belépési pontjaként telepíti (hasonlóan a C fő funkciójával). Nyissa meg a fájlt szerkesztésre.

Belül smali kód van (helyi assembler). Alacsony szintű jellege miatt meglehetősen zavaros és nehezen olvasható, ezért nem fogjuk tanulmányozni, hanem egyszerűen megkeressük a kódban az összes Reklám osztályra vonatkozó hivatkozást és kommentáljuk azokat. Beírjuk a „Hirdetés” sort a keresésbe, és eljutunk a 25. sorhoz:

Field privát hirdetés:Lcom/kauf/marketing/Ad;

Itt egy hirdetésmező jön létre egy hirdetési osztály objektum tárolására. A sor elé ### jelet helyezünk el. Folytatjuk a keresést. 423. sor:

Új példány v3, Lcom/kauf/marketing/Ad;

Itt történik az objektum létrehozása. Kommentáljunk. Folytatjuk a keresést, és a 433-as, 435-ös, 466-os, 468-as, 738-as, 740-es, 800-as és 802-es sorokban megtaláljuk az Ad osztály metódusainak hívását. Kommentáljunk. Úgy néz ki, ez az. spóroljunk. Most újra össze kell rakni a csomagot, és ellenőrizni kell a működőképességet és a reklámok jelenlétét. A kísérlet tisztasága érdekében visszaküldjük az AndroidManifest.xml fájlból eltávolított sort, összeállítjuk a csomagot, aláírjuk és telepítjük.

Tengerimalacunk. Reklám látható

Hoppá! A reklám csak az alkalmazás futása közben tűnt el, de a főmenüben maradt, amit a szoftver indításakor látunk. Szóval várj, de a belépési pont a MainActivity osztály, és az alkalmazás futása közben a hirdetés eltűnt, de a főmenüben maradt, tehát más a belépési pont? A valódi belépési pont azonosításához nyissa meg újra az AndroidManifest.xml fájlt. És igen, a következő sorokat tartalmazza:

Azt mondják nekünk (és ami még fontosabb, az androidnak), hogy a Start nevű tevékenységet el kell indítani az android.intent.action.MAIN intent (esemény) generálására az android.intent.category.LAUNCHER kategóriából. Ez az esemény akkor jön létre, amikor megérinti az alkalmazás ikonját az indítóban, így ez határozza meg a belépési pontot, nevezetesen a Start osztályt. Valószínűleg a programozó először írt egy főmenü nélküli alkalmazást, aminek a belépési pontja a szokásos MainActivity osztály volt, majd hozzáadott egy új menüt tartalmazó és a Start osztályban leírt ablakot (tevékenységet), és manuálisan tette be a bejegyzést. pont.

Nyissa meg a Start.smali fájlt, és ismét keresse meg a „Ad” sort, a 153. és 155. sorban találunk említést a FirstAd osztályról. A forráskódban is benne van, és a névből ítélve felelős a hirdetések főképernyőn való megjelenítéséért. Nézzük tovább, ott van a FirstAd osztály példányának létrehozása és egy intent, amely a kontextus szerint ehhez a példányhoz kapcsolódik, majd a cond_10 címke, amelyre a feltételes átmenet pontosan egy példány létrehozása előtt történik. az osztályból:

If-ne p1, v0, :cond_10 .line 74 new-példány v0, Landroid/content/Intent; ... :cond_10

Valószínűleg a program valahogy véletlenszerűen kiszámítja, hogy a főképernyőn megjelenjenek-e a reklámok, és ha nem, akkor közvetlenül a cond_10-re ugrik. Rendben, egyszerűsítsük a feladatát, és cseréljük ki a feltételes átmenetet egy feltétel nélkülire:

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

A kódban már nincs említés a FirstAd-ról, ezért bezárjuk a fájlt, és az apktool segítségével újra összeállítjuk a virtuális zseblámpánkat. Másolja át okostelefonjára, telepítse, indítsa el. Voilá, minden reklám eltűnt, amihez mindannyiunknak gratulálunk.

Eredmények

Ez a cikk csak egy rövid bevezetés az Android-alkalmazások feltörésének és módosításának módszereibe. Sok probléma a színfalak mögött maradt, például a védelem eltávolítása, a zavart kód elemzése, az alkalmazásforrások fordítása és cseréje, valamint az Android NDK-val írt alkalmazások módosítása. Az alapvető ismeretek birtokában azonban csak idő kérdése, hogy mindezt kitaláljuk.

Ebből a cikkből megtudhatja, miből áll az Android alkalmazás, hogyan lehet megnyitni egy APK fájlt és milyen programokkal.

Mi az APK fájl?

Az APK az Android operációs rendszer egy formátuma, amelyet az archivált végrehajtható alkalmazásfájlokhoz használnak, és maga a fájl neve bármi lehet, de a kiterjesztés csak így nézzen ki.apk. Az APK analógjai más operációs rendszerekben a .msi a Windowsban, a .sis a Symbianban, az .rpm vagy a .deb a Linuxban.

Lássuk, mi van belül
Valójában az .apk egy ZIP-archívum, így a belső eszközt bármilyen fájlkezelővel vagy archiválóval megtekintheti, például WinRAR vagy X-plore mobilalkalmazás segítségével.




Nem szabad megfeledkezni arról, hogy a belső erőforrásokhoz csak vizuálisan lehet hozzáférni, a szerkesztési lehetőségek rendkívül korlátozottak.

Nézzük a szerkezetet
Az .apk-ban számos fájlt és mappát látunk, nézzük meg, mire valók:

  • Az AndroidManifest.xml az alkalmazás egyfajta „útlevele”, amelyből megtudhatja az összes fő pontot, követelményt, verziót, engedélyeket stb.
  • META-INF Ez a fájl metaadatokat tartalmaz, azaz adatokkal kapcsolatos adatokat, ellenőrző összegeket, adatok elérési útvonalait, erőforrások útvonalait és ellenőrző összegeit, tanúsítványokat. Ezt a fájlt bármilyen szövegszerkesztővel megnyithatja, de ajánlott a Notepad++ használata.
  • A res mappa tartalmazza az összes programforrást, grafikát, például ikonokat, képeket, szöveget és grafikus felületelemeket. Könnyen hozzáférhet a mappához is.
  • A classes.dex a Dalvik VM virtuális gép által végrehajtott közvetlen alkalmazáskód, csak az .apk visszafordításával láthatja, hogy mi van ebben a fájlban, erről más cikkekben fogunk beszélni. resources.arsc - lefordított XML fájl, ez a fájl a programban érintett összes erőforrásról tartalmaz adatokat.
  • lib - natív könyvtárakat tartalmazó mappa, amelynek erőforrásai csak speciális programok használatával érhetők el. Az APK-ban is lehetnek olyan fájlok és mappák, mint com, org, udk, de nem mindig.

Most nézzük meg részletesebben a belső felépítést, ehhez szükségünk van egy dekompiláló programra, Java-ra és egy APK fájlra. Az .apk szétszedésének fő eszköze az Apktool, de ez a program csak vonalról működik, ami nem túl kényelmes. A gyorsabb és kényelmesebb elemzéshez használhatja az APKinget, ez továbbra is ugyanaz az Apktool, de a helyi menüből is működik.


Így telepítjük az APKing-t, mint minden Windows-alkalmazást, és miután kiválasztottuk az .apk-t, kattintsunk rá a jobb egérgombbal és a Shift egyszerre, ami után a következőket látjuk:



És válassza ki a szükséges műveletet, például teljesen dekompilálja, majd a program befejezi a műveletet, és létrehoz egy azonos nevű mappát.



A mappa megnyitásával hozzáférünk az APK fájl összes erőforrásához.



Most minden szöveges fájl szerkeszthető, az alapvető szabályok betartása mellett használhatja a népszerű Notepad++ programot, például az AndroidManifest.xml-t.

Említettem a SmartAPKTool alkalmazást. Kibonthatja, tömörítheti és aláírhatja a módosított apk fájlokat. Előnye a grafikus felület jelenléte. Van azonban egy komoly hátránya is. A SmartAPKTool hosszú ideje nem frissült, és a program nem csomagolja ki megfelelően az alkalmazásokat az Android legújabb verzióihoz. Ezért itt megpróbálom elmagyarázni, hogyan kell használni az alkalmazást ezekre a célokra apktool.

1. megjegyzés.
A SmartAPKTool program továbbra is kényelmesen használható összegyűjtött apk fájlok aláírására.
Jegyzet 2.
A cikkben említett programokra mutató hivatkozások ↓

Program apktool nem rendelkezik grafikus felülettel. Ez hátrány azok számára, akik nem szoktak parancssorral dolgozni. De van egy plusz is: a SmartAPKTool-lal ellentétben az összes hibát látni fogjuk, ami azt jelenti, hogy tudni fogjuk, mit kell javítani.

Töltsünk le két archívumot: az egyik közös minden rendszerre, a másik a mi rendszerünkre (a példában Windows):

Csomagoljuk ki mindkét archívumot ugyanabba az üres mappába (példánkban: C:\apktool\). A tartalmának így kell kinéznie:

Mostantól használhatjuk a programot apktool.

3. megjegyzés.
A Linux 64 bites verzióit használóknak telepíteniük kell az ia32-libs csomagot:

sudo apt-get install ia32-libs

Ugyanabba a mappába helyezzük a fájlt, amelyet ki kell csomagolnunk. Például legyen az orig.apk neve
Nyomja le és tartsa lenyomva a Shift billentyűt, és kattintson jobb gombbal a mappában lévő üres helyre (ne kattintson a fájlokra!). Ezután válassza a „Parancsablak megnyitása” lehetőséget. A megjelenő konzolba írja be:

apktool dekódolja az orig.apk-t

A fájl ki lesz csomagolva:

Most van egy mappánk a kicsomagolt alkalmazással a C:\apktool\ könyvtárban. Ugyanaz a neve, mint a forrásfájl, kiterjesztés nélkül: C:\apktool\orig\ . A forrásfájlokat az Android: hogyan telepítsünk két egyforma alkalmazást egy telefonra című cikkben leírtak szerint módosíthatjuk. Miután elvégeztük a változtatásokat, összegyűjtjük az alkalmazás másolatát úgy, hogy a forrásfájlokat apk-ba csomagoljuk:

apktool build orig result.apk

Itt az result.apk az a fájlnév, amelyet a másolatkészítéshez találtunk ki. Ha nincs hiba, a fájl összeáll:

A többi túlmutat a cikk keretein:

  1. Ha az összeszerelés során hibák lépnek fel, meg kell találni az okát és ki kell javítani.
  2. Nincs más hátra, mint aláírni a kapott result.apk fájlt. Ezt a fent említett SmartAPKTool segítségével lehet megtenni; Minden intuitív. Vannak más módok is az apk fájl aláírására.
  3. Hibák előfordulhatnak a másolat telepítésekor, indítása vagy működése során is. Az Android SDK-ban található adb segédprogrammal kell elkapniuk őket.

Az alkalmazást alá kell írnia, különben nem települ. A hibák nem fordulnak elő olyan gyakran, és az ezeket okozó leggyakoribb problémákat a cikk ismerteti

Az Android-eszközök különféle firmware-jének használata során néha szükségessé válik az operációs rendszerbe épített rendszeralkalmazások ilyen vagy olyan módosítása. Ebben az anyagban részletesen megvizsgáljuk ezt a kérdést.

Természetesen a rendszer-APK-fájlt szét kell szerelni, majd újra össze kell szerelni, hogy megfelelően és stabilan működjön. Lépésről lépésre gondoljuk át, mit kell ehhez tennünk.

Először is el kell végeznie a rendszer-APK-fájlok deodexelési folyamatát. Megmondjuk, hogyan kell ezt megtenni.

Tehát az .apk fájl deodexelése és visszafordítása megtörtént. Elemezzük a minket érdeklő alkalmazást, legyen rajta a neve, a példa érthetőség kedvéért, keretrendszer- res. apk. A fejünkben úgy emlékszünk rá, mint az eredeti alkalmazásra.

Tegyük fel, hogy minden szükséges változtatást végrehajtottunk az alkalmazáson. Az APK-fájlok minden vonatkozásáról többet fogunk beszélni. Most vissza kell csomagolnia. Emlékezzünk az elkészült csomagolt alkalmazásra elménkben módosított alkalmazásként 2.

Most elmagyarázzuk, miért volt szükség gondolatban az alkalmazásokat eredetiként és módosítottként emlékezni 2. Az ApkTool programmal (vagy grafikus felhasználói felület-kiterjesztéssel, például SmartApkTool-al) összeállított alkalmazás nem fog működni, de ez nem probléma. A következő műveleteket hajtjuk végre:

Az ilyen fájlok visszagyűjtése APK-ba meglehetősen egyszerű. Ehhez le kell futtatnia az apktool-t a megfelelő build jelzővel, és át kell adnia annak a mappának az elérési útját, amelyben a visszafejtett alkalmazás található. Például, ha van egy alkalmazásmappánk, amely ugyanabban a könyvtárban található, mint az apktool, akkor a parancs így néz ki:

Héj

java -jar apktool.jar b alkalmazás

java - jar apktool .jar b alkalmazás

Az összeállítás után a kész APK fájl a könyvtárban található app/build. Ezután alá kell írnia az APK-t. Ez annak biztosítására szolgál, hogy az alkalmazás olyan eszközökön működjön, amelyeken tilos a hibakeresés. Vagyis tilos aláíratlan alkalmazásokat indítani ilyen eszközökön. A digitális tanúsítványokról és a fájl aláírási eljárásról itt olvashat bővebben.

A fájl aláírása nagyon egyszerű: erre van egy speciális segédprogram, a signapk. Úgy kell elindítani, hogy először argumentumként adjuk át a tanúsítványokat, majd az alkalmazás elérési útját, végül pedig az aláírt alkalmazás elérési útját (az eredményt, hova kell menteni). Valahogy így néz ki:

Héj

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

Hol lehet ilyen bizonyítványt szerezni? A tanúsítványok megtalálhatók az interneten. Vagy generáld magad. Az összes szükséges fájl beállításához és generálásához részletes útmutatást talál például a .

Következtetés

Mint látható, az APK fájlok dekompilálása és összeállítása meglehetősen egyszerű folyamat, amely ráadásul automatizálható, megkönnyítve a kutató munkáját. Maga a Dalvik virtuális gép is könnyen megtanulható és megnyitható, ami egyrészt csökkenti a fejlesztők belépési gátját, másrészt ez a fő oka az Android platformon ekkora százalékos kalózkodásnak. Részben ez az oka annak, hogy a játékfejlesztőket például általában nem érdekli érdekes, cselekményes játékok kiadása. A felhasználók jelenlegi attitűdje mellett sokkal jövedelmezőbb az egymásra feltűnően hasonló adományozású szegecsfarmok. Ezért alkalmazásokat vásárolunk, támogatjuk a fejlesztőket, és ennek eredményeként érdekes tartalmakat kapunk. De egyáltalán nem kell adományozni!

Köszönöm mindenkinek, találkozunk.