Program for å endre apk. Grunnleggende om redigering av Android-systemapplikasjoner (apk). Arrangering av APK-pakker og mottak av dem

APK er et format som brukes i Android-operativsystemet for arkiverte kjørbare programfiler. Analogen, for eksempel, i Windows er .msi, i Symbian - .sis, i Linux - .rpm eller .deb. I denne artikkelen vil vi forstå alle problemer med dette filformatet så detaljert som mulig.

Prosessen med å demontere, redigere og montere "riktig" kalles omvendt konstruksjon. Hva trengs for dette? Følgende verktøy kreves:

Apktool. Det er mer praktisk å bruke med SmartApktool-skallet; du kan også bruke ferdige batchfiler, for eksempel ApktoolBAT.

Notisblokk++ - ikke nødvendig, men anbefales på det sterkeste.

7zip eller WinRar, eller et annet arkiveringsprogram, men ett av disse anbefales.

Deodexed firmware.

Det er flere måter å installere applikasjoner på Android-operativsystemet. Den første, også den viktigste, er direkte gjennom Google Play(Android Market), det vil si fra en offisiell kilde, som krever en Google-konto. Mange applikasjoner er betalt, hvis du ikke vil lete etter en hacket versjon på piratkopierte sider, må du betale for kjøpet. Men vi vil snakke om hvordan du gjør dette. Den andre er fra andre uoffisielle kilder enn Google Play, som du må aktivere alternativet "Tillat installasjon av applikasjoner fra uoffisielle kilder" i innstillingene på smarttelefonen eller nettbrettet, hvoretter APK-installasjonsfilen må skrives til minnet kort.

Det er også mulig å installere APK-applikasjoner i bulk. For å gjøre dette trenger du Astro File Manager - en spesiell filbehandler. Etter å ha installert den, flytt applikasjonene:

Fra en smarttelefon/nettbrett: inn mntsdcardackupsapp(med andre ord, minnekort, deretter backup-mappen, app-mappe)

Fra en personlig datamaskin (ikke glem å aktivere tilkoblingen til Android-enheten i enkel USB-stasjonsmodus): SD kortsikkerhetskopierapp

Åpne deretter ønsket applikasjon, i kontekstmenyen velg "Applikasjonsbehandling" og gå til fanen "Sikkerhetskopier", der vi velger "Langt klikk eller sjekk applikasjonen som skal installeres." Klikk på "Installer"-knappen - alle applikasjoner vil bli installert på enheten din.

Det er ganske enkelt å se hva strukturen til en APK-fil er. Åpne ønsket APK ved å bruke et arkiveringsprogram, for eksempel WinRar. Her er hva vi ser inni:

AndroidManifest.xml er et slags "pass" som beskriver hva som er i søknaden, inkludert: Systemkrav til applikasjonen, dens struktur og versjon.

META-INF– mappe som inneholder filen MANIFEST.MF(den kan åpnes av nesten alle tekstredigerer, anbefales det å bruke Notepad++), som åpner hvor du kan se SHA-1-sjekksummer og databaner, versjonen av Manifest-Version-standarden, RSA- eller DSA-sertifikatfiler, SF-filen inneholder stier til forskjellige ressurser og deres kontrollsummer. Generelt er META-INF metadatafiler, det vil si data om data.

res– en mappe som inneholder alle "software stuffing"-ressurser, sortert i undermapper. For eksempel, i mappen ~drawable~ er det grafiske elementer av applikasjoner (ulike statuser, ikoner, etc.), i layoutkatalogen er det XML-filer som indikerer plasseringen av grafiske elementer brukergrensesnitt(GUI).

classes.dex– programkode utført av den virtuelle Dalvik VM-maskinen. La oss huske at Android-operativsystemet er en blanding av Linux-kjernen og den virtuelle Java-maskinen.

resources.arsc– kompilert XML-fil. Den inneholder data om alle ressurser som brukes av programmet.

eiendeler– en mappe som også inneholder ulike ressurser; den er kanskje ikke i APK i det hele tatt.

lib– en mappe som inneholder "libs" eller, enklere, native biblioteker, hvis programmet er skrevet med NDK, for eksempel med elementer når C++. Denne katalogen er kanskje ikke i APK-en.

com– er kanskje ikke i APK-en.

org– er kanskje ikke i APK-en.

utk– er kanskje ikke i APK-en.

Vi har behandlet innholdet i APK-applikasjonen, la oss nå fortsette til den detaljerte demonteringen. For dekompilering trenger du Apktool og Java, samt selve APK-filen. Apktool anbefales å pakkes ut i en katalog C:WINDOWS(dette er ikke nødvendig, men det vil være mer praktisk. Hvorfor – les litt lavere).

For å starte Apktool må du gå inn i "Kjør"-menyen på datamaskinen din. På Windows XP klikker du Start -> Kjør, på Windows 7: Oppgavebehandling ( Ctrl+Alt+Del), øverst i rullegardinmenyen Fil -> Ny oppgave (Kjør...), eller bare kall det med en hurtigtast Win+R.

Ringer kommandolinje- vi skriver cmd, hvoretter vi lanserer Apktool - skriv apktool(for dette formålet var det nødvendig å plassere den i WINDOWS-mappen). Videre skjer all kontroll gjennom kommandolinjen ved hjelp av parametere.

