Menü
Ingyen
Bejegyzés
itthon  /  Multimédia/ Hogyan készítsünk apk fájlt. A rendszer-APK-k szerkesztésének árnyalatai

Hogyan készítsünk apk fájlt. A rendszer-APK-k szerkesztésének árnyalatai

Említettem a SmartAPKTool alkalmazást. Képes kicsomagolni, becsomagolni és aláírni 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 régóta nem frissült, és a program helytelenül csomagolja ki és csomagolja be az alkalmazásokat friss verziók Android. Ezért itt megpróbálom elmagyarázni, hogyan kell használni az alkalmazást ezekre a célokra. apk eszköz.

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

Program apk eszköz nem rendelkezik grafikus felülettel. Ez hátrány azok számára, akik nem szoktak vele dolgozni parancs sor. De van egy plusz: a SmartAPKTool-lal ellentétben az összes hibát látni fogjuk, ami azt jelenti, hogy tudjuk, 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 (a példánkban C:\apktool\ ). A tartalmának így kell kinéznie:

Mostantól használhatjuk a programot apk eszköz.

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
Kattintás Shift billentyűés tartsa lenyomva, 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 az eredeti fájl, kiterjesztés nélkül: C:\apktool\orig\ . Változhatunk forrás fájlok pont az Android cikkben leírtak szerint: hogyan telepítsünk két azonos alkalmazást egy telefonra. A módosítások végrehajtása után elkészítjük az alkalmazás másolatát a forrásfájlok apk-ba történő becsomagolásával:

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 nincsenek hibák, akkor a fájl létrejön:

A többi nem tartozik a cikk hatálya alá:

  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. Marad az eredmény.apk fájl aláírása. Ez megtehető a SmartAPKTool segítségével, ahogy fentebb említettük; minden intuitív. Vannak más módok is az apk fájl aláírására.
  3. Egy másolat telepítésekor, amikor az elindul vagy fut, hibák is előfordulhatnak. Az Android SDK részét képező adb segédprogram használatával kell elkapniuk őket.

Az alkalmazást alá kell írni, különben nem kerül telepítésre. A hibák nem olyan gyakoriak, és az ezeket okozó leggyakoribb problémákat a cikk ismerteti.

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

Mi az APK fájl?

APK - működési formátum Android rendszerek, amely az archiválható végrehajtható alkalmazásfájlokhoz használatos, és maga a fájl neve bármi lehet, de a kiterjesztésnek csak .apk-nak kell lennie. 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
Alapvetően az .apk az ZIP archívum hát nézd meg belső szervezet bármelyiket használhatod fájl kezelő vagy egy archiváló, mint a WinRAR vagy mobilos alkalmazás Xplore.




Ugyanakkor érdemes megjegyezni, hogy a belső erőforrásokhoz csak vizuális hozzáférést kap, a szerkesztési lehetőségek rendkívül korlátozottak.

Vegye figyelembe 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 adatokat az adatokról, ellenőrző összegekről, adatútvonalakról, erőforrás útvonalakról és ellenőrző összegekről, tanúsítványokról. Ezt a fájlt bármelyik gombbal megnyithatja szöveg szerkesztő, de a Notepad++ ajánlott.
  • res mappa tartalmazza az összes programforrást, grafikát, például ikonokat, képeket, szöveget, grafikus felhasználói felület elemeit. Könnyen hozzáférhet a mappához is.
  • osztályok.dex – azonnali programozási kód A Dalvik VM virtuális gép által végrehajtott alkalmazást csak az .apk visszafordításával láthatja, 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álata esetén érhetők el. Az APK-ban is lehetnek olyan fájlok és mappák, mint com, org, udk, de nem mindig.

Most fontolja meg belső szerkezet részletesebben 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és érdekében 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 bármely Windows-alkalmazást, és az .apk-t kiválasztva rákattintunk a jobb egérgombbal és egyben a Shift billentyűvel, ami után a következőket fogjuk látni:



És kiválasztjuk a szükséges műveletet, például teljesen dekompilálni, 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.



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

Az Android-eszközök különféle firmware-jének használata során néha szükségessé válik a beépített rendszeralkalmazások módosítása operációs rendszer. Ebben a cikkben 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 nézzük meg, mit kell ehhez tenni.

