Program för att ändra apk. Grunderna för redigering av Android-systemapplikationer (apk). Arrangering av APK-paket och mottagande av dem

APK är ett format som används i Android-operativsystemet för arkiverade körbara programfiler. Analogen, till exempel, i Windows är .msi, i Symbian - .sis, i Linux - .rpm eller .deb. I den här artikeln kommer vi att förstå alla frågor som rör detta filformat så detaljerat som möjligt.

Processen att demontera, redigera och montera "korrekt" kallas reverse-engineering. Vad behövs för detta? Följande verktyg krävs:

Apktool. Det är bekvämare att använda med SmartApktool-skalet; du kan också använda färdiga batchfiler, till exempel ApktoolBAT.

Notepad++ - krävs inte, men rekommenderas starkt.

7zip eller WinRar, eller något annat arkiveringsprogram, men ett av dessa rekommenderas.

Deodexad firmware.

Det finns flera sätt att installera applikationer på Android-operativsystemet. Den första, även den huvudsakliga, är direkt genom Google Play(Android Market), det vill säga från en officiell källa, som kräver ett Google-konto. Många applikationer är betalda, om du inte vill leta efter en hackad version på piratkopierade sajter får du betala för köpet. Men vi kommer att prata om hur man gör detta. Den andra är från andra inofficiella källor än Google Play, för vilka du måste aktivera alternativet "Tillåt installation av applikationer från inofficiella källor" i inställningarna för din smartphone eller surfplatta, varefter APK-installationsfilen måste skrivas till minnet kort.

Det är också möjligt att installera APK-applikationer i bulk. För att göra detta behöver du Astro File Manager - en speciell filhanterare. När du har installerat det, flytta programmen:

Från en smartphone/surfplatta: in mntsdcardackupsapp(med andra ord, minneskort, sedan backup-mapp, app-mapp)

Från en persondator (glöm inte att aktivera anslutningen av Android-enheten i enkelt USB-enhetsläge): SD-kortsäkerhetskopiorapp

Öppna sedan önskad applikation, in innehållsmeny välj "Application Manager" och gå till fliken "Säkerhetskopiering", där vi väljer "Långklicka eller kontrollera applikationen som ska installeras." Klicka på knappen "Installera" - alla applikationer kommer att installeras på din enhet.

Det är ganska lätt att se vad strukturen för en APK-fil är. Öppna önskad APK med ett arkiveringsprogram, till exempel WinRar. Här är vad vi ser inuti:

AndroidManifest.xmlär ett slags "pass" som beskriver vad som finns i ansökan, inklusive: Systemkrav till applikationen, dess struktur och version.

META-INF– mapp som innehåller filen MANIFEST.MF(det kan öppnas av nästan alla textredigerare, rekommenderas att använda Notepad++), som öppnar där du kan se SHA-1-kontrollsummor och datasökvägar, versionen av Manifest-Version-standarden, RSA- eller DSA-certifikatfiler, SF-filen innehåller sökvägar till olika resurser och deras kontrollsummor. I allmänhet är META-INF metadatafiler, det vill säga data om data.

res– en mapp som innehåller alla "programvarufyllningsresurser", sorterade i undermappar. Till exempel, i mappen ~drawable~ finns det grafiska element av applikationer (olika statusar, ikoner, etc.), i layoutkatalogen finns det XML-filer som indikerar placeringen av grafiska element användargränssnitt(GUI).

classes.dex– programkod som exekveras av den virtuella Dalvik VM-maskinen. Låt oss komma ihåg att Android-operativsystemet är en blandning av Linux-kärnan och den virtuella Java-maskinen.

resources.arsc– kompilerad XML-fil. Den innehåller data om alla resurser som används av programmet.

tillgångar– en mapp som också innehåller olika resurser; den kanske inte finns i APK alls.

lib– en mapp som innehåller "libs" eller, enklare, inbyggda bibliotek, om programmet är skrivet med hjälp av NDK, till exempel med element när C++. Den här katalogen kanske inte finns i APK-filen.

com– kanske inte finns i APK.

org– kanske inte finns i APK.

udk– kanske inte finns i APK.

Vi har tagit itu med innehållet i APK-applikationen, låt oss nu gå vidare till dess detaljerade demontering. För dekompilering behöver du Apktool och Java, såväl som själva APK-filen. Apktool rekommenderas att packas upp i en katalog C:FÖNSTER(detta är inte nödvändigt, men det kommer att vara bekvämare. Varför – läs lite lägre).

För att starta Apktool måste du gå in i "Kör"-menyn på din dator. Klicka på i Windows XP Start -> Kör, på Windows 7: Task Manager ( Ctrl+Alt+Del), högst upp i rullgardinsmenyn Arkiv -> Ny uppgift (Kör...), eller helt enkelt kalla det med ett kortkommando Win+R.

Kallelse kommandorad- vi skriver cmd, varefter vi lanserar Apktool - skriv apktool(för detta ändamål var det nödvändigt att placera den i WINDOWS-mappen). Vidare sker all kontroll via kommandoraden med hjälp av parametrar.