Hvis du ikke vil bry deg med å skrive inn tekstkommandoer hele tiden, kan du bruke GUI– for eksempel det nevnte SmartApkTool. Start SmartApkTool.exe, og velg deretter ønsket APK-applikasjon i Unpack/Pack-fanen (det er viktig at filnavnet ikke inneholder mellomrom, kyrilliske tegn, spesialtegn og skilletegn).

Etter utpakking vil programmet opprette en mappe med samme navn som APK-filen. Inne vil det være alt innholdet i applikasjonen.

APK kan også lokaliseres. Før vi begynner å gjøre dette, starter vi den forhåndsinstallerte Notepad++ og konfigurerer den som følger. Åpning Innstillinger -> Konfigurasjon -> Nytt dokument.

Etter disse trinnene åpner du det utpakkede (dekompilerte) programmet, mappen res/verdier.

Alle lokaliseringer ligger ofte i filen strenger.xml, men noen ganger kan noen av dem være inneholdt i matriser.xml. Kopier disse filene og lag dem i en mappe res mappe verdier-ru og sett dem inn i den.

Nå kan du åpne strenger.xml bruk Notepad++, lag oversettelsen og lagre den endrede filen.

I fil AndroidManifest.xml Du kan spesifisere hvor APK-applikasjoner skal installeres. OBS, dette er kun relevant for Android versjon 2.2 og nyere. Så åpne den angitte filen ved å bruke Notepad++. Nesten helt i begynnelsen kan du se parameteren:

Her kan du spesifisere følgende alternativer (etter "="-symbolet):

Kun internt– applikasjonen vil kun installeres i internt minne enheter

auto– gir brukeren valget mellom å installere applikasjonen i internminnet eller på et minnekort

foretrekker Ekstern– programmet vil bli installert på minnekortet. Det bør tas i betraktning at ikke alle applikasjoner vil fungere riktig hvis de er installert på en ekstern stasjon, eller vil ikke fungere i det hele tatt. Disse inkluderer:

Tjenester– altså tjenester

Alarmtjenester– tjenester som bruker tid, for eksempel vekkerklokker

Inndatametodemotorer– inndataapplikasjoner, inkludert forskjellige tastaturer

Levende bakgrunnsbilder- "levende" animert bakgrunnsbilde

BoMapper– henholdsvis animerte kataloger

AppWidgets– ulike "widgets"

RegnskapLedere– ledere av ulike kontoer, inkludert ICQ-kunder, klienter for sosiale nettverk og så videre

Synkroniseringsadaptere– programmer som krever konstant synkronisering

EnhetAdministratorer– applikasjoner som brukes til administrasjon

Kopibeskyttelse– programmer som er beskyttet mot kopiering.

I applikasjonen kan du redigere og erstatte ulike ikoner og grafiske elementer i brukergrensesnittet med dine egne. For å gjøre dette, åpne mappen res i mappen med den dekompilerte APK-applikasjonen, her kan du se mappene:

drawable-hdpi

drawable-ldpi

Disse mappene inneholder alle ikonene og andre grafiske elementer i programmet. Bokstaven før "dpi" betyr størrelsen på henholdsvis de grafiske elementene:

hdpi - punkter per tomme med høy tetthet, størrelse 72x72 piksler

mdpi - gjennomsnittlig punkter per tomme tetthet, størrelse 48x48 piksler

ldpi - lav punkter per tomme tetthet, størrelse 36x36 piksler

For å endre for eksempel programikonet, åpne filen AndroidManifest.xml bruk Notepad++-programmet, se etter linjen der ikonet er indikert, se på dets eksakte navn (merk at filtypen ikke er skrevet ned, bare filnavnet).

Åpne den tilsvarende mappen trekkbar-*dpi, lim inn den redigerte eller nytt ikon, ikke glem å dobbeltsjekke den originale tittelen AndroidManifest.xml. Bildet må være i .png-format og ha nøyaktig samme pikseltetthet som kildefilen, for eksempel for hdpi det er 72x72 piksler.

Hvis du vil erstatte navnet på ikonet med ditt eget, lagrer du bildet med ønsket filnavn i trekkbar-*dpi, hvoretter vi angir nøyaktig samme navn i AndroidManifest.xml(For eksempel android:icon="@drawable/test"). På samme måte kan du endre alle andre grafiske elementer, men kravene er de samme - filtypen må være .png og tettheten av prikker per tomme er den samme som kildefilen.

I den utpakkede applikasjonen kan du dobbeltsjekke hvilke rettigheter den har. Dette er nyttig hvis APK-en ble installert fra en ukjent kilde, og for å unngå en situasjon der en lommelykt eller en vakker kalender plutselig begynner å sende betalte SMS-meldinger til ukjent nummer. Åpning AndroidManifest.xml Notepad++-program og se etter de tilsvarende linjene. For sending tekstmeldinger, for eksempel reagerer parameteren SEND TEKSTMELDING. Du kan lese mer om alle rettighetene som kan være tilgjengelige for en applikasjon i.

Installerte APK-applikasjoner kan trekkes ut fra systemet. Dette kan gjøres på flere måter. Først kan du installere Astro File Manager. Åpne applikasjonen, og velg deretter "Programbehandling" fra hurtigmenyen. Ser etter nødvendig søknad, merk den med et hakemerke og lag en sikkerhetskopi. Etter behandling vil den valgte applikasjonen bli plassert langs stien:

mntsdcardackupsapp

sdcardackupsapp

Deretter kan du bruke Rotprogram Avinstalleringsprogram. Etter å ha startet applikasjonen, vil den automatisk bestemme alt installerte APK-er og vil automatisk sikkerhetskopiere alle. Følgelig kan du, hvis ønskelig, kopiere disse sikkerhetskopiene for videre dekompilering; de er plassert langs stien:

mntsdcardRootUnistallerautobackups(når den vises direkte fra en Android-enhet)

sdcardRootUnistallerautobackups(når den vises via en datamaskin, mens Android-enheten er koblet til som en USB-stasjon).

En annen måte er å bruke Root Browser Lite, selvfølgelig trenger du root-rettigheter for dette. Åpning denne søknaden, vi følger stien:

systemapp(hvis du er interessert i systemapplikasjoner).

Vi kopierer de nødvendige applikasjonene til minnekortet, hvoretter du kan utføre eventuelle manipulasjoner med dem.

Du kan også laste ned APK-applikasjoner du er interessert i fra Google Play (Android Market) direkte til Personlig datamaskin. Du trenger en nettleser for dette Google Chrome(versjon ikke lavere enn 17), og plugin for det er APK-nedlaster. Etter å ha lastet ned og installert den angitte plugin-modulen, lag en kopi av snarveien Google nettleser Chrome, der vi skriver følgende linje etter et mellomrom:

-ignorer-sertifikat-feil

Med standard nettleserinstallasjonsbane, skal linjen se slik ut:

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

Etter det, skriv inn i smarttelefonoppringeren:

*#*#8255#*#*

Vi omskriver enhets-ID-en, som består av 16 tegn. Åpne Google Chrome ved å bruke den opprettede snarveien med den angitte parameteren -ignorer-sertifikat-feil, la oss gå til Verktøy -> Utvidelser(du kan også skrive inn "chrome://settings/extensions" i adressefeltet), åpne innstillingene for APK Downloader-plugin. I alternativene skriver du inn e-postadressen og passordet ditt regnskap Google, samt den mottatte enhets-ID-en. Gå nå til Google Play (Android Market), åpne siden med ønsket applikasjon, vi venter på at den skal være fullastet. APK Downloader-ikonet vises - etter å ha klikket på det, vil applikasjonen lastes ned til datamaskinen din.

Apk editor pro, som du kan laste ned for Android på nettsiden vår, lar deg hacke/endre innholdet i filene til enhver applikasjon for mobile enheter og skreddersy den til din smak.

Egendommer

Programmet er et profesjonelt verktøy som i hendene på avanserte brukere kan bli et kraftig verktøy for å redigere applikasjoner for Android. Funksjonaliteten er praktisk talt ikke forskjellig fra den tilsvarende programvare for personlige datamaskiner.

Hva kan dette verktøyet gjøre?

  1. Endre (oversett) navnene på andre applikasjoner.
  2. Endre arkitekturoppsett, farger, maler for grafiske innstillinger (for eksempel ikonstørrelse).
  3. Endre lyddesign, mediefiler.
  4. Fjern annonser.
  5. Omgå blokkering av betalt innhold.
  6. Overfør en applikasjon fra enhetens interne minne til et SD-kort.
  7. Endre oppløsning og mye mer.

For å forstå hvordan du bruker verktøyet, må du laste ned apk editor pro og gå til menyen. Velg deretter enten installert applikasjon på Android, eller dens apk-fil. Etter dette åpnes standarddataene, som brukeren kan endre:

  • redigeringsressurser;
  • erstatte filer;
  • generell redigering;
  • dataredigering.

Programmet vil tilby å installere den modifiserte versjonen. Dette fungerer ikke i alle tilfeller, så gammel versjon må fjernes manuelt og en ny installeres. Etter sletting bør du velge apk-redigeringsmappen (for enkelhets skyld kan du bruke ES Explorer) blant programmene på Android og finne den endrede applikasjonsfilen og installere den på enheten.

Programmet har et brukervennlig grensesnitt. Navigasjonen er ganske enkel, men brukeren må ha grunnleggende kunnskaper i engelsk for å forstå det.

Fordeler og ulemper

  1. Programmet åpner opp for brukeren et bredt spekter av alternativer for å tilpasse applikasjoner.
  2. Menyen inneholder en hjelpedel, som enkelt og detaljert beskriver et stort antall funksjoner i redigeringsprogrammet. Derfor slipper brukere som er langt unna programmering å lete etter eksempler og redigeringsinstruksjoner på tredjepartsressurser.
  3. Du kan laste ned programmet gratis på vår nettside.

Å bruke dette verktøyet krever litt ferdigheter og kunnskap. I hendene på en uerfaren bruker kan redigering føre til brudd på integriteten til filsystemet, noe som til slutt vil føre til applikasjonsfeil. I menyen i Hjelp-elementet er det konverteringseksempler med bilder og tips om hvordan du bruker apk editor pro på Android riktig. Derfor, hvis du vil forstå dette programmet, er det bare å følge instruksjonene.

