Tråd lukket 
Tråd bedømmelse:
  • 0 Stemmer - 0 Gennemsnit
  • 1
  • 2
  • 3
  • 4
  • 5
Android Decompiling/Reversing
11-07-2014, 18:38 (Denne besked var sidst ændret: 29-07-2014, 20:00 af MalcolmXI.)
#1
Android Decompiling/Reversing
Introduktion til Android Hacking



I denne korte introduktion til Android hacking kigger vi på den basale opsætning til at få lidt mere styr på hvordan vi decompiler Android applikationer,
samt hvordan vi igennem en proxy kan opfange oplysninger om, hvad data applikationen sender videre til dennes tilknyttede backend server.




Krav

Android SDK + Eclipse ADT (Eclipse + Android Development Tool(kit) er kun hvis du ønsker at køre en emulator i stedet for en fysisk enhed,
samt hvis du ønsker at dykke lidt længere ned i Android programmering samt patching/cracking)
http://developer.android.com/sdk/index.html

Java JDK & JRE (JDK er den vigtige her, men JRE er brugbar til visse opgaver)
http://www.oracle.com/technetwork/java/j...index.html

Charles Proxy (Kan være hvilket som helst proxy tool du har erfaring med)
http://www.charlesproxy.com/

APKTool (Skal bruges til at decompile + recompile (Smali - Baksmali) dine APK filer)
https://mega.co.nz/#!10UHnAxC!zLg6ucEf43...YVOkd9rHy0

SignAPK (Eller jarsigner - Skal bruges til at signe APK filerne, så de kan installeres på Android styresystemet.
Langt de fleste enheder vil ikke installere applikationer Uden denne hersens underskift)
https://mega.co.nz/#!ZklzhYhZ!g0ZcCd1epr...At1nTWyJ7g

Dex2Jar (Konverterer .DEX filen der er pakket ind i .APK filen til .JAR.
https://mega.co.nz/#!Jh0AkayZ!hzmJx-gRpf...MylPdap-zA

Jd_Gui (Giver dig en pæn brugerflade til at læse .JAR filerne fra Dex2Jar)
http://jd.benow.ca/




Så Hvad Er En APK-Fil?
En APK er sådan set bare et pakkeformat ligesom RAR og ZIP. Du kan endda omdøbe din .APK til .ZIP og herved åbne og udpakke indholdet.
APK-formatet er bare hvad Google har valgt at kalde deres applikationers filtype, sådan at Android styresystemet kan genkende det.

Det er disse filer du downloader og installerer, når du henter en app i Google Play eller andre tredjeparts app butikker.
Hvis du har en Rooted Android enhed, kan disse filer kopieres som "backups" og smides over på computeren via ADB, Email, Dropbox osv.

Desuden kan du bruge online downloaders såsom http://download.freeapk.ru/en eller http://apkleecher.com/ til at hente filerne ned til nærmere undersøgelser.
Pas dog på med det, da mange af disse downloaders først lige smider spyware eller reklamer ind før gør dit download-link klar.




Mappestruktur
Lad os for en god ordens skyld lave en mappe på skrivebordet der hedder Android
Inde i den mappe udpakker vi følgende filer til deres egne mapper:
Desktop/Android/APKTool
Desktop/Android/SignAPK
Desktop/Android/Dex2Jar
Desktop/Android/Jd_Gui.exe
(Ingen mappe, så bare smid i den i Android mappens rod)




Opsætning af Emulatoren
For at gøre det så let som muligt bruger vi Eclipse til åbne AVD (Android Virtual Device Manager).
Sørg for at Android SDK er installeret, samt at Eclipse er udpakket (Det er lige meget hvor).
1) Åbn Eclipse > Window > Preferences > Android og tjek om 'SDK location' passer til hvor du installerede/udpakkede Android SDK og tryk OK.

2) Gå til Window > Android SDK Manager Og installer alle de pakker den selv foreslår (Samt tjek at du har mindst én af de nyeste platforme - Android 4.3 osv - installeret - Dette kræver til tider Administrator rettigheder)
[Billede: A42QCoU.png]

3) Gå til Window > Android Virtual Device Manager > Tryk på 'Create' og udfyld indstillingerne.
Disse indstillinger er ikke så vigtige lige nu, og kan hele tiden ændres. Har selv mange forskellige, men her er et eksempel:
Det kan være en fordel at hente Google API's i SDK Manager'en, da flere applikationer ellers vil fejle installationen grundet en 'manglende delt pakke'.


