Nuance úprav souborů APK systému. Otevíráme, upravujeme a balíme aplikace pro Android Jak rozebrat a sestavit apk soubor

Zmínil jsem aplikaci SmartAPKTool. Dokáže extrahovat, zipovat a podepisovat upravené soubory APK. Jeho výhodou je přítomnost grafického rozhraní. Existuje však také vážná nevýhoda. SmartAPKTool nebyl dlouho aktualizován a program správně nerozbaluje a nezabaluje aplikace pro nejnovější verze Androidu. Proto se zde pokusím vysvětlit, jak aplikaci pro tyto účely používat apktool.

Poznámka 1.
Program SmartAPKTool je stále vhodný k podepisování shromážděných souborů APK.
Poznámka 2
Odkazy na programy uvedené v článku jsou ↓

Program apktool nemá grafické rozhraní. To je nevýhoda pro ty, kteří nejsou zvyklí pracovat s příkazovým řádkem. Ale je tu také plus: na rozdíl od SmartAPKTool uvidíme všechny chyby, což znamená, že budeme vědět, co opravit.

Pojďme si stáhnout dva archivy: jeden společný pro všechny systémy, druhý pro náš systém (v příkladu Windows):

Rozbalíme oba archivy do stejné prázdné složky (v našem příkladu C:\apktool\ ). Jeho obsah by měl vypadat takto:

Od této chvíle můžeme program používat apktool.

Poznámka 3.
Uživatelé 64bitových verzí Linuxu si budou muset nainstalovat balíček ia32-libs:

sudo apt-get install ia32-libs

Do stejné složky vložíme soubor, který potřebujeme rozbalit. Například ať se jmenuje orig.apk
Stiskněte a podržte klávesu Shift a klikněte pravým tlačítkem na libovolné prázdné místo ve složce (neklikejte na soubory!). Poté vyberte „Otevřít příkazové okno“. V zobrazené konzoli zadejte:

apktool dekódovat orig.apk

Soubor bude rozbalen:

Nyní máme složku s rozbalenou aplikací v adresáři C:\apktool\. Jmenuje se stejně jako zdrojový soubor, bez přípony: C:\apktool\orig\ . Zdrojové soubory můžeme změnit tak, jak je popsáno v článku Android: jak nainstalovat dvě stejné aplikace na jeden telefon. Po provedení změn shromáždíme kopii aplikace zabalením zdrojových souborů do souboru apk:

apktool build orig result.apk

Zde result.apk je název souboru, který jsme vymysleli pro sestavení kopie. Pokud nejsou žádné chyby, soubor se sestaví:

Zbytek je nad rámec článku:

  1. Pokud se během montáže vyskytnou chyby, musíte najít jejich příčinu a opravit je.
  2. Zbývá pouze podepsat výsledný soubor result.apk. To lze provést pomocí SmartAPKTool, jak je uvedeno výše; Vše je intuitivní. Existují také další způsoby, jak podepsat soubor apk.
  3. Chyby mohou nastat také při instalaci kopie, během jejího spouštění nebo provozu. Je třeba je zachytit pomocí nástroje adb, který je součástí sady Android SDK.

Aplikaci musíte podepsat, jinak se nenainstaluje. Chyby se nevyskytují tak často a nejčastější problémy, které je způsobují, jsou popsány v článku

V procesu používání různých firmwarů pro zařízení Android je někdy nutné změnit tak či onak systémové aplikace zabudované do operačního systému. V tomto materiálu se budeme touto otázkou podrobně zabývat.

Přirozeně je třeba rozebrat a znovu sestavit systémový soubor APK, aby fungoval správně a stabilně. Pojďme postupně přijít na to, co je pro to potřeba udělat.

Nejprve musíte provést proces deodexování systémových souborů APK. Řekneme vám, jak to udělat v.

Soubor .apk byl tedy deodexován a dekompilován. Pojďme analyzovat aplikaci, o kterou se zajímáme, ať má název, pro jasnost příkladu, rámec- res. apk. Pamatujeme si to v hlavě jako původní aplikaci.