Redaktør - nok nyttig verktøy for de som står overfor et ubeleilig applikasjonsgrensesnitt (mangel på russisk språk, konstant reklame, bannere, etc.). Hvis du allerede har brukt dette programmet, del inntrykkene dine nedenfor i kommentarene.

Fra denne artikkelen vil du lære hva Android-applikasjonen består av, hvordan du åpner en APK-fil og med hvilke programmer.

Hva er en APK-fil?

APK - driftsformat Android-systemer, brukes for arkiverte kjørbare programfiler, og navnet på selve filen kan være hva som helst, men utvidelsen skal bare se slik ut.apk. APK-analoger i andre operativsystemer er .msi i Windows, .sis i Symbian, .rpm eller .deb i Linux.

La oss se hva som er inni
Faktisk er .apk et ZIP-arkiv, så du kan se på den interne strukturen ved å bruke hvilken som helst filbehandler eller en arkiver som WinRAR eller X-plore-mobilapplikasjonen.





Det er verdt å huske at du kun får visuell tilgang til interne ressurser; redigeringsmulighetene er ekstremt begrensede.
La oss se på strukturen
Inne i .apk ser vi en rekke filer og mapper, la oss finne ut hva de er for:
  • AndroidManifest.xml er et slags "pass" for applikasjonen der du kan finne ut alle hovedpunktene, kravene, versjonen, tillatelsene osv.
  • META-INF denne filen inneholder metadata, det vil si data om data, kontrollsummer, stier til data, stier og kontrollsummer for ressurser, sertifikater. Du kan åpne denne filen med et hvilket som helst tekstredigeringsprogram, men det anbefales å bruke Notepad++.
  • Res-mappen inneholder alle programressurser, grafikk, som ikoner, bilder, tekst og grafiske grensesnittelementer. Du kan også enkelt få tilgang til mappen.
  • classes.dex er den direkte applikasjonsprogramkoden som kjøres av den virtuelle Dalvik VM-maskinen; du kan bare se hva som er inne i denne filen ved å dekompilere .apk, vi snakker om dette i andre artikler. resources.arsc - kompilert XML-fil, denne filen inneholder data om alle ressursene som er involvert i programmet.
  • lib - en mappe med innfødte biblioteker, hvis ressurser bare kan nås når du bruker spesialiserte programmer. APK-en kan også inneholde filer og mapper som com, org, udk, men ikke alltid.

La oss nå se på den interne strukturen mer detaljert; for dette trenger vi et dekompileringsprogram, Java og en APK-fil. Hovedverktøyet for å demontere .apk er Apktool, men dette programmet Det fungerer bare fra en linje, noe som ikke er veldig praktisk. For raskere og mer praktisk analyse kan du bruke APKing, dette er fortsatt det samme Apktool, men med muligheten til å jobbe fra kontekstmenyen.
Og så installerer vi APKing som enhver applikasjon for Windows, og etter å ha valgt .apk, klikker du på den med høyre museknapp og Shift samtidig, hvoretter vi vil se følgende:


Og velg Nødvendig handling, for eksempel, dekompilere fullstendig, så vil programmet fullføre operasjonen og opprette en mappe med samme navn.


Ved å åpne mappen får vi tilgang til alle ressursene til APK-filen.


Det er det tekstfiler kan redigeres, mens du følger de grunnleggende reglene, kan du bruke det populære Notepad++-programmet, for eksempel vurdere AndroidManifest.xml

Det er meg igjen og instruksjonene mine for tekanner og kaffekanner med bilder.

Denne gangen vil jeg snakke i detalj om å erstatte systemkomponenter til Android OS ved å bruke eksemplet med å installere en statuslinjemodifikasjon.

Android er litt Linux. Det er nødvendig å følge en rekke regler når du erstatter filer, slik at telefonen ikke blir til en murstein, som bare kan gjenopplives ved fullstendig blinking med tap av alle data fra enhetens interne minne. Interne partisjoner er formatert i filsystem forskjellig fra FAT32 på flash-stasjoner. Filegenskaper lagrer blant annet tillatelser for ulike brukergrupper (fileier, fileiergruppe, andre brukere). Ved drift med systemfiler de må lagres, for når systemet lastes inn, kan det hende at systemet rett og slett ikke kan få tilgang til dem og kanskje ikke starter opp normalt.
La oss starte med verktøyene.

Vi trenger:

  • En filbehandler som kan fungere med rotrettigheter og filtillatelser. Root Explorer er best (du kjøpte den, ikke sant?)
  • Selve den modifiserte filen, som vi ønsker å sette i stedet for system en (lenke på slutten av artikkelen).

Nå bruker vi en av de praktiske funksjonene til Root Explorer. La oss trykke lenge på ønsket fil for å få opp kontekstmenyen

Og klikk på elementet " Zip denne filen"for å lagre filen i et zip-arkiv på SD-kortet. Etter arkivering vil vi motta følgende melding:

Trykk på knappen " Oppholde seg" for å bli i mappen og gjøre en ting til.

Nå er alt klart for å erstatte filen.
Jeg har allerede snakket om tilgangsrettighetene til hver fil. For å gjenskape dem på en ny fil, må du først se på dem fra den gamle. De er representert av en serie symboler "rwxrwxrwx". 1. triade - eierrettigheter, 2. - eiergrupper, 3. - alle andre brukere. Filen vår har tillatelser "rw-r--r--".

