Gennemgang af værktøjer til at starte og fejlfinde applikationer på Android. Test på en rigtig enhed Android studio-fejlretning på enheden

Sidste opdatering: 03/09/2017

Standardprojektet, der blev oprettet i det forrige emne, indeholder allerede en vis funktionalitet. Sandt nok gør denne funktionalitet næsten ingenting, den viser bare strengen "Hej verden!"

Studio skal have filen activity_main.xml åben som standard, som indeholder applikationens GUI-definition.

Hvis filen åbnes i designertilstand, og applikationsdesignet vises i Android Studio-centeret, skal vi skifte filvisningen til tekst. For at skifte tilstand - fra tekst til grafik og tilbage igen, er der to knapper i bunden, Design og Tekst.

Lad os nu ændre applikationskoden, så den viser strengen "Hej Android" på skærmen. For at gøre dette, lad os ændre koden i filen activity_main.xml, som nu ser sådan ud:

Lad os ændre definitionen af ​​TextView-elementet i denne fil, som er ansvarlig for at vise tekstinformation på skærmen på en mobilenhed. Selve outputteksten er angivet ved hjælp af android:text-attributten. Lad os derfor ændre al koden i filen activity_main.xml som følger:

Efter at have gemt filen, kan vi skifte til den grafiske visning og se, at den grafiske designer automatisk vil opdatere og vise den linje, vi lige har defineret.

Udviklertilstand på telefonen

Vi kan bruge emulatorer eller rigtige enheder til at køre og teste applikationen. Men ideelt set er det bedre at teste på rigtige enheder.

For at bruge en mobil enhed til at teste på en fungerende maskine, skal du installere driveren. Hvis din Google-smartphone er Nexus 5/6/5x/6P eller Google Pixel, skal du installere Google Usb Driver-pakken via SDK Manager for at understøtte den. Hvis enhedsproducenten er en anden leverandør, skal du installere USB-driveren, der er leveret af denne leverandør. Hvis operativsystemet er Windows 10, så kan systemet som regel selv finde driveren gennem opdateringscenteret og installere den.

Som standard er udviklerindstillinger på smartphones skjulte. For at gøre dem tilgængelige, skal du gå til Indstillinger > Om telefonen og tryk syv gange Bygge nummer.

Gå tilbage til den forrige skærm, og der vil du se en tilgængelig mulighed Udviklermuligheder (for udviklere).

Lad os gå videre til punkt For udviklere og aktiver USB-fejlretning:

Start af applikationen

Lad os forbinde en enhed med Android OS (hvis vi tester på en rigtig enhed) og starte projektet ved at klikke på den grønne pil på værktøjslinjen.

Så går byggeriet af projektet i gang. Denne proces kan tage noget tid, hvorefter der vises en dialogboks for at vælge en enhed, der skal startes. Her kan vi vælge en gadget tilsluttet computeren eller en emulator:

Vælg enheden, og klik på knappen OK. Og efter lanceringen vil vi se vores applikation på enhedens skærm.

Målet med dette kapitel er at skrive en minimal applikation til Android. Men vi vil aldrig vide med sikkerhed, om vi var i stand til at skrive noget, der virker uden at prøve at køre det på en rigtig enhed. Det er, hvad vi vil gøre i denne artikel.

Muligheden for at teste på en smartphone leveres af ADB (Android Debug Bridge). I denne artikel sætter vi den op og kører vores applikation på en rigtig smartphone.

Hvad er ADB

Android Debug Bridge (ADB) er et universelt kommandolinjeværktøj, der letter interaktionen mellem udviklingsmiljøet, i vores tilfælde Android Studio, og AVD-emulatorer eller fysiske Android-enheder for at kunne køre og fejlfinde applikationer.

ADB består af en klient, en server, der kører som en baggrundsproces på udviklerens computer, og en dæmon, der kører som en baggrundsproces på hver emulator eller ægte enhedsinstans.

Opsætning af en Android-enhed til at arbejde med ADB

For at bruge ADB med en enhed tilsluttet via USB, skal du aktivere USB-fejlretning i systemindstillingerne på din telefon eller tablet i afsnittet "Udviklerindstillinger" (navnet kan variere). På nogle enheder er denne sektion skjult som standard. Lad os se på trinene i det tilfælde, hvor den nødvendige indstillingssektion ikke er tilgængelig.

  1. Gå til indstillinger, afsnittet "Om enhed"
  2. Find "Build Number", og klik på det 7 gange. Et vindue skulle vise dig, at udviklertilstand er aktiveret.
  3. Afsnittet Udviklerindstillinger skulle nu vises i Indstillinger.
  4. Aktiver indstillingen "USB Debugging".