Řekněme, že jsme v aplikaci provedli všechny potřebné změny. Budeme mluvit více o všech aspektech souborů APK v. Teď to musíte zabalit zpět. Zapamatujme si hotovou zabalenou aplikaci v našich myslích jako upravenou aplikaci 2.

Nyní si vysvětlíme, proč bylo nutné si aplikace mentálně zapamatovat jako původní a upravené 2. Aplikace zkompilovaná programem ApkTool (nebo využívající rozšíření grafického uživatelského rozhraní jako SmartApkTool) nebude fungovat, ale to není problém. Provádíme následující akce:

Z tohoto článku se dozvíte, z čeho se aplikace pro Android skládá, jak otevřít soubor APK a pomocí jakých programů.

Co je soubor APK?

APK je formát operačního systému Android používaný pro archivované spustitelné soubory aplikací a samotný název souboru může být jakýkoli, ale přípona by měla vypadat pouze takto.apk. Analogy APK v jiných operačních systémech jsou .msi ve Windows, .sis v Symbianu, .rpm nebo .deb v Linuxu.

Podívejme se, co je uvnitř
Ve skutečnosti je .apk archiv ZIP, takže se můžete na interní zařízení podívat pomocí libovolného správce souborů nebo archivátoru, například WinRAR nebo mobilní aplikace X-plore.




Je třeba si uvědomit, že získáte pouze vizuální přístup k interním zdrojům; možnosti úprav jsou extrémně omezené.

Podívejme se na strukturu
Uvnitř .apk vidíme řadu souborů a složek, pojďme zjistit, k čemu slouží:

  • AndroidManifest.xml je jakýmsi „pasem“ aplikace, ze kterého můžete zjistit všechny hlavní body, požadavky, verzi, oprávnění atd.
  • META-INF tento soubor obsahuje metadata, tedy data o datech, kontrolní součty, cesty k datům, cesty a kontrolní součty zdrojů, certifikáty. Tento soubor můžete otevřít v libovolném textovém editoru, ale doporučuje se použít Notepad++.
  • Složka res obsahuje všechny prostředky programu, grafiku, jako jsou ikony, obrázky, text a prvky grafického rozhraní. Můžete také snadno přistupovat ke složce.
  • class.dex je přímý aplikační programový kód spouštěný virtuálním strojem Dalvik VM; co je uvnitř tohoto souboru, můžete vidět pouze dekompilací .apk, o tom budeme mluvit v jiných článcích. resources.arsc - kompilovaný XML soubor, tento soubor obsahuje data o všech zdrojích zapojených do programu.
  • lib - složka s nativními knihovnami, k jejichž zdrojům lze přistupovat pouze pomocí specializovaných programů. Soubor APK může také obsahovat soubory a složky jako com, org, udk, ale ne vždy.

Nyní se podíváme na vnitřní strukturu podrobněji, k tomu potřebujeme dekompilační program, Javu a soubor APK. Hlavním nástrojem pro rozebrání .apk je Apktool, ale tento program funguje pouze z řádku, což není příliš pohodlné. Pro rychlejší a pohodlnější analýzu můžete použít APKing, je to stále stejný Apktool, ale s možností pracovat z kontextové nabídky.


A tak nainstalujeme APKing jako každou aplikaci pro Windows a po výběru .apk na něj klikneme pravým tlačítkem myši a současně se Shiftem, načež uvidíme následující:



A vyberte požadovanou akci, například úplně dekompilujte, poté program dokončí operaci a vytvoří složku se stejným názvem.



Otevřením složky budeme mít přístup ke všem zdrojům souboru APK.



Nyní lze upravovat všechny textové soubory, při dodržení základních pravidel můžete použít oblíbený program Notepad++, zvažte například AndroidManifest.xml

Shromažďování takových souborů zpět do APK je docela jednoduché. Chcete-li to provést, musíte spustit apktool s příslušným příznakem sestavení a předat mu cestu ke složce s dekompilovanou aplikací uvnitř. Pokud máme například složku aplikace, která se nachází ve stejném adresáři jako apktool, příkaz bude vypadat takto:

Shell

java -jar apktool.jar b app

java - jar apktool .jar b app