Gå nå til SD-kortet, finn den endrede filen der og velg elementet fra kontekstmenyen " Kopiere", men ikke skynd deg å velge mappen "/system/app" med en gang, fordi vi vil umiddelbart skade systemet. Kopier i stedet filen til en spesiell mappe for midlertidige filer "/data/local/tmp" for å bringe fil i et skjema som vil ta systemet.
Først ringer du filens kontekstmeny og velger " Gi nytt navn" og skriv inn filnavnet "SystemUI.apk". Det stemmer, for i Linux er tilfellet med bokstavene i navnet viktig, dvs. "systemui.apk" og "SystemUI.apk" er forskjellige filer.
Deretter må du endre filtillatelsene, for nå er de nesten helt sikkert satt feil. For å gjøre dette, ring igjen kontekstmenyen til filen med et langt trykk og velg elementet " Tillatelser". For vår verdi "rw-r--r--" skal avmerkingsboksene plasseres slik:

Klikk " OK" og ring opp kontekstmenyen igjen. Nå må du endre eier og gruppe for denne applikasjonen. For å gjøre dette, velg elementet " Bytt eier Et vindu vises med informasjon om den nåværende eieren av filen.
Her må vi gjøre en liten digresjon.
I mappen "/system/app" eies alle filene av brukeren "root" (uid=0) og gruppen "root" (gid=0), og i mappen "/system/framework" brukeren " system" (gid=1000) eies. og gruppen "system" (gid=1000).
Basert på ovenstående, angi de nødvendige verdiene og klikk på " OK".
Og for tredje gang, ring opp kontekstmenyen for filen og velg elementet " Kopiere" og i kopieringsdialogen gå til mappen "/system/app". Nå kan du gjerne klikke " Lim inn" og les videre nøye.
Nesten umiddelbart vil systemet informere deg om at statuslinjeprosessen plutselig er avsluttet og vil tilby deg å starte den. Alle forsøk vil mislykkes. Mellom utseendet til vinduer må du ha tid til å gjøre en rekke handlinger. Før du trykker på knappen, må du hente frem menyen for å slå av enheten, den vises under en advarsel. Nå må du plassere fingeren omtrent på venstre side av knappen. Nå må du klikke fingeren tre ganger veldig raskt slik at du har tid til å lukke advarselen, velge avslutningsalternativet og bekrefte intensjonene dine.
Nå venter vi på at telefonen slår seg av, starter den på nytt og nyter resultatet, eller ikke nyter den og ser etter feil.

Noen ganger passer noen applikasjoner på Android ikke brukeren på en eller annen måte. Et eksempel er påtrengende reklame. Og det hender også at programmet er bra for alle, men oversettelsen i det er enten skjev eller helt fraværende. Eller, for eksempel, programmet er en prøveversjon, men det er ingen måte å få fullversjonen på. Hvordan endre situasjonen?

Introduksjon

I denne artikkelen vil vi snakke om hvordan du kan demontere en APK-pakke med en applikasjon, se på dens interne struktur, demontere og dekompilere bytekoden, og også prøve å gjøre flere endringer i applikasjonene som kan gi oss en eller annen fordel.

For å gjøre alt dette selv, trenger du minst grunnleggende kunnskap om Java-språket, som Android-applikasjoner er skrevet i, og XML-språket, som brukes overalt i Android - fra å beskrive selve applikasjonen og dens tilgangsrettigheter til lagring av strenger som vil vises på skjermen. Du trenger også muligheten til å bruke spesialisert konsollprogramvare.

Så, hva er en APK-pakke der absolutt all Android-programvare er distribuert?

Applikasjonsdekompilering

I denne artikkelen jobbet vi kun med demontert applikasjonskode, men hvis det gjøres mer alvorlige endringer i store applikasjoner, vil det være mye vanskeligere å forstå smali-koden. Heldigvis kan vi dekompilere dex-koden til Java-kode, som, selv om den ikke er original og ikke kompilert tilbake, er mye lettere å lese og forstå logikken til applikasjonen. For å gjøre dette trenger vi to verktøy:

  • dex2jar er en oversetter av Dalvik bytecode til JVM bytecode, på grunnlag av denne kan vi få kode på Java-språket;
  • jd-gui er en dekompiler i seg selv som lar deg få lesbar Java-kode fra JVM bytecode. Som et alternativ kan du bruke Jad (www.varaneckas.com/jad); Selv om den er ganske gammel, genererer den i noen tilfeller mer lesbar kode enn Jd-gui.

Slik skal de brukes. Først starter vi dex2jar, og spesifiserer banen til apk-pakken som et argument:

% dex2jar.sh mail.apk

Som et resultat vil Java-pakken mail.jar vises i gjeldende katalog, som allerede kan åpnes i jd-gui for å se Java-koden.

Arrangering av APK-pakker og mottak av dem