Nu, når du tilslutter din enhed til din computer, afhængigt af modellen, har du muligvis en ny forbindelsesmulighed.

Opsætning af ADB på Windows

Når du opsætter Windows, skal du først sørge for, at du har installeret Google USB-driver. Gå til SDK Manager i sektionen Ekstra og find Google USB Driver, installer den om nødvendigt.


Nu skal du opdatere driveren. Tilslut din enhed til din computer, gå til Kontrolpanel -> Hardware og lyd -> Enhedshåndtering og find din enhed. Højreklik på din enhed for at åbne kontekstmenuen og vælg "Opdater drivere...". Driveren kan findes i sdk biblioteket i undermappen \(sdk directory)\extras\google\usb_driver.

Hvordan kontrollerer man, om ADB-indstillingerne er korrekte?

For at kontrollere funktionaliteten af ​​ADB skal du tilslutte enheden til computeren, starte en kommandolinje i mappen \(sdk directory)\platform-tools og indtaste kommandoen i den:

adb enheder

En liste som denne skulle dukke op:

Liste over tilsluttede enheder 5cdb2ced enhed

Kørsel af applikationen på en rigtig enhed

Alt er det samme, som når du kører på en emulator. Åbn vores projekt i Android Studio, klik på den grønne trekant, men vælg din enhed i vinduet til valg af enhed, der vises.


Hvis der står, at enheden er offline, skal du tilslutte USB og tillade USB-fejlretning på computeren:

Som et resultat vil vores applikation vises på skærmen på din telefon eller tablet.

Konklusion

Dette afslutter kapitlet. Vi havde succes: Vi var i stand til at konfigurere vores system til at udvikle Android-applikationer og endda køre en af ​​dem på en rigtig enhed.

Hvis noget aktivt ikke fungerer for dig, eller du er forvirret, så skriv venligst i kommentarerne, så hjælper jeg dig med at finde ud af dit problem.

Tidligere skrev jeg,. Du kan løse problemet radikalt, brug ikke en emulator, men test det direkte på en mobilenhed, der kører Android. Jeg har en fremragende HTC, og jeg sætter den op til det. Så for at køre applikationer på en fysisk enhed har du brug for:

  1. Aktiver USB-fejlretning på din telefon. Du kan gøre dette ved at gå til Indstillinger -> Applikationer -> Udvikling og markere boksen "USB Debugging".
  2. Vent på, at driveren er installeret
  3. Afbryd og tilslut din telefon til din computer igen.

For at kontrollere, at telefonen er synlig for computeren, skal du gøre følgende:

Hvis dette er tilfældet for dig, så kan du bruge et særligt program: PdaNet. () Det bruges normalt til at bruge internettet fra en telefon fra en computer, men det er tilfældigt, at det indeholder et stort antal drivere til telefoner. Under installationen blev jeg spurgt efter enhedsmodellen, og så dukkede en smuk rød ballon op med en advarsel om, at driveren ikke var testet, og alt kunne ende galt, men nej, alt var i orden, den var installeret. Derefter kørte jeg kontrollen igen (kommandoen ovenfor), og min telefon dukkede op på listen over enheder.

Hvordan arbejder man fra Eclipse? Faktisk er alt allerede gjort - vi starter bare projektet, og det åbner på telefonen.

Dekompilering og debugging af Android-applikationer

Alexander Antipov

Denne artikel viser dig, hvordan du vedhæfter en debugger til en Android-applikation og gennemgår de metoder, der kaldes, ved hjælp af de oplysninger, der er opnået efter dekompilering af applikationen.


Denne artikel viser dig, hvordan du vedhæfter en debugger til en Android-applikation og gennemgår de metoder, der kaldes, ved hjælp af de oplysninger, der er opnået efter dekompilering af applikationen. Den gode nyhed er, at fejlretning ikke kræver superbrugerrettigheder. De beskrevne teknikker kan være meget nyttige under pentests af mobilapplikationer, da vi kan "penetrere" koden, mens programmet kører, indhente og registrere information, som vi normalt ikke har adgang til. For eksempel kan du opsnappe trafik før kryptering og få nøgler, adgangskoder og enhver anden værdifuld information på farten. Artiklen vil være nyttig for pentestere og mobilapplikationsudviklere, der ønsker at få mere dybdegående viden om mulige angreb på Android-platformen.