Po sestavení bude hotový soubor APK umístěn v adresáři aplikace/sestavení. Dále musíte podepsat soubor APK. To se provádí, aby bylo zajištěno, že aplikace funguje na zařízeních, kde je ladění zakázáno. To znamená, že spouštění nepodepsaných aplikací na takových zařízeních je zakázáno. Více o digitálních certifikátech a postupu podepisování souborů si můžete přečíst zde.

Podepisování souboru je velmi jednoduché: existuje pro to speciální nástroj s názvem signapk. Musí se spustit tak, že se nejprve předají certifikáty jako argumenty, pak cesta k aplikaci a nakonec cesta k podepsané aplikaci (výsledek, kam ji uložit). Vypadá to nějak takto:

Shell

java -jar signapk.jar testkey.x509.pem testkey.pk8 *.apk apk_signed.apk

java - jar signapk .jar testkey .x509 .pem testkey .pk8 * .apk apk_signed .apk

Kde se dá takový certifikát získat, ptáte se? Certifikáty lze nalézt na internetu. Nebo si to vygenerujte sami. Podrobný návod na nastavení a vygenerování všech potřebných souborů najdete například na .

Závěr

Jak vidíte, dekompilace a sestavení souborů APK je poměrně jednoduchý proces, který lze navíc automatizovat, což výzkumníkovi usnadňuje práci. Samotný virtuální stroj Dalvik se také snadno učí a otevírá, což na jednu stranu snižuje překážku vstupu pro vývojáře, na druhou stranu je hlavním důvodem tak velkého procenta pirátství na platformě Android. Částečně proto například herní vývojáři obecně nemají zájem vydávat zajímavé hry se zápletkou. Mnohem výhodnější je, vzhledem k současnému přístupu uživatelů, nýtovat farmy s dary, které jsou si nápadně podobné. Nakupujeme proto aplikace, podporujeme vývojáře a ve výsledku získáváme zajímavý obsah. Ale není absolutně nutné darovat!

Díky všem, uvidíme se znovu.

Občas některé aplikace na Androidu uživateli nějakým způsobem nevyhovují. Příkladem je rušivá reklama. A také se stává, že program je dobrý pro všechny, ale překlad v něm je buď pokřivený, nebo úplně chybí. Nebo je například program zkušební, ale neexistuje způsob, jak získat plnou verzi. Jak změnit situaci?

Úvod

V tomto článku budeme hovořit o tom, jak rozebrat balíček APK s aplikací, podívat se na jeho vnitřní strukturu, rozebrat a dekompilovat bajtkód a také se pokusíme provést několik změn v aplikacích, které nám mohou přinést jednu nebo druhou výhodu.

K tomu všemu budete potřebovat alespoň základní znalost jazyka Java, ve kterém jsou psány aplikace pro Android, a jazyka XML, který se v Androidu používá všude – od popisu samotné aplikace a jejích přístupových práv až po ukládání řetězců, které se zobrazí na obrazovce. Budete také potřebovat schopnost používat specializovaný konzolový software.

Co je tedy balíček APK, ve kterém je distribuován absolutně veškerý software Android?

Dekompilace aplikace

V tomto článku jsme pracovali pouze s rozebraným kódem aplikace, ale pokud dojde k závažnějším změnám ve velkých aplikacích, bude pochopení malého kódu mnohem obtížnější. Naštěstí můžeme dekompilovat kód dex do kódu Java, který, i když není původní a není zpětně zkompilován, je mnohem snazší číst a pochopit logiku aplikace. K tomu budeme potřebovat dva nástroje:

  • dex2jar je překladač Dalvik bytecode do JVM bytecode, na jehož základě můžeme získat kód v jazyce Java;
  • jd-gui je samotný dekompilátor, který vám umožňuje získat čitelný kód Java z bytecode JVM. Jako alternativu můžete použít Jad (www.varaneckas.com/jad); Přestože je poměrně starý, v některých případech generuje čitelnější kód než Jd-gui.

Takto by se měly používat. Nejprve spustíme dex2jar a jako argument uvedeme cestu k balíčku apk:

% dex2jar.sh mail.apk

Výsledkem je, že Java balíček mail.jar se objeví v aktuálním adresáři, který již lze otevřít v jd-gui pro zobrazení kódu Java.