Tryk OK > Og start så emulatoren.

!! Der kan opstå tilfælde hvor vores ADT plugin ikke er installeret korrekt, i disse tilfælde gør følgende:
Gå til Help > Install New Software >
Tryk på Add >
Giv den et navn (ADT Plugin) >
Angiv en URL til plugin-filerne > https://dl-ssl.google.com/android/eclipse/
Og installer så Android Development Tools. Dette kan igen til tider kræve administrator rettigheder.



Installation af Applikationer til Emulatoren
Sørg for, at du har emulatoren åben og kørende.
Åbn CMD/Kommandovinduet og CD til mappen mappen hvor du installerede Android SD/platform-tools.

C:\Windows\System32> cd C:\sdk\platform-tools
ELLER gå til Android SDK mappen, Hold Shift-knappen nede og højreklik på platform-tools > "Åbn kommandovindue her".

I denne mappe gemmer adb.exe sig, og det er dette lille fikse program vi vil bruge til at installere applikationer og køre aktiviteter/services.

Som et eksempel vil jeg bruge Verisure's fjernstyrrings app til tyverisikring/overvægning.
Hvis vi går til https://play.google.com og søger efter denne applikation.
( https://play.google.com/store/apps/details?id=com.sdi.mobile.android.verisure )
kan vi se i adressebaren, at pakkenavnet er: 'com.sdi.mobile.android.verisure'
Her kan vi så gå videre til http://download.freeapk.ru og skrive pakkenavnet/adressen og downloade .APK-filen hurtigt og uden problemer, i stedet for at hente den ned på vores enhed, installere, tage backup og overføre filen til vores computer.
Gem .apk-filen Android mappen.

For at installere denne app skriver vi blot
Citer:adb install <stien til .apk-filen>
(Du kan skrive adb install og herefter bare trække filen ind i kommandovinduet for automatisk at udfylde stien til filen.
Dette bliver således til:

Citer:C:\sdk\platform-tools>adb install C:\Users\MXI\Desktop\Android\verisure.apk
1112 KB/s (7109188 bytes in 6.240s)
pkg: /data/local/tmp/bas.apk
Success

Nu er applikationen så installeret på emulatoren, og kan findes inde i Apps menuen.


!! I tilfælde af at adb ikke kan finde din emulator enhed kan det til tider hjælpe at forwarde:
Citer:'C:\sdk\platform-tools>adb -d forward tcp:5601 tcp:5601'
!! Prøv herefter at skrive
Citer:'C:\sdk\platform-tools>adb devices'
for at se om den har registreret din enhed.


Opsætning af Charles Proxy
Installér Charles Proxy (Dette er kun en trial, så den låser op nogle sekunder engang imellem, og kan kun køre i 30 minutter før det lukker ned. Kan dog åbnes igen med det samme)
[Billede: D8PD7X8.png]

Gå til Proxy > Proxy Settings og tjek portnummeret (Højst sansynligt 8888)
Under fanen Proxies skal du lige tjekke om der er flueben i 'Enable transparent HTTP proxying'.
Under fanen SSL skal du lige tjekke om der er flueben i 'Enable SSL proxying'.
Hvis den her kræver en opsætning under 'locations', så tryk add og OK med tomme værdier.

Find din netværks-IP (Ikke din eksterne IP, men din interne IP routeren bruger til at finde dig på netværket)

Dette kan gøres på flere forskellige måder, men den letteste er IMO at skrive ipconfig i kommandovinduet, og kigge under IPv4:

Citer:C:\Windows\System32>ipconfig

[Billede: VhnPy83.png]

Lad os vende tilbage til Android emulatoren for at opsætte Charles.

Først hopper vi lige ind i Androids browser nede i højre hjørne (Blå planet-tingy).
[Billede: lb7fni8.png]

Gå til http://charlesproxy.com/charles.crt > Giv certifikatet et navn og tryk OK for at installere det. (Dette skal bruges til at opsnappe SSL trafik)
[Billede: DgOAld9.png]

Der er forskelle i brugerfladen på forskellige Android versioner, men i min (4.4.2) er det således:
Gå til Settings (Tryk på Menu knappen, eller find den inde i Apps menuen)
Under Wireless & Networks tryk på More...
Tryk på Mobile Networks > Access Point Names
Tryk på den APN der allerede er i brug (T-Mobile US hos mig)
Tryk på Proxy, og indsæt den IP vi fandt før (192.168.1.105)
Tryk på Port og indsæt porten fra Charles (8888)
Disse indstillinger vil muligvis kræve et kodeord (Dette kodeord/PIN vil også blive krævet til at logge ind næste gang du starter emulatoren, så ingen grund til at gå i panik hvis den lige pludselig kræver Pinkode næste gang)
I øverst højre hjørne - Udfra 'Edit access point' er der 3 vertikale firkanter, tryk på disse og vælg 'Save'
[Billede: Xe2wG77.png]

Nu vil netværksaktiviteten fra din Android emulator automatisk blive kørt igennem Charles - Det samme vil din browseraktivitet i Windows dog også - For at undgå dette kan du trykke på Proxy > Og fjerne fluebenet i 'Windows Proxy'.



Decompile Android Applikationer

Ved Hjælp af APKTool

Åbn et kommandovindue i APKTool mappen (cd C:/... eller højreklik > Åbn ko..) og skriv følgende:

apktool d(står for decompile) <apkfilen> <mappenavn på de decompilede smali filer>

Altså noget i stil med dette:

Citer:C:\Users\MXI\Desktop\Android\>apktool d C:\Users\MXI\Desktop\android\verisure.apk verisuredecom
I: Baksmaling...
I: Loading resource table.
I: Loaded.
I: Loading resource table from
I: Loaded.
I: Decoding file-resources...
I: Decoding values*/* XMLs...
I: Done.
I: Copying assets and libs...

Nu har vi så de decompilede .smali filer i 'verisuredecom' mappen, som kan ændres/pacthes/crackes og recompiles.
At patche diverse dele af koden er ikke noget jeg synes vi skal begive os ud i, da dette kun er en simpel introduktion
(Og smali er pænt svært at forstå hvis man bare lige hopper ud i det - det er simpelthen alt for let at ødelægge det bare ved at fjerne en enkelt funktion/variabel, og glemme at starten af funktionen så smali er klar over der er den satan mindre)

Lad os i stedet tage et kig på 'AndroidManifest.xml' filen som er i roden af 'verisuredecom' mappen. Denne fil er det berygtede manifest, der indeholder oplysninger om f. eks. pakkenavn, egenskaber, version, aktiviteter, services, tilladelser, broadcast receivers, intents osv.
Manifestet giver næsten sig selv, og efter 10 minutters nærstudering + google vil det meste give mening. Hvad vi er interesserede i her, er hvilke services, intents og aktiviteter(activities) der er angivede.
I dette eksempel er der ikke nogle services eller intents der ser ud til at kunne hjælpe os, men der er nogle spændende aktiviteter. Den aktivitet mine øjne først sprænger på er denne:
Citer:<activity android:name=".DeveloperActivity" />
. Uha. Der er altid en mulighed for, at classes/aktiviteter med navne som dev/developer/programmer/coder kan indeholde noget spændende.
DeveloperActivity.smali er placeret i ..\verisuredecom\smali\com\sdi\mobile\android\verisure - Men igen er smali altså for viderekomne, og passer dårligt ind i en intro.

Lad os istedet prøve noget andet. Vi kan bruge adb shell's am kommando(activity mamager) til at starte aktiviteter

Lad os prøve at åbne det kommandovindue vi brugte til at installere applikationen med (Android SDK/platform-tools)
I dette kommandovindue skriver vi først adb shell

Citer:C:\sdk\platform-tools>adb shell
root@generic:/ #

Herefter skriver vi am start <pakkenavn>/.<aktivitet>
Citer:root@generic:/ # am start com.sdi.mobile.android.verisure/.DeveloperActivity


[Billede: yN2NpSp.png]

Og boom. Vi har started en aktivitet direkte fra kommandovinduet/konsollen. Dette kan bruges til forskellige ting, f. eks. gemte menuer og aktiviteter der glemmer at tjekke om brugeren er logget ind, og herved lækker information der kun burde være forebeholdt autoriserede brugere.

OBS! For at komme tilbage fra vores shell kan vi trykke CTRL+C
!! Hvis du her får en fejlmeddelse i stil med følgende:
!!error: protocol fault (no status)
!!Så skriv >adb kill-server
!!efterfulgt af >adb start-server




Ved Hjælp af Dex2Jar

Åbn et kommandovindue i dex2jar mappen (cd C:/... eller højreklik > Åbn ko..) og skriv følgende:

Citer:C:\Users\MXI\Desktop\Android\>d2j-dex2jar C:\Users\MXI\Desktop\android\verisure.apk

Dette vil decompile Androids .DEX dalvik byte code til Java, og være noget lettere at forstå. verisure-dex2jar.jar filen kan nu åbnes i jd-gui.exe.
Du kan dog ikke ændre i koden og gemme det, men i stedet bruge koden til at få oplysninger om applikationens indhold, samt mulige hulder i programmeringen.

Efter en lille gennemgang af den decompilede kode finder vi igen den spændende klasse med navnet DeveloperActivity, som ovenikøbet indeholder følgende hardcoded credentials:
Citer:
dd.a(this, "[b]mm-test1@verisure.com", "asdf1234");[/b]

Skulle vi prøve at se om de virker? Sørg for Ikke at køre Charles når du forsøger dette.

[Billede: zAhAd3E.png]

Sørme jo. Der er ikke meget at komme efter her, men det er da en vej ind for at få lidt bedre viden om hvordan applikationen virker.

Hvis vi på nuværende tidspunkt har Charles åben vil vi få en fejl, da verisure bruger en form for SSL Pinning, der gør at forbindelsen bliver nægtet hvis ikke SSL certifikatet er ens hos både klienten(android) og serveren(I dette tilfælde Charles, som herefter videregiver trafikken).

[Billede: FpsH220.png]


Igen ville det være lidt overkill at begynde at fjerne dette tjek eller bytte deres http klient ud med vores egen. Men måske engang i fremtiden. ;)

( Hvis det alligevel skulle have interesse er der her to gode artikler om emnet: http://www.mcafee.com/us/resources/white...dation.pdf
http://www.exploit-db.com/wp-content/the.../33430.pdf )


Jeg vil dog alligevel lige vise en lille sjov ting jeg fandt i denne applikation, som også vil give anledning til at recompile.

Ved at kigge på klassen \com\sdi\mobile\android\util\http\httpservice.smali, der hjælper med forbindelsen til backend-serveren, finder vi følgende:

Java:
Citer: private static void b(Context paramContext)
{
b = new a(new ByteArrayInputStream(a(paramContext.getResources().openRawResource(2131099649))), "mysecret");
d = c(paramContext);
}


Smali:

Kode:
new-instance v1, Ljava/io/ByteArrayInputStream;

    invoke-direct {v1, v0}, Ljava/io/ByteArrayInputStream;-><init>([B)V

    .line 74
    new-instance v0, Lcom/sdi/mobile/android/util/http/a;

    const-string v2, "mysecret"

    invoke-direct {v0, v1, v2}, Lcom/sdi/mobile/android/util/http/a;-><init>(Ljava/io/InputStream;Ljava/lang/String;)V

    sput-object v0, Lcom/sdi/mobile/android/util/http/HttpService;->b:Lcom/sdi/mobile/android/util/http/a;

Vi har altså her at gøre med en string der bruges i samarbejde med en ressource(RAW) der smides ind i en inputstream. Hmm..
Lad os tage et kig på vores ressourcer (Den blev loaded fra RAW). Under \verisuredecom\res\raw finder vi sørme en fil med navnet mykeystore.bks, som er en filtype der bruges til at importere certificater fra BouncyCastle.
Kan det virkelig passe de bare har hardcoded deres key/password? altså....

Vi skal altså bruge BouncyCastle til at optette et certifikat i stil med det vi fandt i raw mappen.
http://www.bouncycastle.org/ - Et velkendt krypterings-library.
Jeg har her valgt at bruge 'bcprov-jdk15on-146.jar' til denne opgave.

Til dette skal vi bruge 'keytool', som befinder sig i JDK's Bin mappe:
Citer:'C:\Program Files\Java\jdk1.7.0_51\bin'
Åbn en konsol i denne mappe, og indtast følgende for at lave en ny BouncyCastle .bks keystore fil:

Citer:keytool -importcert -v -trustcacerts -file <certifikatet> -alias sslshit -keystore <keystore-filen der skal eksporteres til> -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath <BouncyCastle's Jar library> -storetype BKS -storepass <Kodeord>

Kode:
C:\Program Files\Java\jdk1.7.0_51\bin>keytool -importcert -v -trustcacerts -fil
"C:\Users\MXI\Desktop\apk\charles.crt" -alias sslshit -keystore "C:\Users\MXI\Desktop\apk\verisuredecom\res\raw\mykeystore.bks" -provider org.bouncycastle.j
e.provider.BouncyCastleProvider -providerpath "C:\MXI\MXI\Desktop\apk\bcprov
jdk15on-146.jar" -storetype BKS -storepass mysecret
Owner: C=NZ, ST=Auckland, L=Auckland, O=XK72 Ltd, OU=http://charlesproxy.com/ss
, CN=Charles Proxy SSL Proxying
Issuer: C=NZ, ST=Auckland, L=Auckland, O=XK72 Ltd, OU=http://charlesproxy.com/s
l, CN=Charles Proxy SSL Proxying
Serial number: 1
Valid from: Sun Dec 31 13:00:00 CET 1899 until: Fri Sep 24 05:19:05 CEST 2038
Certificate fingerprints:
         MD5:  D5:E8:27:14:9B:A1:5E:AC:85:02:B5:93:93:6D:9A:83
         SHA1: 18:9B:6E:28:D1:63:5F:3A:83:25:E1:E0:02:18:0D:BA:2C:02:C2:41
         SHA256: C6:A5:94:B2:53:0F:EF:2E:AE:85:1B:91:62:CD:CD:42:EB:B1:BE:A5:E2
6B:A3:1F:81:6C:03:22:40:33:30:9E
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: 2.16.840.1.113730.1.13 Criticality=false
0000: 13 68 53 53 4C 20 50 72   6F 78 79 69 6E 67 20 69  .hSSL Proxying i
0010: 73 20 65 6E 61 62 6C 65   64 20 69 6E 20 43 68 61  s enabled in Cha
0020: 72 6C 65 73 20 50 72 6F   78 79 2E 20 50 6C 65 61  rles Proxy. Plea
0030: 73 65 20 76 69 73 69 74   20 68 74 74 70 3A 2F 2F  se visit http://
0040: 63 68 61 72 6C 65 73 70   72 6F 78 79 2E 63 6F 6D  charlesproxy.com
0050: 2F 73 73 6C 20 66 6F 72   20 6D 6F 72 65 20 69 6E  /ssl for more in
0060: 66 6F 72 6D 61 74 69 6F   6E 2E                    formation.


#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  Key_CertSign
]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: BB 27 F4 CB 2E B6 DB B0   58 10 1B BD 80 3F 38 D2  .'......X....?8.
0010: 08 D7 61 29                                        ..a)
]
]

Trust this certificate? [no]:  yes
Certificate was added to keystore
[Storing C:\Users\MXI\Desktop\apk\verisuredecom\res\raw\mykeystore.bks]


Nu skulle certifikatet altså være gemt i KeyStore filen, og hvis vi nu recompiler vores decompilede smali filer, burde vi ikke få problemer med Charles.



Recompiling Decompiled Smali Filer

Her skal vi igen tilbage til APKTool kommandovinduet / Eller starte en ny, hvis den er lukket ned.
I kommandovinduet skriver vi følgende:
Citer:apktool b(står for build) <mappenavn på de decompilede smali filer> <navnet på den nye apk-fil>

Hvilket ser således ud:

Citer:C:\Users\MXI\Desktop\Android\>apktool b C:\Users\MXI\Desktop\Android\verisuredecom verisurerecompiled.apk

(Her kan vi nøjes med at skrive 'verisuredecom' som mappe, da vi allerede arbejder fra Android mappen.

Citer:C:\Users\MXI\Desktop\apk>apktool b verisuredecom verisurerecompiled.apk
I: Checking whether sources has changed...
I: Smaling...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs...
I: Building apk file...


Det er sådan set alt der skal til for at recompile filerne. Disse skal dog 'signeres/underskrives' før Android styresytemet tillader at de bliver installeret.




"Signering" af Recompiled Applikationer
Denne process er heldigvis også utroligt hurtig.
Ved hjælp af vores trofaste kommandovindue CD'er eller åbner vi op i SignApk mappen, hvor signapk.jar gemmer sig.
SignApk køres ved hjælp af Java, og behøver kun ganske få parametre.
Vi vil her benytte os af de "nøglefiler" der er med i zip-filen, da der ikke er brug for selv at lave nye til dette formål.

Skriv følgende i kommandovinduet, som du har åbnet/ændret sti til SignApk mappen:
Citer:java -jar SignApk.jar <pem nøglefil> <pk8 nøglefil> <apk der skal signeres> <apk efter signering>


Som med mine filer vil være således:
Citer:java -jar signapk.jar testkey.x509.pem testkey.pk8 verisurerecompiled.apk verisuresigned.apk


Efter blot få sekunder er den nye fil signeret, og befinder sig i signapk mappen.



Installering af Modificerede Applikationer
Da vi brugte SignApk erstattede vi nøglen med en ny, så vi kan ikke 'opdatere' vores applikation. Vi er her tvunget til først at afinstallere applikationen, og herefter installere den nye version.
Dette kan gøres i emulatoren inde under Settings > App > Vælg applikationen (Verisure) > Uninstall - Eller - Ved hjælp af vores elskede adb shell med følgende kommando:

Som Doctor Blue så fint lige fik påpeget, så er den letteste og hurtigste måde at afinstallere applikationer på, helt klart ved at benytte adb uninstall
Citer:C:\sdk\platform-tools>adb uninstall com.sdi.mobile.android.verisure


Citer:C:\sdk\platform-tools>adb shell
root@generic:/ # am start -a android.intent.action.DELETE -d package:com.sdi.mob
ile.android.verisure
on.DELETE -d package:com.sdi.mobile.android.verisure <
Starting: Intent { act=android.intent.action.DELETE dat=package:com.sdi.mobile.a
ndroid.verisure }


Herfra er der bare at installere den nye signerede apk, ved hjælp af samme kommando som vi brugte i starten:
Citer:C:\sdk\platform-tools>adb install C:\Users\MXI\Desktop\android\SignApk\verisuresigned.apk



Nu er applikationen så installeret, og hvis vi først åbner Charles og herefter Verisure, kan vi nu se at alt SSL trafikken bliver kørt igennem Charles uden et eneste problem.
Herfra kan vi så se at brugernavn/pasword bliver sendt som Base64, samt vi får diverse oplysninger om hvordan de forskellige anmodninger og svar er strukturerede på serveren.


[Billede: ViuGf96.png]


Charles og andre proxies kan i nogle tilfælde være rigtig godt til at lave SQL injections i f. eks. POST parametre, som de fleste ellers bare hopper over.


Skal nok lige få rettet de værste fejl, og så skal billederne lige prioriteres da boardet er sat til maks 10.

Skal nok også få smidt lidt simpel patching ind engang.
Find alle beskeder fra denne bruger
11-07-2014, 22:54 (Denne besked var sidst ændret: 11-07-2014, 22:56 af Doctor Blue.)
#2
RE: Android Decompiling/Reversing
Som sendt fra himlen! Godt at høre at du har styr på Android de- og rekompilering. Jeg og Ticalie har et problem du måske kan hjælpe med.
Vi er ved at kigge på Mofibo app'en, men jeg kan simpelthen ikke ryste ud af den hvilke stier på API-serveren den kontakter. Jeg har prøvet at køre den igennem Charles, men applikationen bruger SSL. Så aktiverede jeg SSL, men det viser sig at den afviser certifikatet. Jeg hentede Charles' MITM CA og installerede den på min telefon, men certifikatet bliver stadig afvist og applikationen nægter at oprette forbindelse gennem min proxy.
Så prøvede jeg at dekompilere den, for lige at se om det stod åbenlyst nogen steder hvordan man kontakter API'en, og jeg har fået en fin liste over URLs, men jeg tror, at nogle af GET/POST parametrene mangler i koden. Der er i hvert fald mange huller. Når jeg kontakter API'en med det jeg sådan umiddelbart kan finde i koden, får jeg en fejl 400 tilbage (Bad request), og jeg ved ikke lige hvad det kan være der mangler.

Fair nok, så prøvede jeg at se om der var noget jeg bare kunne redigere og kompilere ind i app'en. I res/values/strings.txt ligger der en streng der hedder api_server, som jeg rettede fra https:// til http:// (De bruger en standard class der springer alt HTTPS over hvis URL'en ikke starter med https), men programmet kan ikke rekompileres.
Når jeg dekompilerer med apktool får jeg advarslerne
Kode:
W: Cant find 9patch chunk in file: "drawable-hdpi/np_selection_divider_mofibo.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "drawable-ldpi/np_selection_divider_mofibo.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "drawable-xhdpi/book_cover_overlay.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "drawable-ldpi/np_list_pressed_holo_dark_mofibo.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "drawable-mdpi/np_selection_divider_mofibo.9.png". Renaming it to *.png.

Når jeg kompilerer det igen, brokker den sig over 2 PNG filer der ikke er PNG filer. Jeg konstaterede at det var GIF filer navngivet som PNG filer, så jeg konverterede dem og gemte dem igen. Så kunne jeg rekompilere, men når jeg prøver at installere den får jeg fejlen
Kode:
C:\apktool>adb install com.mofibo.app\dist\com.mofibo.app.apk
5409 KB/s (11078301 bytes in 2.000s)
        pkg: /data/local/tmp/com.mofibo.app.apk
Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

EDIT: Hvorfor alt det bøvl for at afinstallere programmet? Hvad er der galt med adb uninstall?
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
11-07-2014, 23:11 (Denne besked var sidst ændret: 11-07-2014, 23:26 af MalcolmXI.)
#3
RE: Android Decompiling/Reversing
(11-07-2014, 22:54)Doctor Blue Skrev: Når jeg dekompilerer med apktool får jeg advarslerne
Kode:
W: Cant find 9patch chunk in file: "drawable-hdpi/np_selection_divider_mofibo.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "drawable-ldpi/np_selection_divider_mofibo.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "drawable-xhdpi/book_cover_overlay.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "drawable-ldpi/np_list_pressed_holo_dark_mofibo.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "drawable-mdpi/np_selection_divider_mofibo.9.png". Renaming it to *.png.

Har selv haft problemer med beskadigede ressourcer, som desværre ikke altid er helt lette at ordne. Efter du har "dekompileret - hader simpelthen de danske udtryk, men får det lige rettet til", så prøv at omdåbe den originale apk til zip, og hiv hele ressource-mappen 'res'. Prøv så at smide den oven i din dekompilerede 'res' mappe og erstat filerne.
Det er i hvertfald det der har fikset problemet hos mig de fleste gange.

EDIT: Gav det lige et skud. Det hjalp OVERHOVEDET ikke. Tværtimod. Prøver lige noget andet.

(11-07-2014, 22:54)Doctor Blue Skrev: EDIT: Hvorfor alt det bøvl for at afinstallere programmet? Hvad er der galt med adb uninstall?

Har jeg sku heller ingen idé om hvorfor jeg ikke gjorde. Lol.
Må være fordi jeg lige havde skrevet om activity manageren, og derved synes det var smart lige at kalde en intent nu da der ikke var en i selve app'en der var brugbar.. Eller noget. :P
Får det lige rettet.
Find alle beskeder fra denne bruger
12-07-2014, 00:54
#4
RE: Android Decompiling/Reversing
(11-07-2014, 23:11)MalcolmXI Skrev: Har selv haft problemer med beskadigede ressourcer, som desværre ikke altid er helt lette at ordne. Efter du har "dekompileret - hader simpelthen de danske udtryk, men får det lige rettet til", så prøv at omdåbe den originale apk til zip, og hiv hele ressource-mappen 'res'. Prøv så at smide den oven i din dekompilerede 'res' mappe og erstat filerne.
Det er i hvertfald det der har fikset problemet hos mig de fleste gange.

EDIT: Gav det lige et skud. Det hjalp OVERHOVEDET ikke. Tværtimod. Prøver lige noget andet.

Hehe... Jeg har prøvet at kopiere både det ene og det andet det tredje og fjerde sted hen uden held :P

(11-07-2014, 23:11)MalcolmXI Skrev: Har jeg sku heller ingen idé om hvorfor jeg ikke gjorde. Lol.
Må være fordi jeg lige havde skrevet om activity manageren, og derved synes det var smart lige at kalde en intent nu da der ikke var en i selve app'en der var brugbar.. Eller noget. :P
Får det lige rettet.

Tjoh, det er også en fin ting at have med, men jeg tror ikke der er nogen uden forstand på Android applikationer der ville opdage at det var intents og hvad intents er alligevel ^^

Forresten, hvis man bruger Windows 8 eller 8.1 og man har alle sine CLI værktøjer i en mappe på skrivebordet, så er denne knap dejlig at have :)
[Billede: 6iyoaLB.png]
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
12-07-2014, 01:38
#5
RE: Android Decompiling/Reversing
Kører W8 når jeg ikke bruger Debian, så det skal jeg lige have kigget på.

Har fået den til at dekompilere uden fejl ved at erstatte de korrupte 9Patch billedefiler direkte i apk'en.
Desværre vil den stadig ikke rekompilere. Har prøvet alt lige fra ældste til nyeste apktool og aapt, til administratorrettigheder på hele lortet, har prøvet med Debian, har pulled framework-res.apk direkte fra emulatoren, har ændret diverse værdier, har defineret id'erne i ids.xml, har udskiftet det ene og det andet - Uden Held.

Som jeg forstår det, er der noget riv ragende galt med public.xml, men kan simpelthen ikke forstå hvad. Den ser jo ud som den skal, og de id'er den selv definerer er også dem der bliver kaldt i applikationen. Bah!
Find alle beskeder fra denne bruger
12-07-2014, 08:05 (Denne besked var sidst ændret: 12-07-2014, 08:07 af Doctor Blue.)
#6
RE: Android Decompiling/Reversing
(12-07-2014, 07:05)calvin Skrev: Jeg installerede Charles cert i deres bks store i sin tid (password står i plaintext i source), da jeg lavede den her:
https://shellsec.pw/showthread.php?tid=1913

Ved ikke om det har ændret sig meget siden da, det er ved at være et år siden jeg lavede det oprindeligt.

Og jeg plejer at pushe apk's når jeg tester med adb install -r lol.apk - Den installer eller replacer hvis app'et allerede er der.

Edit:
Det ser ud til at de bare bruger det her certifikat nu "com.mofibo.app\assets\mofibo2014.crt". Du kan muligvis bare skifte det ud med charles.crt.

Jeg kopierede det ind, signerede pakken og nu kan jeg sørme sniffe løs på den. Men den siger at mine login-oplysninger er forkerte nu.
Det viser sig at den sender oplysningerne ved at sende et JSON object i POST body'en, ikke en querystring.
*facepalm*

EDIT: Typo i passwordet -.- Det virker, tak Calvin! :)
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
12-07-2014, 08:27
#7
RE: Android Decompiling/Reversing
(12-07-2014, 08:23)calvin Skrev: Det var så lidt :) Mit script virker stadigvæk ser det ud til, jeg havde regnet med at de ville ændre det, eller i hvert fald sætte noget DRM på deres epubs :D

Hvad arbejder i på?

Jeg ville egentlig bare lave et script så man kunne hente og læse bøgerne på computeren, evt. kombinere det med det script jeg lavede før.
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
12-07-2014, 08:35
#8
RE: Android Decompiling/Reversing
(12-07-2014, 08:31)calvin Skrev: Men gør det script jeg har lavet ikke det, den henter komplette epubs fra deres server? Det eneste der mangler er at navngive .epub filen tror jeg, ellers kan du bruge det til at hente complette ebøger. Det kan selvfølgelig være at det bare er for udfordringen, det er altid sjovt at rode med Android imo :)

Jo, det er nok nærmest det samme. Det var mest for udfordringens skyld :)
Jeg synes også det er skægt at reverse Android-apps og da Ticalie spurgte om Mofibo så jeg lige en lejlighed til at sætte mig ind i hvordan man rekompilerer :P
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
12-07-2014, 08:54
#9
RE: Android Decompiling/Reversing
(12-07-2014, 08:43)calvin Skrev: Hvis du mangler noget, så er det her et helt nyt selskab, det er bare lydbøger i stedet. Jeg har ikke selv tid lige pt, men det kunne måske være fun:
http://www.storytel.dk

Der er 14 dage gratis prøve.

Min far lytter til lydbøger konstant, så det kunne man da godt. Det vil jeg lige undersøge når jeg får tid i næste uge :)
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
12-07-2014, 10:33
#10
RE: Android Decompiling/Reversing
calvin:
Har du haft held med at dekompilere og rekompilere?

Kunne godt tilføje certifikatskiftet til tråden. Synes dog det ville være bedre hvis man kunne gå lidt i dybden med det.
Trials er som regel let nok at forlænge, eller patche helt væk, men så længe jeg ikke kan rekompilere er det ikke noget ved at ændre i koden.
Baseret på dit script kunne det dog også godt se ud til, at det tjek bliver lavet server-side.
Find alle beskeder fra denne bruger
« Ældre | Nyere »
Tråd lukket 




User(s) browsing this thread: 1 Gæst(er)