Először is deodexelnie kell a rendszer APK fájljait. Megmondjuk, hogyan kell ezt megtenni.

Tehát az .apk fájl deodexelése és visszafordítása megtörtént. Elemezzük a számunkra érdekes alkalmazást, nevezzük a példa érthetősége érdekében, keretrendszer- res. apk. A fejben ú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 bővebben itt fogunk beszélni. Most vissza kell csomagolnunk. Emlékezzünk az elkészült csomagolt alkalmazásra a fejünkben, mint módosított alkalmazás 2.

Most elmagyarázzuk, miért volt szükség az elmében lévő alkalmazásokra eredetiként és módosítottként emlékezni 2. Az ApkTool programmal (vagy grafikus kiterjesztés használatával) felhasználói felület mint a SmartApkTool) az alkalmazás nem fog működni, de ez nem probléma. A következő műveleteket hajtjuk végre:

Néha egyes Android-alkalmazások valamilyen okból nem felelnek meg a felhasználónak. Ilyen például a bosszantó hirdetések. És ez így is történik - mindenki jó a programban, de csak a fordítás ferde, vagy teljesen hiányzik. Vagy például a program próba, és kap teljes verzió nincs lehetőség. Hogyan lehet változtatni a helyzeten?

Bevezetés

Ebben a cikkben arról fogunk beszélni, hogyan lehet szétszedni az APK-t 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 ilyen vagy olyan előnyöket hozhatnak számunkra.

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

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

Alkalmazás dekompiláció

A cikkben csak szétszedett alkalmazáskóddal dolgoztunk, azonban ha be nagy alkalmazások komolyabb változtatásokat végrehajtani, sokkal nehezebb lesz megérteni a smali kódot. Szerencsére a dex kódot vissza tudjuk fordítani Java kódra, ami ugyan nem eredeti és nem is visszafordítható, de sokkal könnyebben olvasható és megérthető az alkalmazás logikája. Ehhez két eszközre van szükségünk:

  • dex2jar - a Dalvik bájtkód fordítója JVM bájtkódra, amely alapján Java 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-et (www.varanecas.com/jad); bár elég régi, bizonyos esetekben olvashatóbb kódot generál, mint a Jd-gui.

Ezeket így kell 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 beszerzése

Nejlonzacskó android alkalmazások, valójában egy normál ZIP fájl, amelynek tartalmának megtekintéséhez és kicsomagolásához nincs szükség speciális eszközökre. Elég egy archiváló - 7zip Windowshoz vagy konzolos kicsomagolás Linuxban. De ez a burkolatról szól. Mi van benne? Belül általában a következő szerkezettel rendelkezünk:

  • META-INF/- tartalmazza az alkalmazás digitális tanúsítványát, amely tanúsí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 és 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 android verzióés a szükséges képernyőfelbontás;
  • 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 néhány kevésbé 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, míg az eszközök listája az alkalmazás kódjában található AssetManager.list() metódussal dinamikusan beszerezhető;
  • lib- NDK (Native Development Kit) segítségével írt natív Linux könyvtárak.

Ezt a könyvtárat használják a játékgyártók arra, hogy a C/C++ nyelven írt játékmotorjukat ott helyezzék el, valamint a nagy teljesítményű alkalmazások készítői (pl. Google Chrome). Megértette a készüléket. De hogyan lehet hozzájutni az érdekelt alkalmazás csomagfájljához? Mivel rootolás nélkül nem lehet letölteni az APK fájlokat az eszközről (az / data / app könyvtárban vannak), é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épre:

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

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

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 tárcsázásával kaphat 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. Semmi köze hozzá A Google Play, ezért nyugodtan hagyja figyelmen kívül, és keressen olyan csomagokat, amelyek érdeklik.