Om du inte vill bry dig om att ständigt skriva in textkommandon kan du använda GUI– till exempel det nämnda SmartApkTool. Starta SmartApkTool.exe och välj sedan önskad APK-applikation på fliken Packa upp/packa (det är viktigt att filnamnet inte innehåller mellanslag, kyrilliska, specialtecken och skiljetecken).

Efter uppackning kommer programmet att skapa en mapp med samma namn som APK-filen. Inuti kommer det att finnas allt innehåll i applikationen.

APK kan också lokaliseras. Innan vi börjar göra detta startar vi det förinstallerade Notepad++ och konfigurerar det enligt följande. Öppning Inställningar -> Konfiguration -> Nytt dokument.

Efter dessa steg öppnar du det uppackade (dekompilerade) programmet, mappen res/värden.

Alla lokaliseringar finns ofta i filen strängar.xml, men ibland kan några av dem finnas i matriser.xml. Kopiera dessa filer och skapa dem i en mapp res mapp värderingar-ru och sätt in dem i den.

Nu kan du öppna strängar.xml använd Notepad++, gör översättningen och spara den ändrade filen.

I fil AndroidManifest.xml Du kan ange var APK-applikationer ska installeras. Observera, detta är endast relevant för Android version 2.2 och senare. Så öppna den angivna filen med Notepad++. Nästan i början kan du se parametern:

Här kan du ange följande alternativ (efter "="-symbolen):

Endast internt– applikationen kommer endast att installeras i internminne enheter

bil– ger användaren möjlighet att installera programmet i internminnet eller på ett minneskort

föredraExtern– programmet kommer att installeras på minneskortet. Det bör beaktas att inte alla applikationer kommer att fungera korrekt om de installeras på en extern enhet, eller att de inte fungerar alls. Dessa inkluderar:

Tjänster– det vill säga tjänster

Larmtjänster– tjänster som använder tid, till exempel väckarklockor

Inmatningsmetodmotorer– inmatningsapplikationer, inklusive olika tangentbord

Rörande backgrundsbilder– "live" animerad tapet

levaMappar– respektive animerade kataloger

AppWidgets– olika "widgets"

kontoChefer– chefer för olika konton, inklusive ICQ-kunder, kunder för sociala nätverk och så vidare

Synkadaptrar– program som kräver konstant synkronisering

EnhetAdministratörer– applikationer som används för administration

Kopieringsskydd– applikationer som är skyddade från kopiering.

I applikationen kan du redigera och ersätta olika ikoner och grafiska element i användargränssnittet med dina egna. För att göra detta, öppna mappen res i mappen med den dekompilerade APK-applikationen, här kan du se mapparna:

drabar-hdpi

drawable-ldpi

Dessa mappar innehåller alla ikoner och andra grafiska element i programmet. Bokstaven före "dpi" betyder storleken på de grafiska elementen, respektive:

hdpi - högdensitetspunkter per tum, storlek 72x72 pixlar

mdpi - genomsnittlig punkter per tum densitet, storlek 48x48 pixlar

ldpi - låg punkter per tum densitet, storlek 36x36 pixlar

Öppna filen för att till exempel ändra applikationsikonen AndroidManifest.xml Använd programmet Notepad++, leta efter raden där ikonen visas, titta på dess exakta namn (observera att filtillägget inte är nedskrivet, bara filnamnet).

Öppna motsvarande mapp dragbar-*dpi, klistra in den redigerade eller ny ikon, glöm inte att dubbelkolla in originaltiteln AndroidManifest.xml. Bilden måste vara i .png-format och ha exakt samma pixeltäthet som källfilen, t.ex. hdpi det är 72x72 pixlar.

Om du vill byta ut namnet på ikonen med ditt eget, spara sedan bilden med önskat filnamn i dragbar-*dpi, varefter vi anger exakt samma namn i AndroidManifest.xml(Till exempel android:icon="@drawable/testa"). På samma sätt kan du ändra alla andra grafiska element, men kraven är desamma - tillägget måste vara .png och densiteten för punkter per tum är samma som källfilen.

I den uppackade applikationen kan du dubbelkolla vilka rättigheter den har. Detta är användbart om APK-filen installerades från en okänd källa, och för att undvika en situation där en ficklampa eller en vacker kalender plötsligt börjar skicka betalda SMS-meddelanden till okänt nummer. Öppning AndroidManifest.xml Notepad++ program och leta efter motsvarande rader. För att skickas textmeddelanden, till exempel, reagerar parametern SKICKA SMS. Du kan läsa mer om alla rättigheter som kan finnas för en ansökan i.

Installerade APK-applikationer kan extraheras från systemet. Detta kan göras på flera sätt. Först kan du installera Astro File Manager. Öppna programmet och välj sedan "Programhanteraren" från snabbmenyn. Letar efter krävs ansökan, markera den med en bock och gör en säkerhetskopia. Efter bearbetning kommer den valda applikationen att finnas längs vägen:

mntsdcardackupsapp

sdcardackupsapp