Plastpose Android-applikasjoner, faktisk er en vanlig ZIP-fil, ingen spesielle verktøy kreves for å se innholdet og pakke det ut. Det er nok å ha en arkiver - 7zip for Windows eller konsoll unzip på Linux. Men det handler om innpakningen. Hva er inni? Generelt har vi følgende struktur inne:

  • META-INF/- inneholder et digitalt sertifikat for applikasjonen, som identifiserer dens skaper, og kontrollsummer for pakkefilene;
  • res/ - ulike ressurser som applikasjonen bruker i sitt arbeid, for eksempel bilder, deklarativ beskrivelse av grensesnittet, samt andre data;
  • AndroidManifest.xml- beskrivelse av søknaden. Dette inkluderer for eksempel en liste over nødvendige tillatelser Android-versjon Og nødvendig tillatelse skjerm;
  • classes.dex- kompilert applikasjonsbytekode for virtuell maskin Dalvik;
  • resources.arsc- også ressurser, men av en annen type - spesielt strenger (ja, denne filen kan brukes til russifisering!).

De oppførte filene og katalogene er, om ikke i alle, så kanskje i de aller fleste APK-er. Imidlertid er det noen flere ikke så vanlige filer/kataloger som er verdt å nevne:

  • eiendeler- analog av ressurser. Hovedforskjellen er at for å få tilgang til en ressurs må du kjenne identifikatoren, men listen over eiendeler kan hentes dynamisk ved å bruke AssetManager.list()-metoden i applikasjonskoden;
  • lib- innfødte Linux-biblioteker skrevet med NDK (Native Development Kit).

Denne katalogen brukes av spillprodusenter som plasserer spillmotoren skrevet i C/C++ der, samt av skapere av høyytelsesapplikasjoner (for eksempel Google Chrome). Vi fant ut enheten. Men hvordan får du tak i pakkefilen til applikasjonen du er interessert i? Siden det ikke er mulig å hente APK-filer fra enheten uten root (de ligger i /data/app-katalogen), og rooting ikke alltid er tilrådelig, er det minst tre måter å få applikasjonsfilen til datamaskinen din:

  • APK Downloader-utvidelse for Chrome;
  • Real APK Leecher app;
  • ulike fil hosting og Varezniks.

Hvilken man skal bruke er en smakssak; vi foretrekker å bruke separate applikasjoner, så vi vil beskrive bruken av Real APK Leecher, spesielt siden den er skrevet i Java og følgelig vil fungere i enten Windows eller Nix.

Etter å ha startet programmet, må du fylle ut tre felt: E-post, Passord og Enhets-ID - og velge et språk. De to første er e-postadressen og passordet til Google-kontoen din som du bruker på enheten. Den tredje er enhetsidentifikatoren, og kan fås ved å skrive inn koden på oppringeren # #8255## og deretter finne enhets-ID-linjen. Når du fyller ut trenger du kun å angi ID uten android-prefikset.

Etter utfylling og lagring dukker ofte meldingen "Feil under tilkobling til server" opp. Det har ingenting med Google Play å gjøre, så ignorer det gjerne og se etter pakker som interesserer deg.

Se og endre

La oss si at du fant en pakke som interesserer deg, lastet den ned, pakket den ut... og da du prøvde å se en XML-fil, ble du overrasket over å oppdage at filen ikke var tekst. Hvordan dekompilere det og hvordan arbeide med pakker generelt? Er det virkelig nødvendig å installere SDK? Nei, det er ikke nødvendig å installere SDK i det hele tatt. Faktisk krever alle trinnene for å trekke ut, endre og pakke APK-pakker følgende verktøy:

  • ZIP-arkiver for utpakking og pakking;
  • smali- Dalvik virtuell maskin bytecode assembler/disassembler (code.google.com/p/smali);
  • aapt- et verktøy for å pakke ressurser (som standard lagres ressurser i binær form for å optimere applikasjonsytelsen). Inkludert i Android SDK, men kan fås separat;
  • underskriver- verktøy for digital signatur modifisert pakke (bit.ly/Rmrv4M).

Du kan bruke alle disse verktøyene separat, men dette er upraktisk, så det er bedre å bruke programvare på høyere nivå bygget på deres grunnlag. Hvis du jobber med Linux eller Mac OS X, finnes det et verktøy som heter apktool. Den lar deg pakke ut ressurser i sin opprinnelige form (inkludert binære XML- og arsc-filer), gjenoppbygge en pakke med endrede ressurser, men den vet ikke hvordan du signerer pakker, så du må kjøre signeringsverktøyet manuelt. Til tross for at verktøyet er skrevet i Java, er installasjonen ganske ikke-standard. Først må du hente selve 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 $ eksport PATH=~/bin:$PATH

Hvis du jobber på Windows, så er det et utmerket verktøy for det kalt Virtuous Ten Studio, som også akkumulerer alle disse verktøyene (inkludert selve apktool), men i stedet for et CLI-grensesnitt gir det brukeren et intuitivt grafisk grensesnitt som du kan bruke utføre operasjoner for utpakking, demontering og dekompilering med noen få klikk. Dette verktøyet er donasjonsvare, det vil si at noen ganger vises vinduer som ber deg om å få en lisens, men til slutt kan dette tolereres. Det er ingen vits i å beskrive det, for du kan forstå grensesnittet på noen få minutter. Men apktool, på grunn av konsollens natur, bør diskuteres mer detaljert.


La oss se på apktool-alternativene. Kort fortalt er det tre grunnleggende kommandoer: d (dekode), b (bygg) og if (installer rammeverk). Hvis alt er klart med de to første kommandoene, hva gjør den tredje, betingede uttalelsen? Den pakker ut det angitte UI-rammeverket, som er nødvendig i tilfeller der du dissekerer en systempakke.