Uspořádání APK balíčků a jejich příjem

Balíček aplikace pro Android je v podstatě běžný soubor ZIP, který nevyžaduje žádné speciální nástroje k zobrazení obsahu nebo jeho extrahování. Stačí mít archivátor - 7zip pro Windows nebo rozbalit konzoli na Linuxu. Ale to je o obalu. Co je uvnitř? Obecně máme uvnitř následující strukturu:

  • META-INF/- obsahuje digitální certifikát aplikace, identifikující jejího tvůrce a kontrolní součty souborů balíčků;
  • res/ - různé zdroje, které aplikace používá při své práci, jako jsou obrázky, deklarativní popis rozhraní a další data;
  • AndroidManifest.xml- popis aplikace. Patří sem například seznam požadovaných oprávnění, požadovaná verze Androidu a požadované rozlišení obrazovky;
  • třídy.dex- zkompilovaný bytekód aplikace pro virtuální stroj Dalvik;
  • zdroje.arsc- také zdroje, ale jiného druhu - zejména řetězce (ano, tento soubor lze použít pro rusifikaci!).

Uvedené soubory a adresáře jsou, pokud ne ve všech, pak možná v naprosté většině souborů APK. Existuje však několik dalších ne tak běžných souborů/adresářů, které stojí za zmínku:

  • aktiva- analogie zdrojů. Hlavní rozdíl je v tom, že pro přístup ke zdroji potřebujete znát jeho identifikátor, ale seznam aktiv lze získat dynamicky pomocí metody AssetManager.list() v kódu aplikace;
  • lib- nativní linuxové knihovny napsané pomocí NDK (Native Development Kit).

Tento adresář využívají výrobci her, kteří tam umisťují své herní enginy napsané v C/C++, a také tvůrci vysoce výkonných aplikací (například Google Chrome). Přišli jsme na zařízení. Jak ale získáte soubor balíčku aplikace, o kterou máte zájem? Vzhledem k tomu, že bez root není možné vyzvednout soubory APK ze zařízení (jsou umístěny v adresáři /data/app) a rootování není vždy vhodné, existují alespoň tři způsoby, jak dostat soubor aplikace do počítače:

  • rozšíření APK Downloader pro Chrome;
  • Aplikace Real APK Leecher;
  • různé hostování souborů a Varezniks.

Který z nich použít, je věcí vkusu; preferujeme použití samostatných aplikací, takže popíšeme použití Real APK Leecher, zejména proto, že je napsán v Javě, a proto bude fungovat ve Windows nebo Nix.

Po spuštění programu je potřeba vyplnit tři pole: Email, Heslo a ID zařízení – a vybrat jazyk. První dva jsou e-mail a heslo vašeho účtu Google, který v zařízení používáte. Třetí je identifikátor zařízení a lze jej získat zadáním kódu na číselníku # #8255## a poté najděte řádek ID zařízení. Při vyplňování stačí zadat ID bez předpony android-.

Po vyplnění a uložení se často objeví hláška „Chyba při připojování k serveru“. S Google Play to nemá nic společného, ​​takže to klidně ignorujte a hledejte balíčky, které vás zajímají.

Zobrazit a upravit

Řekněme, že jste našli balíček, který vás zajímá, stáhli jste si ho, rozbalili... a když jste se pokusili zobrazit nějaký soubor XML, s překvapením jste zjistili, že soubor není text. Jak jej dekompilovat a jak s balíčky obecně pracovat? Je opravdu nutné instalovat SDK? Ne, SDK není nutné instalovat vůbec. Ve skutečnosti všechny kroky k extrahování, úpravě a balení balíčků APK vyžadují následující nástroje:

  • ZIP archivátor pro vybalování a balení;
  • malý- Assembler/disassembler bytecode virtuálního stroje Dalvik (code.google.com/p/smali);
  • aapt- nástroj pro balení zdrojů (ve výchozím nastavení jsou zdroje uloženy v binární formě pro optimalizaci výkonu aplikace). Zahrnuje Android SDK, ale lze jej získat samostatně;
  • signatář- nástroj pro digitální podepisování upraveného balíčku (bit.ly/Rmrv4M).