Därefter kan du använda Rotprogram Avinstallationsprogram. Efter att ha startat applikationen kommer den automatiskt att avgöra allt installerade APK-filer och kommer automatiskt att säkerhetskopiera alla. Följaktligen kan du, om så önskas, kopiera dessa säkerhetskopior för ytterligare dekompilering; de finns längs vägen:

mntsdcardRootUnistallerautobackups(vid visning direkt från en Android-enhet)

sdcardRootUnistallerautobackups(när den visas via en dator, medan Android-enheten är ansluten som en USB-enhet).

Ett annat sätt är att använda Root Browser Lite, självklart behöver du Root-rättigheter för detta. Öppning den här applikationen, vi följer vägen:

systemetapp(om du är intresserad av systemapplikationer).

Vi kopierar de nödvändiga programmen till minneskortet, varefter du kan utföra eventuella manipulationer med dem.

Du kan också ladda ner APK-applikationer du är intresserad av från Google Play (Android Market) direkt till Personlig dator. Du behöver en webbläsare för detta Google Chrome(version inte lägre än 17), och plugin för det är APK Downloader. När du har laddat ner och installerat det angivna pluginet skapar du en kopia av genvägen Google webbläsare Chrome, där vi skriver följande rad efter ett mellanslag:

-ignorera-certifikat-fel

Med standardwebbläsarens installationssökväg bör raden se ut så här:

"C:Program FilesGoogleChromeApplicationchrome.exe" -ignore-certificate-errors

Efter det anger du i smartphone-uppringaren:

*#*#8255#*#*

Vi skriver om Device ID, som består av 16 tecken. Öppna Google Chrome med den skapade genvägen med den angivna parametern -ignorera-certifikat-fel, låt oss gå till Verktyg -> Tillägg(du kan också ange "chrome://settings/extensions" i adressfältet), öppna inställningarna för APK Downloader-plugin. I alternativen anger du din e-postadress och ditt lösenord konto Google, samt det mottagna enhets-ID. Gå nu till Google Play (Android Market), öppna sidan med önskad applikation, vi väntar på att den ska vara fulladdad. Ikonen för APK Downloader visas - efter att ha klickat på den kommer applikationen att laddas ner till din dator.

Apk editor pro, som du kan ladda ner för Android på vår webbplats, låter dig hacka/ändra innehållet i filer i alla program för Mobil enheter och anpassa den efter eget tycke.

Egenheter

Programmet är ett professionellt verktyg som, i händerna på avancerade användare, kan bli ett kraftfullt verktyg för att redigera applikationer för Android. Funktionaliteten skiljer sig praktiskt taget inte från den liknande programvara för persondatorer.

Vad kan detta verktyg göra?

  1. Ändra (översätt) namnen på andra applikationer.
  2. Ändra arkitekturlayouter, färger, mallar för grafiska inställningar (till exempel ikonstorlek).
  3. Ändra ljuddesign, mediafiler.
  4. Ta bort annonser.
  5. Förbigå blockering av betalt innehåll.
  6. Överför en applikation från enhetens interna minne till ett SD-kort.
  7. Ändra upplösning och mycket mer.

För att förstå hur du använder verktyget måste du ladda ner apk editor pro och gå till menyn. Välj sedan antingen installerad applikation på Android eller dess apk-fil. Efter detta öppnas standarddata, som användaren kan ändra:

  • redigeringsresurser;
  • ersätta filer;
  • allmän redigering;
  • dataredigering.

Programmet kommer att erbjuda dig att installera den modifierade versionen. Detta fungerar inte i alla fall, så gammal version måste tas bort manuellt och en ny installeras. Efter borttagning bör du välja mappen apk-redigerare (för enkelhetens skull kan du använda ES Explorer) bland programmen på Android och hitta den modifierade applikationsfilen och installera den på enheten.

Programmet har ett användarvänligt gränssnitt. Navigeringen är ganska enkel, men användaren behöver ha grundläggande kunskaper i engelska för att förstå det.

Fördelar och nackdelar

  1. Programmet öppnar upp för användaren ett brett utbud av alternativ för att anpassa applikationer.
  2. Menyn innehåller en hjälpsektion, som enkelt och i detalj beskriver ett stort antal funktioner i redigeringsprogrammet. Därför behöver användare som är långt ifrån programmering leta efter exempel och redigeringsinstruktioner på tredjepartsresurser.
  3. Du kan ladda ner programmet gratis på vår hemsida.

Att använda det här verktyget kräver vissa färdigheter och kunskaper. I händerna på en oerfaren användare kan redigering leda till kränkningar av filsystemets integritet, vilket i slutändan kommer att leda till programfel. I menyn i hjälpobjektet finns konverteringsexempel med bilder och tips om hur man korrekt använder apk editor pro på Android. Därför, om du vill förstå detta program, följ bara instruktionerna.

Redaktör - nog användbart verktyg för dem som står inför ett obekvämt applikationsgränssnitt (brist på ryska språket, konstant reklam, banners, etc.). Om du redan har använt det här programmet, dela dina intryck nedan i kommentarerna.