Krav til testmiljø:

  • Operativsystem: Windows / Mac OS X / Linux
  • Java (version 1.7 anbefales)
  • IDE (Eclipse, IntelliJ IDEA, Android Studio)
  • Android SDK (https://developer.android.com/sdk/index.html?hl=i)
  • APKTool (https://code.google.com/p/android-apktool/)/APK Studio (http://apkstudio.codeplex.com)
  • Android-enhed/emulator

Følgende konfiguration vil blive brugt i denne artikel: Windows 8, Android Studio og IntelliJ IDEA. Enhed: Nexus 4 med Android version 4.4.4. Jeg anbefaler at tilføje alle hjælpeprogrammer til PATH-miljøvariablen for at gøre adgangen til disse værktøjer nemmere og hurtigere.

Android-applikationspakken (APK), der bruges i denne artikel, kan downloades her: com.netspi.egruber.test.apk .

Enhedsopsætning

Instruktionerne nedenfor hjælper dig med at forberede enheden til eksperimenter.

Aktivering af sektionen Udviklerindstillinger

Til at begynde med skal USB-fejlretning være aktiveret på din Android-enhed (USB-debugging-mulighed), hvilket vil give dig mulighed for at "kommunikere" med enheden ved hjælp af værktøjer fra Android SDK. Før dette skal du dog aktivere afsnittet Udviklerindstillinger. På din enhed skal du gå til sektionen Indstillinger > Om telefon og klikke på Build Number-elementet flere gange, hvorefter der skulle vises en meddelelse om, at sektionen Udviklerindstillinger er aktiveret.

Figur 1: For at aktivere afsnittet Udviklerindstillinger skal du klikke på Byg nummer flere gange

Aktiver USB-fejlretning

For at aktivere fejlfinding via USB-porten skal du gå til Indstillinger > Udviklerindstillinger og markere afkrydsningsfeltet ud for USB-fejlretning.

Figur 2: Aktivering af USB-fejlretningsindstillingen

Tilslutning af enheden og start af ADB

Efter at have tilsluttet enheden til computeren via en USB-port, skulle meddelelsen "USB debugging tilsluttet på enheden" vises. Du bør også tjekke, om du kan oprette forbindelse til din enhed ved hjælp af applikationen Android Debug Bridge (ADB) inkluderet i Android SDK (Android SDK Platform-værktøjer). Indtast følgende kommando ved kommandoprompten:

Enheden skal vises på listen.

Figur 3: Liste over tilsluttede enheder

Hvis enheden ikke vises på listen, er den mest sandsynlige årsag forkert installerede drivere (i Windows). Afhængigt af enheden kan driveren findes enten i Android SDK eller på producentens hjemmeside.

Kontrollerer applikationen for fejlretning

Før du fejlfinder Android-applikationer, skal du først kontrollere, om dette er muligt. Kontrollen kan udføres på flere måder.

Den første måde er at løbe Android-enhedsmonitor, inkluderet i Android SDK (i mappen værktøjer). På Windows hedder filen monitor.bat. Når du åbner Android Device Monitor, vises enheden i afsnittet Enheder.

Figur 4: Android Device Monitor-applikation

Hvis en applikation på enheden kan fejlsøges, vises den applikation også på listen. Jeg oprettede et testprogram, men listen er tom, fordi programmet ikke kan fejlfindes.

Den anden måde at kontrollere, om en applikation er fejlfindbar, er at undersøge AndroidManifest.xml-filen fra applikationspakken (APK, Android-applikationspakke). APK'en er et zip-arkiv, der indeholder alle de nødvendige oplysninger for at køre applikationen på din Android-enhed.

Når en applikation downloades fra Google Play Butik, downloades applikationspakken også. Alle downloadede APK-filer gemmes normalt på enheden i mappen /data/app. Hvis du ikke har superbrugerrettigheder, vil du ikke være i stand til at vise filer fra mappen /data/app. Selvom du kender navnet på APK-filen, kan du kopiere den ved hjælp af værktøjet adb. Indtast følgende kommando for at finde ud af navnet på APK-filen:

Enhedens kommandolinje vises. Indtast derefter følgende kommando:

pm liste pakker -f

En liste over alle pakker på enheden vises.

Figur 5: Liste over pakker på enheden

Ser vi på listen, finder vi en testapplikation.

Figur 6: Oprettet testapplikationspakke (fremhævet med hvidt)

Nu skal du kopiere pakkefilen. Åbn skallen og indtast følgende kommando:

adb pull /data/app/[.apk-fil]

Figur 7: Kopiering af APK-filen fra enheden til systemet

Nu skal du åbne pakkefilen og undersøge indholdet af AndroidManifest.xml. Desværre kan vi ikke bare udpakke arkivet, fordi APK-filen er kodet i binært format. Det værktøj, der oftest bruges til afkodning, er apktool selvom jeg bruger APK Studio, da denne applikation har en venlig grafisk grænseflade. Resten af ​​artiklen vil tale om APK Studio.

I APK Studio skal du klikke på det lille grønne ikon, navngive projektet og angive stien til APK-filen. Angiv derefter let for at gemme projektet.

Figur 8: Oprettelse af et nyt projekt i APK Studio

Når du har åbnet APK'en, skal du vælge filen AndroidManifest.xml og se på indstillingerne for applikationsmærket. Hvis flaget android:debuggable mangler (eller findes, men er indstillet til falsk), kan applikationen ikke fejlfindes.

Figur 9: Indholdet af AndroidManifest.xml-filen

Ændring af filen AndroidManifest.xml

Ved at bruge apktool-værktøjet eller APK Studio kan vi ændre filerne og pakke indholdet tilbage i pakken. Vi vil nu ændre AndroidManifest.xml-filen, så applikationen kan fejlsøges. Tilføj linjen android:debuggable="true" inde i applikationskoden.

Figur 10: Ændring af indholdet af applikationsmærket

Når du har tilføjet flaget, skal du klikke på "hammer"-ikonet og samle pakken igen. Den genopbyggede pakke vil være placeret i build/apk-mappen.

Figur 11: Genmontering af pakke gennemført

Efter genopbygning er pakken signeret og kan geninstalleres på enheden (alle Android-applikationer skal være signeret). De fleste programmer bekræfter ikke det certifikat, der bruges til at signere. Ellers skal du ændre koden, der udfører denne kontrol.

Nu skal du installere den genopbyggede pakke. Først skal du slette det gamle program ved hjælp af følgende kommando:

adb pm afinstaller

Installer derefter den nye pakke:

adb installer [.apk-fil]

Du kan også fjerne og installere pakken med én kommando:

adb install -r [.apk-fil]

Figur 12: Installation af den genopbyggede pakke

Kontroller, at det geninstallerede program starter korrekt på enheden. Hvis alt fungerer, skal du gå tilbage til Android Device Monitor, hvor testapplikationen skal vises.

Figur 13: Den genopbyggede applikation kan nu fejlsøges

Opsætning af udviklingsmiljøet (IDE)

Nu kan du vedhæfte en debugger til den genopbyggede applikation, men først skal du oprette et projekt i udviklingsmiljøet (artiklen bruger IntelliJ IDEA). Lad os skabe et nyt projekt. Indtast et brugerdefineret navn i feltet Programnavn. I feltet Pakkenavn skal du angive et navn, der nøjagtigt matcher mappehierarkiet for den genopbyggede pakke.

Figur 14: Oprettelse af et nyt projekt i IntelliJ IDEA

Typisk vil APK-filnavnet matche mappestrukturen, men hvis du er usikker, så tjek mappehierarkiet i APK Studio ned til den mappe, hvor programfilerne er placeret. I mit tilfælde er navn og mappestruktur nøjagtig den samme (com.netspi.egruber.test).

Figur 15: Test applikationskataloghierarki

Fjern markeringen i "Create Hello World Activity" og afslut oprettelsen af ​​projektet (alle andre muligheder forbliver standard). Det nye projekt skulle se sådan ud:

Figur 16: Hierarki af mapper og filer i det nye projekt

Efter at have oprettet projektet, skal du tilføje kildekoden fra APK-filen, så debuggeren "kender" navnene på symboler, metoder, variabler osv. Den gode nyhed er, at Android-applikationer kan dekompileres næsten uden tab af kvalitet (kildekoden vil være den samme som originalen). Efter dekompilering importeres kildekoden til udviklingsmiljøet (IDE).

Hentning af kilder fra en applikationspakke

Først skal du konvertere APK'en til en jar-fil. Derefter, ved hjælp af en java-decompiler, får vi kildekoden til applikationen. Vi vil lave konverteringen til jar ved hjælp af værktøjet dex2jar. dex2jar har en d2j-dex2jar.bat fil, som bruges til at konvertere APK til jar. Kommandosyntaksen er ret enkel:

d2j-dex2jar.bat [.apk-fil]

Figur 17: Konvertering af APK til jar

Åbn eller træk derefter den resulterende fil ind i JD-GUI (dette er en java-decompiler).

Figur 18: Krukkefilstruktur

Jar-filen skal fremstå som en hierarkisk struktur indeholdende java-filer med læsbar kildekode. Gå til Filer > Gem alle kilder for at pakke alle kilderne i et zip-arkiv.

Figur 19: Gem kildeteksterne til den dekompilerede fil

Når du har gemt kildeteksterne, skal du pakke arkivet ud i en separat mappe.

Figur 20: Udpakket arkiv

Nu skal du importere begge mapper til det tidligere oprettede projekt i IDE. I IntelliJ skal du gå til src-mappen og kopiere indholdet af det udpakkede arkiv der (to mapper).

Figur 21: Begge mapper kopieres til src-mappen

Når vi vender tilbage til Intellij, ser vi det opdaterede projekt.

Figur 22: Kildetekster optrådte i projektet

Hvis vi klikker på et element fra listen, vil vi se kildeteksten. Som du kan se på skærmbilledet nedenfor (kildeteksten til LoginActivity-klassen), er kildekoden sløret ved hjælp af ProGuard.

Figur 23: Sløret kildetekst for LoginActivity-klassen

Tilslutning af en debugger

Nu hvor projektet har kildekode, kan vi begynde at sætte brudpunkter på metoder og variabler. Når pausepunkter er nået, stopper applikationen. Som et eksempel satte jeg et brudpunkt på en metode (lige i den slørede kode), der er ansvarlig for at behandle oplysninger indtastet i et tekstfelt.

Figur 24: Et brudpunkt er indstillet på en sløret metode.

Så snart brudpunktet dukker op, skal du forbinde debuggeren til processen på enheden ved at klikke på skærmikonet i øverste højre hjørne (ikonet kan være anderledes på din IDE).

Figur 25: Tilslutning af debugger til processen

Figur 26: Liste over processer til tilslutning af en debugger

Efter at have valgt processen, vil debuggeren oprette forbindelse til enheden.

Figur 27: Debugger knyttet til en proces, der kører på enheden

Jeg vil indtaste tallet 42 i tekstfeltet (hvis du husker det, er der et brudpunkt på den tilsvarende metode).

Figur 28: Indtast tallet 42 i tekstfeltet

Efter at have trykket på knappen Indtast kode, vil applikationen gå i stykker ved pausepunktet, fordi debuggeren er klar over, hvilken metode der kaldes på enheden. En kompileret Android-applikation indeholder fejlfindingsoplysninger (såsom variabelnavne), der er tilgængelige for enhver Java Debug Wire Protocol (JDWP)-kompatibel debugger. Hvis din applikation har debugging aktiveret, kan en JDWP-kompatibel debugger (de fleste debuggere inkluderet i Java-udviklingsmiljøer falder ind under denne kategori) oprette forbindelse til Android-applikationens virtuelle maskine og derefter læse og udføre fejlfindingskommandoer.

Figur 29: Breakpoint hit

Skærmbilledet nedenfor viser det tal, som vi tidligere har indtastet i tekstfeltet.

Figur 30: Liste over variabler for den aktuelle klasseinstans

Konklusion

Vi kan ikke kun læse data i applikationen, men også indsætte vores egne. Dette kan være nyttigt, hvis vi for eksempel ønsker at afbryde strømmen af ​​kodeudførelse og omgå nogle dele af algoritmen. Ved at bruge en debugger kan vi bedre forstå applikationens logik og analysere, hvad der er utilgængeligt for den gennemsnitlige bruger. For eksempel kan det være meget nyttigt at se de anvendte krypteringsfunktioner og dynamiske nøgler. Derudover er det nogle gange, når debugging, nyttigt at vide, hvordan funktioner interagerer med filsystemet eller databasen for at forstå, hvilken information der er gemt af applikationen. Lignende manipulationer er tilgængelige på enhver Android-enhed uden superbrugerprivilegier.