Felülvizsgálat é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 megtekinteni egy XML-fájlt, meglepődve tapasztalta, hogy a fájl nem szöveges fájl. Hogyan lehet visszafejteni és általában hogyan kell csomagokkal dolgozni? Valóban szükséges az SDK telepítése? Nem, nem kell telepítenie az SDK-t. Valójában az APK-csomagok kicsomagolá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 bájtkód összeszerelő/bontó (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 Linuxot vagy Mac OS X-et használ, van egy apktool nevű eszköz. Lehetővé teszi az erőforrások eredeti formájukba való kicsomagolását (beleértve a bináris XML és arsc fájlokat), a csomag újraépítését a módosított erőforrásokkal, 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 Virtual Ten Studio , amely szintén felhalmozza ezeket az eszközöket (beleértve magát az apktool-t is), de a CLI felület helyett intuitív megoldást nyújt a felhasználónak. GUI, 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, vagyis időnként megjelennek az ablakok, amelyek engedélyt kérnek, de ez végül is elviselhető. Leírni nincs értelme, mert pár perc alatt megérted a felületet. De az apktool konzol jellegéből adódóan részletesebben tárgyalandó.


Fontolja meg az apktool beállításait. Röviden, három fő 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, a feltételes operátor? Kibontja a megadott UI keretrendszert, amelyre egy rendszercsomag boncolásakor van szükség.

Tekintsük 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 a beépített apktool helyett. Most fontoljon 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 (az 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ű, mindössze annyit kell tennie, hogy megadja az egyik parancsot és az APK elérési útját, például:

$ apktool d mail.apk

Ezt követően az összes kibontott és szétszedett csomagfájl megjelenik a levelezőkönyvtárban.

Készítmény. Hirdetések 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 a saját hasznunkra alkalmazni az elméletet, mégpedig úgy, hogy néhány szoftvert úgy módosítunk, hogy az ne mutasson nekünk hirdetéseket. Legyen például Virtual Torch – virtuális fáklya. Számunkra ez a szoftver tökéletes, mert tele van idegesítő reklámokkal, és elég egyszerű ahhoz, hogy ne vesszen el a kód vadonjában.


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, nyissa meg az APK fájlt az alkalmazásban, és csomagolja ki, amelyhez hozzon létre egy projektet (Fájl -> Új projekt), majd helyi menü projektet, válassza a Fájl importálása lehetőséget. Ha a választás az apktool-ra esett, akkor elegendő egy parancsot végrehajtani:

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

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

Az első hely, amelyet meg kell keresnünk, természetesen az AndroidManifest.xml. És itt azonnal találkozunk a következő sorral:

Könnyen kitalálható, hogy ő a felelős azért, hogy az alkalmazás engedélyeit megadja az internetkapcsolat használatához. Sőt, ha csak meg akarunk szabadulni a reklámoktól, nagy valószínűséggel elég lesz letiltanunk az alkalmazást az internetről. Próbáljuk meg csinálni. Töröl megadott karakterláncés próbálja meg 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. Viszont nem telepíthető, mert nincs digitális aláírása és fájlellenőrző összege (egyszerűen nincs META-INF/ könyvtára). A csomagot alá kell írnunk az apk-signer segédprogrammal. 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áshoz;
  • Álnév- a kulcs neve az adattárban;
  • 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ő általában nem kötelező, de legalább egyet ki kell töltenie.


FIGYELEM

Egy alkalmazás apk-signer segítségével 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.

Csak a digitális aláírás szükséges harmadik féltől származó szoftver tehát ha módosítod rendszeralkalmazások, amelyek a /system/app/ könyvtárba másolással kerülnek telepítésre, nem kell aláírni őket.

Ezt követően ejtjük a csomagot az okostelefonon, telepítjük és futtatjuk. 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 őszintén szólva egy hülye alkalmazáshoz szerencsénk volt. Egy jól megí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áskészítők speciális osztályokat hoznak létre a hirdetések megjelenítésére és ezen osztályok metódusainak meghívására az alkalmazás vagy annak valamelyik „tevékenysége” (egyszerű szóval alkalmazásképernyő) során. Próbáljuk meg megtalálni ezeket az osztályokat. Megyünk a smali könyvtárba, majd a com-ba (az org-ban csak egy nyitott grafikus könyvtár cocos2d), majd a kauf (pontosan ott, mert ez a fejlesztő neve és ott van az összes kódja) - és itt van, a marketing könyvtár. 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 hirdetéseket jelenít meg.

Megváltoztathatnánk a működésének logikáját, de sokkal könnyebb lenne ostobán eltávolítani a metódusainak hívását magából az alkalmazásból. Ezért kilépünk a marketing könyvtárból, é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 szabványos android osztály, amelyet az Android SDK hoz létre, és az alkalmazás belépési pontjaként van beállítva (a C fő funkciójához hasonlóan). Nyissa meg a fájlt szerkesztésre.

Belül a smali kód (helyi assembler). Alacsony szintű jellege miatt meglehetősen zavaros és nehezen olvasható, ezért nem tanulmányozzuk, hanem egyszerűen megkeressük a kódban az Ad osztály összes említését, és kommentáljuk. A "Hirdetés" karakterláncot beírjuk a keresésbe, és eljutunk a 25. sorhoz:

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

Itt egy mezőhirdetés jön létre az Ad osztályba tartozó objektumok tárolására. A ### jelet a sor elé állítva kommentálunk. Folytatjuk a keresést. 423. sor:

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

Itt jön létre az objektum. Kommentálunk. Folytatjuk a keresést, és a 433-as, 435-ös, 466-os, 468-as, 738-as, 740-es, 800-as és 802-es sorban megtaláljuk az Ad osztály metódusainak hívását. Kommentálunk. Úgy néz ki, ez az. spórolunk. Most a csomagot vissza kell szerelni, és ellenőrizni kell a teljesítményét é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, összegyűjtjük a csomagot, aláírjuk és telepítjük.

Tengerimalacunk. Látható reklám

Op-pa! 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 felfedéséhez újra megnyitjuk 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 az android.intent.action.MAIN szándék (esemény) generálására válaszul kell elindítani 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ó ablakot (tevékenységet), amely a Start osztályban van leírva, és manuálisan tette bejegyzést pont.

Megnyitjuk a Start.smali fájlt, és ismét megkeressük az „Ad” sort, a 153. és 155. sorban találjuk a FirstAd osztály említését. 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. Tovább nézünk, ott van a FirstAd osztály egy példányának létrehozása és egy intent, az ehhez a példányhoz kapcsolódó kontextusnak megfelelően, majd a cond_10 címke, amelyre a feltételes átmenet pontosan az osztály példányának létrehozása előtt történik. :

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 szükséges-e hirdetéseket megjeleníteni a főképernyőn, é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át. Másolás okostelefonra, telepítés, futtatás. Voila, minden hirdetés eltűnt, gratulálunk mindannyiunknak.

Eredmények

Ez a cikk csak egy rövid bevezetés az Android alkalmazások megnyitásának é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 alapismeretek birtokában azonban mindezek megértése csak idő kérdése.

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 fog kinézni:

Héj

java -jar apktool.jar b alkalmazás

java - jar apktool .jar b alkalmazás

Összeszerelés után a kész APK fájl a könyvtárban lesz app/build. A következő lépés az APK aláírása. Ez azért történik, hogy az alkalmazás működjön olyan eszközökön, ahol a hibakeresés tilos. Vagyis tilos aláíratlan alkalmazások indítása ilyen eszközökön. A digitális tanúsítványokról és a fájlok aláírásának eljárásáról itt olvashat bővebben.

A fájl aláírása nagyon egyszerű: erre van speciális segédprogram signapk néven. Úgy kell futtatni, hogy argumentumként adjuk át a tanúsítványokat, majd az alkalmazás elérési útját, végül az aláírt alkalmazás elérési útját (az eredményt, ahová menteni kell). 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 kaphatok ilyen igazolást? A tanúsítványok megtalálhatók az interneten. Vagy generáld magad. Részletes utasítások az összes szükséges fájl beállításáról és generálásáról megtalálható például.

Következtetés

Mint látható, az APK fájlok dekompilálása és felépítése meglehetősen egyszerű folyamat, amely ráadásul automatizálható, megkönnyítve a kutató dolgát. Önmaga Virtuális gép A Dalvik könnyen megtanulható és nyitott is, ami egyrészt csökkenti a fejlesztők belépési küszöbét, másrészt ez a fő oka a kalózkodás ilyen nagy százalékának. Android platform. Részben ez az oka annak, hogy például a játékok fejlesztőit általában nem érdekli érdekes, történettel rendelkező játékok kiadása. A felhasználók jelenlegi hozzáállása mellett sokkal kifizetődőbb az elképesztően hasonló gazdaságokat adományokkal szegecselni. 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.