Från den här artikeln kommer du att lära dig vad Android-applikationen består av, hur man öppnar en APK-fil och med vilka program.

Vad är en APK-fil?

APK - driftformat Android-system, används för arkiverade körbara programfiler, och namnet på själva filen kan vara vad som helst, men tillägget ska bara se ut så här.apk. APK-analoger i andra operativsystem är .msi i Windows, .sis i Symbian, .rpm eller .deb i Linux.

Låt oss se vad som finns inuti
Faktum är att .apk är ett ZIP-arkiv, så du kan titta på den interna strukturen med vilken som helst filhanterare eller en arkiverare som WinRAR eller mobilapplikationen X-plore.





Det är värt att komma ihåg att du bara får visuell tillgång till interna resurser; redigeringsmöjligheterna är extremt begränsade.
Låt oss titta på strukturen
Inuti .apk ser vi ett antal filer och mappar, låt oss ta reda på vad de är till för:
  • AndroidManifest.xml är ett slags "pass" för applikationen där du kan ta reda på alla huvudpunkter, krav, version, behörigheter etc.
  • META-INF denna fil innehåller metadata, det vill säga data om data, kontrollsummor, sökvägar till data, sökvägar och kontrollsummor av resurser, certifikat. Du kan öppna den här filen med vilken textredigerare som helst, men det rekommenderas att använda Notepad++.
  • Res-mappen innehåller alla programresurser, grafik, såsom ikoner, bilder, text och grafiska gränssnittselement. Du kan också enkelt komma åt mappen.
  • classes.dex är den direkta applikationsprogramkoden som körs av den virtuella Dalvik VM-maskinen; du kan bara se vad som finns i den här filen genom att dekompilera .apk, vi kommer att prata om detta i andra artiklar. resources.arsc - kompilerad XML-fil, denna fil innehåller data om alla resurser som är involverade i programmet.
  • lib - en mapp med inbyggda bibliotek, vars resurser endast kan nås när du använder specialiserade program. APK-filen kan också innehålla filer och mappar som com, org, udk, men inte alltid.

Låt oss nu titta på den interna strukturen mer detaljerat; för detta behöver vi ett dekompileringsprogram, Java och en APK-fil. Huvudverktyget för att ta isär .apk är Apktool, men det här programmet Det fungerar bara från en linje, vilket inte är särskilt bekvämt. För snabbare och bekvämare analys kan du använda APKing, detta är fortfarande samma Apktool, men med möjligheten att arbeta från snabbmenyn.
Och så installerar vi APKing som alla program för Windows och, efter att ha valt .apk, klickar du på den med höger musknapp och Shift samtidigt, varefter vi ser följande:


Och välja nödvändig åtgärd, till exempel, dekompilera helt, då kommer programmet att slutföra operationen och skapa en mapp med samma namn.


Genom att öppna mappen får vi tillgång till alla resurser i filen APK.


Det är allt textfiler kan redigeras, samtidigt som du följer de grundläggande reglerna kan du använda det populära programmet Notepad++, till exempel överväga AndroidManifest.xml

Det är jag igen och mina instruktioner för tekannor och kaffekannor med bilder.

Den här gången kommer jag att prata i detalj om att ersätta systemkomponenter i Android OS med hjälp av exemplet att installera en modifiering av statusfältet.

Android är lite Linux. Det är nödvändigt att följa ett antal regler när du byter ut filer så att telefonen inte förvandlas till en tegelsten, som bara kan återupplivas genom en fullständig blinkning med förlust av all data från enhetens interna minne. Interna partitioner är formaterade i filsystem skiljer sig från FAT32 på flash-enheter. Filegenskaper lagrar bland annat behörigheter för olika användargrupper (filägare, filägargrupp, andra användare). När man arbetar med systemfiler de måste sparas, för när systemet laddas kanske systemet helt enkelt inte kan komma åt dem och kanske inte startar normalt.
Låt oss börja med verktygen.

Vi kommer att behöva:

  • En filhanterare som kan arbeta med roträttigheter och filbehörigheter. Root Explorer är bäst (du köpte den, eller hur?)
  • Själva den modifierade filen, som vi vill sätta i stället för system ett (länk i slutet av artikeln).

Nu använder vi en av de bekväma funktionerna i Root Explorer. Låt oss trycka länge på den önskade filen för att få fram snabbmenyn

Och klicka på objektet " Zippa den här filen"för att spara filen i ett zip-arkiv på SD-kortet. Efter arkivering får vi följande meddelande:

Tryck på knappen " Stanna kvar" att stanna kvar i mappen och göra en sak till.

Nu är allt klart för att ersätta filen.
Jag har redan pratat om åtkomsträttigheterna för varje fil. För att återskapa dem på en ny fil måste du först titta på dem från den gamla. De representeras av en serie symboler "rwxrwxrwx". 1:a triaden - ägarrättigheter, 2:a - ägargrupper, 3:a - alla andra användare. Vår fil har behörigheter "rw-r--r--".