La oss se på de mest interessante alternativene til den første kommandoen:

  • -s- ikke demonter dex-filer;
  • -r- ikke pakke ut ressurser;
  • -b- ikke sett inn feilsøkingsinformasjon til resultatene av demontering av dex-filen;
  • --ramme-bane- bruk det angitte UI-rammeverket i stedet for det som er innebygd i apktool. La oss nå se på et par alternativer for b-kommandoen:
  • -f- tvangsmontering uten å kontrollere endringer;
  • -en- angi stien til aapt (et verktøy for å bygge et APK-arkiv), hvis du av en eller annen grunn vil bruke det fra en annen kilde.

Å bruke apktool er veldig enkelt; for å gjøre dette, spesifiser bare en av kommandoene og banen til APK, for eksempel:

$ apktool d mail.apk

Etter dette vil alle utpakkede og demonterte filer av pakken vises i e-postkatalogen.

Forberedelse. Deaktivere annonsering

Teori er selvfølgelig bra, men hvorfor er det nødvendig hvis vi ikke vet hva vi skal gjøre med den utpakkede pakken? La oss prøve å bruke teorien til vår fordel, nemlig å modifisere noe programvare slik at den ikke viser oss reklame. La det for eksempel være Virtual Torch - en virtuell fakkel. Denne programvaren er ideell for oss, fordi den er fylt til siste plass med irriterende reklame og dessuten er enkel nok til ikke å gå seg vill i jungelen av kode.


Så ved å bruke en av metodene ovenfor, last ned applikasjonen fra markedet. Hvis du bestemmer deg for å bruke Virtuous Ten Studio, åpner du bare APK-filen i applikasjonen og pakker den ut, lager et prosjekt (Fil -> Nytt prosjekt), og velg deretter Importer fil i prosjektets kontekstmeny. Hvis valget ditt falt på apktool, kjør bare en kommando:

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

Etter dette vil et filtre tilsvarende det som er beskrevet i forrige seksjon vises i katalogen com.kauf.particle.virtualtorch, men med en ekstra smali-katalog i stedet for dex-filer og en apktool.yml-fil. Den første inneholder demontert kode for programmets kjørbare dex-fil, den andre inneholder tjenesteinformasjon som er nødvendig for at apktool skal sette sammen pakken tilbake.

Det første stedet vi bør se er selvfølgelig AndroidManifest.xml. Og her møter vi umiddelbart følgende linje:

Det er ikke vanskelig å gjette at det er ansvarlig for å gi applikasjonen tillatelser til å bruke Internett-tilkoblingen. Faktisk, hvis vi bare ønsker å bli kvitt reklame, vil vi mest sannsynlig bare trenge å blokkere applikasjonen fra Internett. La oss prøve å gjøre dette. Vi sletter den angitte linjen og prøver å bygge programvaren ved å bruke apktool:

$ apktool b com.kauf.particle.virtualtorch

Den resulterende APK-filen vil vises i katalogen com.kauf.particle.virtualtorch/build/. Det vil imidlertid ikke være mulig å installere det, siden det ikke er digitalt signert og sjekksummer filer (det er rett og slett ingen META-INF/-katalog i den). Vi må signere pakken ved å bruke apk-signer-verktøyet. Lanserte. Grensesnittet består av to faner - på den første (Key Generator) lager vi nøkler, på den andre (APK Signer) signerer vi. For å opprette vår private nøkkel, fyll ut følgende felt:

  • Målfil- nøkkellager utdatafil; den lagrer vanligvis ett par nøkler;
  • Passord Og Bekrefte- passord for lagringen;
  • Alias- navn på nøkkelen i lageret;
  • Alias ​​passord Og Bekrefte- hemmelig nøkkelpassord;
  • Gyldighet- gyldighetsperiode (i år). Standardverdien er optimal.

De resterende feltene er generelt valgfrie - men minst ett må fylles ut.


ADVARSEL

For å signere en applikasjon med apk-signer, må du installere Android SDK og spesifisere full vei før den i applikasjonsinnstillingene.

All informasjon gis kun for informasjonsformål. Verken redaktørene eller forfatteren er ansvarlige for mulig skade forårsaket av materialet i denne artikkelen.

Nå kan du signere APK-en med denne nøkkelen. På APK Signer-fanen, velg den nylig genererte filen, skriv inn passordet, nøkkelaliaset og passordet, finn deretter APK-filen og klikk dristig på "Sign"-knappen. Hvis alt går bra, blir pakken signert.

INFO

Siden vi signerte pakken med vår egen nøkkel, vil den komme i konflikt med den originale applikasjonen, noe som betyr at når vi prøver å oppdatere programvaren gjennom markedet, får vi en feilmelding.

En digital signatur er bare nødvendig for tredjepartsprogramvare, så hvis du endrer systemapplikasjoner, som installeres ved å kopiere til /system/app/-katalogen, trenger du ikke signere dem.

Etter det laster du ned pakken til smarttelefonen, installer den og start den. Voila, annonsen er borte! I stedet dukket det opp en melding om at vi ikke har Internett eller ikke har de nødvendige tillatelsene. I teorien kan dette være nok, men meldingen ser irriterende ut, og for å være ærlig var vi bare heldige med en dum søknad. Normalt skrevet programvare vil mest sannsynlig avklare legitimasjonen eller se etter en Internett-tilkobling og ellers bare nekte å starte. Hvordan være i dette tilfellet? Rediger selvfølgelig koden.