Všechny tyto nástroje můžete používat samostatně, ale to je nepohodlné, proto je lepší používat software vyšší úrovně postavený na jejich základě. Pokud pracujete na Linuxu nebo Mac OS X, existuje nástroj s názvem apktool. Umožňuje rozbalit prostředky v jejich původní podobě (včetně binárních souborů XML a arsc), znovu sestavit balíček se změněnými prostředky, ale neumí balíčky podepisovat, takže budete muset spustit utilitu signer ručně. Navzdory tomu, že je utilita napsána v Javě, její instalace je značně nestandardní. Nejprve musíte získat samotný soubor 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 $ export PATH=~/bin:$PATH

Pokud pracujete na Windows, pak je tu pro něj výborný nástroj Virtuous Ten Studio, který také všechny tyto nástroje kumuluje (včetně samotného apktool), ale místo rozhraní CLI poskytuje uživateli intuitivní grafické rozhraní, se kterým můžete provádět operace pro rozbalení, rozebrání a dekompilaci několika kliknutími. Tento nástroj je Donation-ware, to znamená, že se někdy objeví okna s žádostí o získání licence, ale to lze nakonec tolerovat. Nemá smysl to popisovat, protože rozhraní pochopíte za pár minut. Ale apktool, kvůli jeho konzolové povaze, by měl být probrán podrobněji.


Podívejme se na možnosti apktool. Stručně řečeno, existují tři základní příkazy: d (decode), b (build) a if (install framework). Pokud je u prvních dvou příkazů vše jasné, co pak dělá třetí, podmíněný příkaz? Rozbalí zadaný rámec uživatelského rozhraní, což je nezbytné v případech, kdy pitváte jakýkoli systémový balíček.

Podívejme se na nejzajímavější možnosti prvního příkazu:

  • -s- nerozebírejte soubory dex;
  • -r- nerozbalujte zdroje;
  • -b- nevkládejte informace o ladění do výsledků rozebrání souboru dex;
  • --frame-path- použijte určený rámec uživatelského rozhraní místo toho, který je integrován do apktool. Nyní se podívejme na několik možností pro příkaz b:
  • -F- nucená montáž bez kontroly změn;
  • -A- uveďte cestu k aapt (nástroj pro vytvoření archivu APK), pokud jej z nějakého důvodu chcete použít z jiného zdroje.

Použití apktool je velmi jednoduché, stačí zadat jeden z příkazů a cestu k souboru APK, například:

$ apktool d mail.apk

Poté se všechny extrahované a rozložené soubory balíčku objeví v adresáři pošty.

Příprava. Zakázání reklamy

Teorie je samozřejmě dobrá, ale proč je potřeba, když nevíme, co s rozbaleným balíkem dělat? Zkusme aplikovat teorii ve svůj prospěch, totiž upravit nějaký software tak, aby nám nezobrazoval reklamu. Nechť je to například Virtual Torch – virtuální pochodeň. Tento software je pro nás ideální, protože je do posledního místa naplněn otravnou reklamou a navíc je dostatečně jednoduchý, aby se neztratil v džungli kódu.


Pomocí jedné z výše uvedených metod si tedy stáhněte aplikaci z trhu. Pokud se rozhodnete používat Virtuous Ten Studio, jednoduše otevřete soubor APK v aplikaci a rozbalte jej, vytvořte projekt (Soubor -> Nový projekt) a poté v kontextové nabídce projektu vyberte Importovat soubor. Pokud vaše volba padla na apktool, stačí spustit jeden příkaz:

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

Poté se v adresáři com.kauf.particle.virtualtorch objeví strom souborů podobný tomu popsanému v předchozí části, ale s dalším malým adresářem namísto souborů dex a souboru apktool.yml. První obsahuje rozložený kód spustitelného dex souboru aplikace, druhý obsahuje servisní informace potřebné k tomu, aby apktool balíček sestavil zpět.

První místo, kam bychom se měli podívat, je samozřejmě AndroidManifest.xml. A zde se okamžitě setkáváme s následujícím řádkem:

Není těžké uhodnout, že je odpovědný za udělení oprávnění aplikaci používat připojení k internetu. Ve skutečnosti, pokud se chceme pouze zbavit reklamy, s největší pravděpodobností nám bude stačit zablokovat aplikaci z internetu. Zkusme to udělat. Odstraníme zadaný řádek a pokusíme se vytvořit software pomocí apktool:

$ apktool b com.kauf.particle.virtualtorch

Výsledný soubor APK se objeví v adresáři com.kauf.particle.virtualtorch/build/. Nebude jej však možné nainstalovat, protože nemá digitální podpis a kontrolní součty souborů (prostě nemá adresář META-INF/). Balíček musíme podepsat pomocí nástroje apk-signer. Spuštěno. Rozhraní se skládá ze dvou záložek – na první (Key Generator) vytváříme klíče, na druhé (APK Signer) se podepisujeme. Chcete-li vytvořit náš soukromý klíč, vyplňte následující pole:

  • Cílový soubor- výstupní soubor úložiště klíčů; obvykle ukládá jeden pár klíčů;
  • Heslo A Potvrdit- heslo pro úložiště;
  • Přezdívka- název klíče v úložišti;
  • Aliasové heslo A Potvrdit- heslo tajného klíče;
  • Doba platnosti- doba platnosti (v letech). Výchozí hodnota je optimální.

Zbývající pole jsou obecně nepovinná – ale musí být vyplněno alespoň jedno.


VAROVÁNÍ

Chcete-li podepsat aplikaci pomocí apk-signer, musíte nainstalovat Android SDK a zadat úplnou cestu k ní v nastavení aplikace.

Veškeré informace jsou poskytovány pouze pro informační účely. Redakce ani autor nenesou odpovědnost za případné škody způsobené materiály tohoto článku.

Nyní můžete podepsat soubor APK pomocí tohoto klíče. Na kartě APK Signer vyberte nově vygenerovaný soubor, zadejte heslo, alias klíče a heslo, poté najděte soubor APK a odvážně klikněte na tlačítko „Podepsat“. Pokud vše proběhne v pořádku, bude balíček podepsán.

INFO

Vzhledem k tomu, že jsme balíček podepsali vlastním klíčem, bude v konfliktu s původní aplikací, což znamená, že když se pokusíme aktualizovat software prostřednictvím marketu, zobrazí se chyba.

Digitální podpis je vyžadován pouze pro software třetích stran, takže pokud upravujete systémové aplikace, které jsou nainstalovány, zkopírováním do adresáře /system/app/, nemusíte je podepisovat.

Poté si stáhněte balíček do smartphonu, nainstalujte jej a spusťte. Voila, reklama je pryč! Místo toho se ale objevila hláška, že nemáme internet nebo nemáme příslušná oprávnění. Teoreticky by to mohlo stačit, ale zpráva vypadá otravně a upřímně řečeno jsme měli štěstí na hloupou aplikaci. Normálně napsaný software s největší pravděpodobností objasní své přihlašovací údaje nebo zkontroluje připojení k internetu a jinak se jednoduše odmítne spustit. Jak být v tomto případě? Samozřejmě upravte kód.

Autoři aplikací obvykle vytvářejí speciální třídy pro zobrazování reklam a volají metody těchto tříd při spuštění aplikace nebo jedné z jejích „aktivit“ (zjednodušeně řečeno obrazovek aplikace). Zkusme najít tyto třídy. Jdeme do adresáře smali, pak com (org obsahuje pouze otevřenou grafickou knihovnu cocos2d), pak kauf (tady to je, protože toto je jméno vývojáře a je tam celý jeho kód) - a tady to je, marketingový adresář. Uvnitř najdeme hromadu souborů s příponou smali. Jsou to třídy a nejpozoruhodnější z nich je třída Ad.smali, z jejíhož názvu lze snadno uhodnout, že je to ta, která zobrazuje reklamu.

Mohli bychom změnit logiku jeho fungování, ale mnohem jednodušší by bylo jednoduše odstranit volání kterékoli z jeho metod ze samotné aplikace. Proto opustíme marketingový adresář a přejdeme do sousedního adresáře částic a poté do virtualtorch. Zvláštní pozornost si zde zaslouží soubor MainActivity.smali. Jedná se o standardní třídu Androidu, která je vytvořena sadou Android SDK a instalována jako vstupní bod do aplikace (analogicky k hlavní funkci v C). Otevřete soubor pro úpravy.