Gå nu till SD-kortet, hitta den modifierade filen där och välj objektet från dess snabbmeny " Kopiera", men skynda dig inte att välja mappen "/system/app" direkt, eftersom vi omedelbart kommer att skada systemet. Kopiera istället filen till en speciell mapp för temporära filer "/data/local/tmp" för att få fil i ett formulär som tar systemet.
Ring först filens snabbmeny och välj " Döp om" och ange filnamnet "SystemUI.apk". Det stämmer, för i Linux är fallet med bokstäverna i namnet avgörande, dvs. "systemui.apk" och "SystemUI.apk" är olika filer.
Därefter måste du ändra filbehörigheterna, för nu är de nästan säkert felaktigt inställda. För att göra detta, ring igen filens snabbmeny med ett långt tryck och välj objektet " Behörigheter". För vårt värde "rw-r--r--" ska kryssrutorna placeras så här:

Klick " OK" och anropa snabbmenyn igen. Nu måste du ändra ägare och grupp för denna applikation. För att göra detta, välj objektet " Byt ägare". Ett fönster kommer att visas med information om den nuvarande ägaren av filen.
Här måste vi göra en liten avvikelse.
I mappen "/system/app" ägs alla filer av användaren "root" (uid=0) och gruppen "root" (gid=0), och i mappen "/system/framework" användaren " system" (gid=1000) ägs. och gruppen "system" (gid=1000).
Baserat på ovanstående, ställ in de nödvändiga värdena och klicka på " OK".
Och för tredje gången, ring upp snabbmenyn för filen och välj objektet " Kopiera" och i kopieringsdialogrutan gå till mappen "/system/app". Klicka nu på " Klistra" och läs vidare noggrant.
Nästan omedelbart kommer systemet att informera dig om att statusfältsprocessen plötsligt har avslutats och kommer att erbjuda dig att starta den. Alla försök kommer att misslyckas. Mellan utseendet på fönster måste du ha tid att göra ett antal åtgärder. Innan du trycker på knappen måste du ta fram menyn för att stänga av enheten, den visas under en varning. Nu måste du placera fingret ungefär på vänster sida av knappen. Nu måste du klicka med fingret tre gånger mycket snabbt så att du har tid att stänga varningen, välj avstängningsalternativet och bekräfta dina avsikter.
Nu väntar vi på att telefonen ska stängas av, starta om den och njuta av resultatet, eller inte njuta av det och leta efter fel.

Ibland passar vissa applikationer på Android inte användaren på något sätt. Ett exempel är påträngande reklam. Och det händer också att programmet är bra för alla, men översättningen i det är antingen snett eller helt frånvarande. Eller, till exempel, programmet är en testversion, men det finns inget sätt att få den fullständiga versionen. Hur ändrar man situationen?

Introduktion

I den här artikeln kommer vi att prata om hur man demonterar ett APK-paket med en applikation, tittar på dess interna struktur, demonterar och dekompilerar bytekoden och försöker också göra flera ändringar i applikationerna som kan ge oss en eller annan fördel.

För att göra allt detta själv behöver du åtminstone grundläggande kunskaper i Java-språket, som Android-applikationer skrivs i, och XML-språket, som används överallt i Android - från att beskriva själva applikationen och dess åtkomsträttigheter till att lagra strängar som kommer att visas på skärmen. Du behöver också förmågan att använda specialiserad konsolmjukvara.

Så, vad är ett APK-paket där absolut all Android-programvara distribueras?

Applikationsdekompilering

I den här artikeln arbetade vi bara med demonterad applikationskod, men om mer allvarliga ändringar görs i stora applikationer blir det mycket svårare att förstå smali-koden. Lyckligtvis kan vi dekompilera dex-koden till Java-kod, som, även om den inte är original och inte kompilerad tillbaka, är mycket lättare att läsa och förstå applikationens logik. För att göra detta behöver vi två verktyg:

  • dex2jar är en översättare av Dalvik bytecode till JVM bytecode, på basis av vilken vi kan erhålla kod på Java-språket;
  • jd-gui är en dekompilerare i sig som låter dig få läsbar Java-kod från JVM bytecode. Som ett alternativ kan du använda Jad (www.varaneckas.com/jad); Även om den är ganska gammal, genererar den i vissa fall mer läsbar kod än Jd-gui.

Så här ska de användas. Först startar vi dex2jar och anger sökvägen till apk-paketet som ett argument:

% dex2jar.sh mail.apk

Som ett resultat kommer Java-paketet mail.jar att dyka upp i den aktuella katalogen, som redan kan öppnas i jd-gui för att se Java-koden.

Arrangering av APK-paket och mottagande av dem

Plastpåse Android-applikationer, i själva verket är en vanlig ZIP-fil, inga speciella verktyg krävs för att se innehållet och extrahera det. Det räcker med att ha en arkiverare - 7zip för Windows eller console unzip på Linux. Men det handlar om omslaget. Vad finns inuti? I allmänhet har vi följande struktur inuti:

  • META-INF/- innehåller ett digitalt certifikat för applikationen, som identifierar dess skapare, och kontrollsummor för paketfilerna;
  • res/ - olika resurser som applikationen använder i sitt arbete, såsom bilder, deklarativ beskrivning av gränssnittet, samt annan data;
  • AndroidManifest.xml- beskrivning av ansökan. Detta inkluderar till exempel en lista över nödvändiga behörigheter Android version Och krävs tillstånd skärm;
  • classes.dex- kompilerad applikationsbytekod för virtuell maskin Dalvik;
  • resources.arsc- även resurser, men av ett annat slag - i synnerhet strängar (ja, den här filen kan användas för russifiering!).