Vanligvis oppretter applikasjonsforfattere spesielle klasser for å vise annonser og ringemetoder for disse klassene når applikasjonen eller en av dens "aktiviteter" (forenklet sagt applikasjonsskjermer) startes. La oss prøve å finne disse klassene. Vi går til smali-katalogen, deretter com (org inneholder bare det åpne grafiske biblioteket cocos2d), deretter kauf (det er her det er, fordi dette er navnet på utvikleren og all koden hans er der) - og her er den, markedsføringskatalogen. Inni finner vi en haug med filer med smali-utvidelsen. Dette er klasser, og den mest bemerkelsesverdige av dem er Ad.smali-klassen, fra navnet som det er lett å gjette at det er den som viser reklame.

Vi kunne endre logikken i operasjonen, men det ville være mye enklere å ganske enkelt fjerne anrop til noen av metodene fra selve applikasjonen. Derfor forlater vi markedsføringskatalogen og går til den tilstøtende partikkelkatalogen, og deretter til virtualtorch. MainActivity.smali-filen fortjener spesiell oppmerksomhet her. Dette er en standard Android-klasse som er opprettet av Android SDK og installert som inngangspunkt til applikasjonen (analogt med hovedfunksjonen i C). Åpne filen for redigering.

Inne er det smali-kode (lokal montør). Den er ganske forvirrende og vanskelig å lese på grunn av dens natur på lavt nivå, så vi vil ikke studere den, men vil ganske enkelt finne alle referanser til annonseklassen i koden og kommentere dem. Vi legger inn linjen "Annonse" i søket og kommer til linje 25:

Felt privat annonse:Lcom/kauf/marketing/Ad;

Her opprettes et annonsefelt for å lagre et annonseklasseobjekt. Vi kommenterer ved å plassere et ###-tegn foran linjen. Vi fortsetter søket. Linje 423:

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

Det er her objektskapingen skjer. La oss kommentere. Vi fortsetter søket og finner på linjene 433, 435, 466, 468, 738, 740, 800 og 802 oppfordringer til metoder i Ad-klassen. La oss kommentere. Ser ut som det er det. Lagre. Nå må pakken settes sammen igjen og sjekkes for funksjonalitet og tilstedeværelse av reklame. For renheten til eksperimentet returnerer vi linjen fjernet fra AndroidManifest.xml, setter sammen pakken, signerer og installerer.

Marsvinet vårt. Reklame synlig

Oops! Reklamen forsvant bare mens applikasjonen kjørte, men forble i hovedmenyen, som vi ser når vi starter programvaren. Så vent, men inngangspunktet er MainActivity-klassen, og annonsen forsvant mens applikasjonen kjørte, men forble i hovedmenyen, så inngangspunktet er annerledes? For å identifisere det sanne inngangspunktet, åpne AndroidManifest.xml-filen på nytt. Og ja, den inneholder følgende linjer:

De forteller oss (og enda viktigere, androiden) at en aktivitet kalt Start bør lanseres som svar på genereringen av en intent (hendelse) android.intent.action.MAIN fra kategorien android.intent.category.LAUNCHER. Denne hendelsen genereres når du trykker på applikasjonsikonet i startprogrammet, så det bestemmer inngangspunktet, nemlig Start-klassen. Mest sannsynlig skrev programmereren først en applikasjon uten hovedmeny, inngangspunktet som var standard MainActivity-klassen, og la deretter til et nytt vindu (aktivitet) som inneholder menyen og beskrevet i Start-klassen, og gjorde det manuelt til oppføringen punkt.

Åpne Start.smali-filen og se igjen etter linjen "Ad", vi finner i linje 153 og 155 en omtale av FirstAd-klassen. Den ligger også i kildekoden, og etter navnet å dømme er den ansvarlig for å vise annonser på hovedskjermen. La oss se videre, det er opprettelsen av en forekomst av FirstAd-klassen og en hensikt som, i henhold til konteksten, er relatert til denne forekomsten, og deretter etiketten cond_10, den betingede overgangen til denne utføres nøyaktig før du oppretter en forekomst av klassen:

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

Mest sannsynlig beregner programmet på en eller annen måte tilfeldig om reklame skal vises på hovedskjermen, og hvis ikke, hopper det direkte til cond_10. Ok, la oss forenkle oppgaven hennes og erstatte den betingede overgangen med en ubetinget:

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

Det er ikke flere omtaler av FirstAd i koden, så vi lukker filen og setter sammen vår virtuelle lommelykt ved hjelp av apktool. Kopier den til smarttelefonen din, installer den, start den. Voila, all reklame har forsvunnet, noe vi gratulerer oss alle med.

Resultater

Denne artikkelen er bare en kort introduksjon til metodene for å hacke og endre Android-applikasjoner. Mange problemer forble bak kulissene, som å fjerne beskyttelse, analysere skjult kode, oversette og erstatte applikasjonsressurser, samt endre applikasjoner skrevet med bruker Android NDK. Men med grunnleggende kunnskap er det bare et spørsmål om tid å finne ut av alt.




Topp