Uvnitř je malý kód (místní assembler). Vzhledem ke své nízkoúrovňové povaze je poměrně nepřehledná a obtížně čitelná, takže ji nebudeme studovat, ale jednoduše najdeme v kódu všechny odkazy na třídu Ad a okomentujeme je. Do vyhledávání zadáme řádek „Reklama“ a dostaneme se na řádek 25:

Field private ad:Lcom/kauf/marketing/Ad;

Zde je vytvořeno pole reklamy pro uložení objektu třídy Ad. Komentujeme umístěním znaku ### před řádek. Pokračujeme v hledání. Řádek 423:

New-instance v3, Lcom/kauf/marketing/Ad;

Zde dochází k vytvoření objektu. Pojďme to okomentovat. Pokračujeme v hledání a nacházíme na řádcích 433, 435, 466, 468, 738, 740, 800 a 802 volání metod třídy Ad. Pojďme to okomentovat. Vypadá to, že je to ono. Uložit. Nyní je potřeba balíček znovu složit a zkontrolovat funkčnost a přítomnost reklamy. Pro čistotu experimentu vrátíme řádek odstraněný z AndroidManifest.xml, sestavíme balíček, podepíšeme a nainstalujeme.

Naše morče. Reklama viditelná

Jejda! Reklama zmizela pouze za běhu aplikace, ale zůstala v hlavní nabídce, kterou vidíme při spuštění softwaru. Takže počkat, ale vstupním bodem je třída MainActivity a reklama během běhu aplikace zmizela, ale zůstala v hlavním menu, takže vstupní bod je jiný? Chcete-li identifikovat skutečný vstupní bod, znovu otevřete soubor AndroidManifest.xml. A ano, obsahuje následující řádky:

Říkají nám (a co je důležitější, android), že aktivita s názvem Start by měla být spuštěna v reakci na vygenerování záměru (události) android.intent.action.MAIN z kategorie android.intent.category.LAUNCHER. Tato událost se generuje, když klepnete na ikonu aplikace ve spouštěči, takže určuje vstupní bod, konkrétně třídu Start. S největší pravděpodobností programátor nejprve napsal aplikaci bez hlavního menu, jehož vstupním bodem byla standardní třída MainActivity, a poté přidal nové okno (aktivitu) obsahující menu a popsané ve třídě Start a ručně z něj udělal vstup. směřovat.

Otevřete soubor Start.smali a znovu vyhledejte řádek „Ad“, na řádcích 153 a 155 najdeme zmínku o třídě FirstAd. Je také ve zdrojovém kódu a soudě podle názvu má na starosti zobrazování reklam na hlavní obrazovce. Podívejme se dále, je zde vytvoření instance třídy FirstAd a záměru, který podle kontextu souvisí s touto instancí, a dále popisek cond_10, jehož podmíněný přechod se provede přesně před vytvořením instance. třídy:

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

S největší pravděpodobností program nějak náhodně vypočítá, zda se má reklama zobrazovat na hlavní obrazovce, a pokud ne, skočí přímo na cond_10. Dobře, zjednodušíme její úkol a nahradíme podmíněný přechod nepodmíněným přechodem:

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

V kódu již nejsou žádné zmínky o FirstAd, takže soubor zavřeme a znovu sestavíme naši virtuální pochodeň pomocí apktool. Zkopírujte jej do smartphonu, nainstalujte a spusťte. Voilá, veškerá reklama zmizela, k čemuž nám všem gratulujeme.

Výsledek

Tento článek je jen stručným úvodem do metod hackování a úprav aplikací pro Android. Mnoho problémů zůstalo v zákulisí, jako je odstranění ochrany, analýza zatemněného kódu, překlad a nahrazení prostředků aplikací a také úpravy aplikací napsaných pomocí Android NDK. Se základními znalostmi je však jen otázkou času, kdy na to všechno přijdeme.

dodatečně