De listade filerna och katalogerna finns, om inte alla, så kanske i de allra flesta APK-filer. Det finns dock några fler inte så vanliga filer/kataloger värda att nämna:

  • tillgångar- Analog av resurser. Den största skillnaden är att för att komma åt en resurs måste du känna till dess identifierare, men listan över tillgångar kan erhållas dynamiskt med metoden AssetManager.list() i applikationskoden;
  • lib- Inbyggda Linux-bibliotek skrivna med NDK (Native Development Kit).

Den här katalogen används av spelproducenter som placerar sina spelmotorer skrivna i C/C++ där, såväl som av skapare av högpresterande applikationer (till exempel Google Chrome). Vi kom på enheten. Men hur får du paketfilen för den applikation du är intresserad av? Eftersom det inte är möjligt att hämta APK-filer från enheten utan root (de finns i /data/app-katalogen), och att roota inte alltid är tillrådligt, finns det minst tre sätt att få applikationsfilen till din dator:

  • APK Downloader-tillägg för Chrome;
  • Real APK Leecher app;
  • olika filhosting och Varezniks.

Vilken man ska använda är en smaksak; vi föredrar att använda separata applikationer, så vi kommer att beskriva användningen av Real APK Leecher, särskilt eftersom den är skriven i Java och följaktligen kommer att fungera i antingen Windows eller Nix.

Efter att ha startat programmet måste du fylla i tre fält: E-post, Lösenord och Enhets-ID - och välja ett språk. De två första är e-postadressen och lösenordet för ditt Google-konto som du använder på enheten. Den tredje är enhetsidentifieraren och kan erhållas genom att skriva in koden på uppringaren # #8255## och sedan hitta enhets-ID-raden. När du fyller i behöver du bara ange ID utan android-prefix.

Efter att ha fyllt i och sparat dyker ofta meddelandet "Fel vid anslutning till servern" upp. Det har inget med Google Play att göra, så ignorera det gärna och leta efter paket som intresserar dig.

Visa och ändra

Låt oss säga att du hittade ett paket som intresserar dig, laddade ner det, packade upp det... och när du försökte visa någon XML-fil blev du förvånad över att upptäcka att filen inte var text. Hur dekompilerar man det och hur man arbetar med paket i allmänhet? Är det verkligen nödvändigt att installera SDK? Nej, det är inte nödvändigt att installera SDK alls. Faktum är att alla steg för att extrahera, ändra och paketera APK-paket kräver följande verktyg:

  • ZIP-arkiv för uppackning och packning;
  • smali- Dalvik virtuell maskin bytecode assembler/disassembler (code.google.com/p/smali);
  • aapt- ett verktyg för att paketera resurser (som standard lagras resurser i binär form för att optimera applikationsprestanda). Ingår i Android SDK, men kan erhållas separat;
  • undertecknare- verktyg för digital signatur modifierat paket (bit.ly/Rmrv4M).

Du kan använda alla dessa verktyg separat, men detta är obekvämt, så det är bättre att använda programvara på högre nivå byggd på deras bas. Om du arbetar på Linux eller Mac OS X finns det ett verktyg som heter apktool. Det låter dig packa upp resurser i sin ursprungliga form (inklusive binära XML- och arsc-filer), bygga om ett paket med ändrade resurser, men det vet inte hur man signerar paket, så du måste köra signerarens verktyg manuellt. Trots att verktyget är skrivet i Java är installationen ganska ostandard. Först måste du hämta själva jar-filen:

$ 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

Om du arbetar på Windows, så finns det ett utmärkt verktyg för det som heter Virtuous Ten Studio, som också samlar alla dessa verktyg (inklusive själva apktool), men istället för ett CLI-gränssnitt ger det användaren ett intuitivt grafiskt gränssnitt med vilket du kan utföra operationer för uppackning, demontering och dekompilering med några få klick. Det här verktyget är donationsprogram, det vill säga ibland dyker det upp fönster som ber dig att skaffa en licens, men i slutändan kan detta tolereras. Det är ingen idé att beskriva det, för du kan förstå gränssnittet på några minuter. Men apktool, på grund av dess konsolkaraktär, bör diskuteras mer i detalj.


Låt oss titta på apktool-alternativen. Kort sagt, det finns tre grundläggande kommandon: d (avkoda), b (bygga) och if (installera ramverk). Om allt är klart med de två första kommandona, vad gör det tredje, villkorliga uttalandet? Den packar upp det specificerade UI-ramverket, vilket är nödvändigt i de fall du dissekerar ett systempaket.

