Jeg er studerende interesseret i Android Security. Jeg prøvede at ændre en APK-fil ved hjælp af baksmali og smali. Imidlertid er jeg ikke i stand til at køre den ompakkede app på min mobil. Når jeg klikker på ikonet står der “Desværre er testen stoppet” og findes. (Selv ikonet for appen blev ændret, nu ser jeg standard android-ikonet i stedet for det gamle rigtige farverige ikon for appen)
Hvad kan være årsagen til dette? Faktisk har jeg ikke engang ændret koden for apk-filen. Jeg pakket bare apk ud for at få dex-fil, så konverterede jeg den til smali ved hjælp af baksmali.jar
og derefter tilbage til dex ved hjælp af smali.jar
. Endelig lynlås og signeret.
Hvad jeg har gjort i detaljer:
-
Dekomprimer apk-filen
$ Unzip test.apk
-
Konverter 1classes.dex1 til smali
$ baksmali -x classes.dex -o smaliClasses
-
Konverterede klasserne tilbage til
classes.dex
(erstattede gamleclasses.dex
, faktisk tilføjede jeg ingen ny kode til smali-filen . Jeg ville gerne vide, om dette fungerer først).$ smali smaliClasses -o classes.dex
-
Zip alle filerne til
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
-
Omdøb
test.zip
tiltest.apk
$ mv test.zip test.apk
Nu tror jeg, at jeg er nødt til at underskrive APKen igen, bedes du rette mig, hvis jeg tager fejl her.
Redigeret
:
-
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
-
Jeg forsøgte at installere den nye ompakket APK. Brug af ADB-skal. Adb-shell viste, at den var installeret. Jeg er dog ikke i stand til at køre den ompakkede app i mobil. Appen går ned, når jeg klikker på den. Der står “Desværre er testen stoppet”.
Hvorfor kører ikke den genpakkede app? Jeg forstår ikke, hvad jeg mangler her?
Redigeret :
Jeg forsøgte at pakke om den samme app igen ved hjælp af apktool. Jeg udpakkede smali-filerne ved hjælp af den og pakket om. Men hvorfor genpakning ikke fungerer med baksmali, smali, zip og signapk. Er zip det virkelige problem i denne procedure? Jeg ser, at størrelsen på appen reduceres drastisk, når jeg zip den og omdøber den til .apk sammenlignet med den originale apk-fil: |
Kommentarer
Svar
Jeg bruger apktool
til dette formål og et kort lille par shell-scripts til dekompilering og rekompilering af APKer:
-
dekompilering-apk
#!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <file.apk>" exit -1 fi fn=${1%.apk} target_apk=$fn.apk apktool d -f "$target_apk" -o smali echo "Done."
-
kompilering-apk
#!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <original.apk>" exit -1 fi fn=${1%.apk} rm -f $fn.unaligned.apk $fn.smali.apk rm -rf smali/build apktool b -f smali/ -o $fn.unaligned.apk jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android $fn.unaligned.apk androiddebugkey zipalign -v 4 $fn.unaligned.apk $fn.smali.apk rm -rf smali/build
Brug af apktool
har fordelen ved også at kunne se og redigere alle ressourcerne som den dekodede manifestfil.
Kommentarer
- Dette er den eneste metode, der fungerer for mig. Jeg ‘ har prøvet snesevis, ingen fungerede. Mange tak.
Svar
Efter at have spillet med smali / baksmali fik jeg det til at fungere. Jeg tror, du ikke brugte rekursivt flag, da du zippede . Dette medførte, at res-mappen var tom, hvilket forårsagede nedbruddet. Jeg kører også zipalign efter at have underskrevet apk.
Trin:
- Pakk ud $ unzip test.apk
- Baksmali
$ baksmali classes.dex -o smaliClasses
- Smali
$ smali smaliClasses -o classes.dex
- Zip -r
$ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
- Jarsign
$ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
- Zipalign
$ zipalign -v 4 test-patched.apk final-apk.apk
- Profit 🙂
Svar
Jeg kan ikke kommentere pga. omdømme, så jeg vil sende det her.
Da jobbet udføres korrekt ved brug af apktool, ser det ud til, at der går noget galt med zip-processen.
Efter ompakning af appen, kan du kontrollere, at indholdet af den nye APK er identisk (for så vidt angår filnavne og struktur) med indholdet af den originale?
EDIT: også, da filen er en .dex-fil, jeg tror ikke, at du har brug for -x-indstillingen i baksmali.
EDIT2: Når du ompakker, behøver du ikke at medtage META-INF-biblioteket i zip-filen. oprettes ved underskrivelse af t han fil.
Svar
Brug af deodex-indstillingen “-x” er ikke påkrævet, da du ikke udfører baksmali på en odex. Kør bare baksmali på dex-filen. Du kan også bruge apktool til at pakke ud / pakke alt, hvilket jeg synes er lettere.
Svar
-
Hvorfor filstørrelsen reduceres?
Fordi
apktool
optimerede den under kompilering igen. -
Hvorfor styrtede den ned?
Mulige årsager til nedbrud:
-
Du kan ikke udføre alle trin i den rette rækkefølge.
-
Applikationen kan have en CRC kontrollerer filstørrelse.
-
Værktøj Fuldt automatiseret med GUI .. Det opdateres med nyere Android-ramme, så ingen ressource-dekompileringsfejl og bedre håndtering.
https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0
Og dette lille papir, som inkluderer tuts for at vende android-apps og alle grundlæggende oplysninger om ændring / håndtering af apk.
Svar
Hvis du er interesseret i Anroid apps RE, skal du finde bedre værktøjer til regelmæssig brug.
Nå, et af værktøjerne er Android Cracker Kit (som jeg udviklede), det giver dig alt hvad du har brug for: Android Cracker Kit (ACK):
Kommentarer
- Brudt link. rette det.
- her går du: forum.exetools.com/showthread.php?t=16538
- @raypixar: linket blev ikke brudt, bare langsomt.
Svar
Jeg bruger APK Editor Pro til at redigere APK-filer lige fra min Android-enhed!
https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro
Kommentarer
- Fantastisk tip. Den genererede apk installeres ikke korrekt med ovenstående (de) kompilerings script (hvorfor?), Men det erstattede klasserne. Dex gjorde det.
Svar
Trin 4. Du har glemt at gøre det rekursivt. Det kopierer ikke filerne i / res, når du zip det. Tilføj -r mulighed.
zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc
Trin 6. Du behøver ikke underskrive det igen da du allerede har pakket det med META-INF-biblioteket til din apk allerede. Signeringsoplysninger findes i META-INF.
baksmali -x option
) med vilje? Det ser ud til, at da du udfører denne mulighed uden at give en ” bootclasspath “, skal du ‘ vil få nogle ulige smali-koder, der muligvis ikke kan konverteres tilbage til en dex-fil. Fjern også bare META-INF-mappen inden du zipper og prøver at gørezip -r unsigned.apk *
inde i biblioteket med alt indholdet. Hvis dette stadig går ned, skal du prøve at sende logcat-output