Låt oss titta på de mest intressanta alternativen för det första kommandot:

  • -s- ta inte isär dex-filer;
  • -r- packa inte upp resurser;
  • -b- sätt inte in felsökningsinformation till resultaten av demontering av dex-filen;
  • --frame-path- använd det angivna UI-ramverket istället för det som är inbyggt i apktool. Låt oss nu titta på ett par alternativ för b-kommandot:
  • -f- tvångsmontering utan kontroll av ändringar;
  • -a- ange sökvägen till aapt (ett verktyg för att bygga ett APK-arkiv), om du av någon anledning vill använda det från en annan källa.

Att använda apktool är väldigt enkelt; för att göra detta, specificera bara ett av kommandona och sökvägen till APK, till exempel:

$ apktool d mail.apk

Efter detta kommer alla extraherade och demonterade filer av paketet att visas i e-postkatalogen.

Förberedelse. Inaktivera reklam

Teori är naturligtvis bra, men varför behövs det om vi inte vet vad vi ska göra med det uppackade paketet? Låt oss försöka tillämpa teorin till vår fördel, nämligen modifiera någon programvara så att den inte visar oss reklam. Låt det till exempel vara Virtual Torch - en virtuell ficklampa. Den här programvaran är idealisk för oss, eftersom den är fylld till yttersta gränsen med irriterande reklam och dessutom är den enkel nog att inte gå vilse i koddjungeln.


Så, med någon av ovanstående metoder, ladda ner applikationen från marknaden. Om du bestämmer dig för att använda Virtuous Ten Studio, öppna helt enkelt APK-filen i applikationen och packa upp den, skapa ett projekt (Arkiv -> Nytt projekt), välj sedan Importera fil i projektets snabbmeny. Om ditt val föll på apktool, kör bara ett kommando:

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

Efter detta kommer ett filträd liknande det som beskrivs i föregående avsnitt att dyka upp i katalogen com.kauf.particle.virtualtorch, men med en extra smali-katalog istället för dex-filer och en apktool.yml-fil. Den första innehåller demonterad kod för programmets körbara dex-fil, den andra innehåller serviceinformation som krävs för att apktool ska kunna montera tillbaka paketet.

Det första stället vi bör leta är naturligtvis AndroidManifest.xml. Och här möter vi omedelbart följande rad:

Det är inte svårt att gissa att det är ansvarigt för att ge applikationen behörighet att använda internetanslutningen. Faktum är att om vi bara vill bli av med reklam kommer vi sannolikt bara att behöva blockera applikationen från Internet. Låt oss försöka göra det här. Vi tar bort den angivna raden och försöker bygga programvaran med apktool:

$ apktool b com.kauf.particle.virtualtorch

Den resulterande APK-filen kommer att visas i katalogen com.kauf.particle.virtualtorch/build/. Det kommer dock inte att vara möjligt att installera det, eftersom det inte är digitalt signerat och kontrollsummor filer (det finns helt enkelt ingen META-INF/-katalog i den). Vi måste signera paketet med hjälp av apk-signer-verktyget. Lanserades. Gränssnittet består av två flikar - på den första (Key Generator) skapar vi nycklar, på den andra (APK Signer) signerar vi. För att skapa vår privata nyckel, fyll i följande fält:

  • Målfil- keystore utdatafil; den lagrar vanligtvis ett par nycklar;
  • Lösenord Och Bekräfta- lösenord för lagringen;
  • Alias- namnet på nyckeln i förrådet;
  • Alias ​​lösenord Och Bekräfta- hemligt nyckellösenord;
  • Giltighet- Giltighetstid (i år). Standardvärdet är optimalt.

De återstående fälten är i allmänhet valfria - men minst ett måste fyllas i.


VARNING

För att signera en applikation med apk-signer måste du installera Android SDK och ange fullständig sökväg före det i programinställningarna.

All information tillhandahålls endast i informationssyfte. Varken redaktörerna eller författaren är ansvariga för eventuell skada orsakad av materialet i denna artikel.

Nu kan du signera APK-filen med denna nyckel. På fliken APK Signer, välj den nyskapade filen, ange lösenordet, nyckelaliaset och lösenordet, leta reda på APK-filen och klicka djärvt på "Sign"-knappen. Om allt går bra kommer paketet att signeras.

INFO

Eftersom vi signerade paketet med vår egen nyckel kommer det att komma i konflikt med den ursprungliga applikationen, vilket innebär att när vi försöker uppdatera programvaran via marknaden får vi ett felmeddelande.

En digital signatur krävs bara för programvara från tredje part, så om du ändrar systemapplikationer, som installeras genom att kopiera till /system/app/-katalogen, behöver du inte signera dem.

Efter det, ladda ner paketet till din smartphone, installera det och starta det. Voila, annonsen är borta! Istället dök dock ett meddelande upp att vi inte har internet eller att vi inte har rätt behörighet. I teorin kan det här räcka, men meddelandet ser irriterande ut, och för att vara ärlig hade vi bara tur med en dum ansökan. Normalt skriven programvara kommer med största sannolikhet att förtydliga sina referenser eller söka efter en internetanslutning och annars helt enkelt vägra att starta. Hur ska man vara i det här fallet? Självklart, redigera koden.

Vanligtvis skapar applikationsförfattare speciella klasser för att visa annonser och anropsmetoder för dessa klasser när applikationen eller en av dess "aktiviteter" (enkelt uttryckt applikationsskärmar) startas. Låt oss försöka hitta dessa klasser. Vi går till smali-katalogen, sedan com (org innehåller bara det öppna grafiska biblioteket cocos2d), sedan kauf (det är här det är, eftersom det här är namnet på utvecklaren och all hans kod finns där) - och här är den, marknadsföringskatalogen. Inuti hittar vi ett gäng filer med tillägget smali. Det här är klasser, och den mest anmärkningsvärda av dem är Ad.smali-klassen, från vars namn det är lätt att gissa att det är den som visar reklam.

Vi skulle kunna ändra logiken i dess funktion, men det skulle vara mycket lättare att helt enkelt ta bort anrop till någon av dess metoder från själva applikationen. Därför lämnar vi marknadsföringskatalogen och går till den intilliggande partikelkatalogen och sedan till virtualtorch. Filen MainActivity.smali förtjänar särskild uppmärksamhet här. Detta är en standard Android-klass som skapas av Android SDK och installeras som ingångspunkt till applikationen (analogt med huvudfunktionen i C). Öppna filen för redigering.

Inuti finns smali-kod (lokal montör). Den är ganska förvirrande och svår att läsa på grund av dess lågnivåkaraktär, så vi kommer inte att studera den, utan hittar helt enkelt alla referenser till annonsklassen i koden och kommenterar dem. Vi anger raden "Annons" i sökningen och kommer till rad 25:

Fält privat annons:Lcom/kauf/marketing/Ad;

Här skapas ett annonsfält för att lagra ett annonsklassobjekt. Vi kommenterar genom att placera ett ###-tecken framför raden. Vi fortsätter sökandet. Linje 423:

Ny instans v3, Lcom/kauf/marketing/Ad;

Det är här objektskapandet sker. Låt oss kommentera. Vi fortsätter sökningen och hittar på raderna 433, 435, 466, 468, 738, 740, 800 och 802 anrop till metoder i klassen Ad. Låt oss kommentera. Ser ut som det är det. Spara. Nu ska paketet sättas ihop igen och kontrolleras för funktionalitet och förekomst av reklam. För experimentets renhet returnerar vi raden borttagen från AndroidManifest.xml, sätter ihop paketet, signerar och installerar.

Vårt marsvin. Reklam synlig

hoppsan! Reklamen försvann bara medan applikationen kördes, men fanns kvar i huvudmenyn, som vi ser när vi startar programvaran. Så, vänta, men ingångspunkten är MainActivity-klassen, och annonsen försvann medan applikationen kördes, men förblev i huvudmenyn, så ingångspunkten är annorlunda? För att identifiera den verkliga ingångspunkten öppnar du filen AndroidManifest.xml igen. Och ja, den innehåller följande rader:

De berättar för oss (och, ännu viktigare, androiden) att en aktivitet som heter Start bör lanseras som svar på genereringen av en avsikt (händelse) android.intent.action.MAIN från kategorin android.intent.category.LAUNCHER. Den här händelsen genereras när du trycker på programikonen i startprogrammet, så den bestämmer startpunkten, nämligen Start-klassen. Troligtvis skrev programmeraren först en applikation utan huvudmeny, vars ingångspunkt var standardklassen MainActivity, och lade sedan till ett nytt fönster (aktivitet) som innehåller menyn och beskrivs i klassen Start, och gjorde det manuellt till ingången punkt.

Öppna filen Start.smali och leta igen efter raden "Ad", vi hittar på raderna 153 och 155 ett omnämnande av FirstAd-klassen. Den finns också i källkoden och, av namnet att döma, ansvarar den för att visa annonser på huvudskärmen. Låt oss titta vidare, det finns skapandet av en instans av FirstAd-klassen och en avsikt som, enligt sammanhanget, är relaterad till denna instans, och sedan etiketten cond_10, den villkorliga övergången till vilken utförs exakt innan en instans skapas av klassen:

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

Troligtvis beräknar programmet på något sätt slumpmässigt om reklam ska visas på huvudskärmen, och om inte, hoppar det direkt till cond_10. Ok, låt oss förenkla hennes uppgift och ersätta den villkorliga övergången med en ovillkorlig:

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

Det finns inga fler omnämnanden av FirstAd i koden, så vi stänger filen och sätter ihop vår virtuella ficklampa med apktool. Kopiera den till din smartphone, installera den, starta den. Voila, all reklam har försvunnit, vilket vi gratulerar oss alla till.

Resultat

Den här artikeln är bara en kort introduktion till metoderna för att hacka och ändra Android-applikationer. Många problem kvarstod bakom kulisserna, som att ta bort skydd, tolka obfuskerad kod, översätta och ersätta programresurser, samt modifiera program som skrivits med använder Android NDK. Men med grundläggande kunskaper är det bara en tidsfråga att ta reda på allt.




Topp