Ik ben een student die geïnteresseerd is in Android-beveiliging. Ik probeerde een APK-bestand te wijzigen met baksmali en smali. Ik kan de opnieuw verpakte app echter niet op mijn mobiel uitvoeren. Wanneer ik op het pictogram klik, staat er “Helaas, de test is gestopt” en bestaat. (Zelfs het pictogram van de app is veranderd, nu zie ik het standaard Android-pictogram in plaats van het oude, echt kleurrijke pictogram van de app)
Wat zou de reden hiervoor kunnen zijn? Eigenlijk heb ik de code van het apk-bestand niet eens gewijzigd. Ik heb gewoon apk uitgepakt om het dex-bestand te krijgen, daarna heb ik het geconverteerd naar smali met baksmali.jar
, en daarna terug naar dex met smali.jar
. Eindelijk gezipt en ondertekend.
Wat ik in detail heb gedaan:
-
Decomprimeer het apk-bestand
$ Unzip test.apk
-
Converteer 1classes.dex1 naar smali
$ baksmali -x classes.dex -o smaliClasses
-
De klassen terug geconverteerd naar
classes.dex
(oudeclasses.dex
vervangen, in feite heb ik geen nieuwe code toegevoegd aan het smali-bestand . Ik wilde eerst weten of dit werkt).$ smali smaliClasses -o classes.dex
-
Zip alle bestanden naar
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
-
Hernoem
test.zip
naartest.apk
$ mv test.zip test.apk
Nu denk ik dat ik de APK opnieuw moet ondertekenen, corrigeer me als ik het mis heb hier.
Bewerkt
:
-
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
-
Ik heb geprobeerd de nieuwe herverpakte APK te installeren. Adb-shell gebruiken. Adb-shell heeft laten zien dat het met succes is geïnstalleerd. Ik kan de opnieuw verpakte app echter niet op mobiel uitvoeren. De app crasht als ik erop klik. Er staat “Helaas is de test gestopt”.
Waarom wordt de opnieuw verpakte app niet uitgevoerd? Ik begrijp niet wat ik hier mis?
Bewerkt :
Ik heb geprobeerd dezelfde app opnieuw in te pakken met apktool. Ik heb de smali-bestanden eruit gehaald en opnieuw verpakt. Maar waarom ompakken niet werkt met baksmali, smali, zip en signapk. Is zippen het echte probleem in deze procedure? Ik zie dat de grootte van de app drastisch wordt verkleind als ik hem zip en hernoem naar .apk in vergelijking met het originele apk-bestand: |
Opmerkingen
Antwoord
Ik gebruik apktool
voor dit doel, en een kort paar shellscripts voor het decompileren en opnieuw compileren van APKs:
-
decompile-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."
-
compile-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
Het gebruik van apktool
heeft het voordeel dat u ook alle bronnen kunt bekijken en bewerken als het gedecodeerde manifestbestand.
Reacties
- Dit is de enige methode die voor mij werkt. Ik ‘ heb tientallen geprobeerd, geen enkele werkte. Heel erg bedankt.
Antwoord
Nadat ik met smali / baksmali had gespeeld, werkte het. Ik denk dat je “niet de recursieve vlag hebt gebruikt bij het zippen van . Dit zorgde ervoor dat de res-map leeg was, wat de crash veroorzaakte. Ook voer ik zipalign uit na het ondertekenen van de apk.
Stappen:
- Unzip
$ 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 🙂
Antwoord
Ik kan geen commentaar geven vanwege reputatie, dus ik zal het hier posten.
Aangezien de klus correct is uitgevoerd met het gebruik van apktool, lijkt het mij dat er iets mis gaat met het zip-proces.
Na als u de app opnieuw verpakt, kunt u controleren of de inhoud van de nieuwe APK identiek is (wat betreft bestandsnamen en structuur) met de inhoud van de originele?
EDIT: ook, aangezien het bestand is een .dex-bestand, ik denk niet dat je de optie -x nodig hebt in baksmali.
EDIT2: Bij het herverpakken hoef je de META-INF-directory niet in het zip-bestand op te nemen. wordt aangemaakt bij het ondertekenen van t he-bestand.
Antwoord
Het gebruik van de deodex-optie “-x” is niet vereist omdat je “geen baksmali uitvoert op een odex. Voer gewoon baksmali uit op het dex-bestand. Je kunt apktool ook gebruiken om alles uit te pakken / in te pakken, wat volgens mij gemakkelijker is.
Answer
-
Waarom is de bestandsgrootte verkleind?
Omdat
apktool
het heeft geoptimaliseerd tijdens het opnieuw compileren. -
Waarom is het gecrasht?
Mogelijke redenen voor crash:
-
U kunt niet alle stappen in de juiste volgorde uitvoeren.
-
De toepassing heeft mogelijk een CRC-controle voor bestandsgrootte.
-
Tool Volledig geautomatiseerd met GUI .. Het is bijgewerkt met recent Android-framework, dus geen fout bij het decompileren van bronnen en betere afhandeling.
https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0
En dit kleine papier bevat Tuts over het omkeren van Android-apps en alle basisinformatie met betrekking tot het wijzigen / omgaan met apk.
Answer
Als je geïnteresseerd bent in Anroid apps RE, dan zul je betere tools vinden om regelmatig te gebruiken.
Nou, een van de tools is Android Cracker Kit (die ik heb ontwikkeld), het geeft je alles wat je nodig hebt: Android Cracker Kit (ACK):
Reacties
- Verbroken link. repareer het alstublieft.
- alsjeblieft: forum.exetools.com/showthread.php?t=16538
- @raypixar: link was niet verbroken, alleen traag.
Antwoord
Ik gebruik APK Editor Pro om te bewerken APKs rechtstreeks vanaf mijn Android-apparaat!
https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro
Opmerkingen
- Goede tip. De gegenereerde apk wordt niet correct geïnstalleerd met het bovenstaande (de) compilatiescript (waarom?), Maar het vervangen van de classes.dex deed het.
Answer
Stap 4. U bent vergeten het recursief te doen. Het kopieert de bestanden niet in / res als je het zipt. Voeg -r optie toe.
zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc
Stap 6. Je hoeft het niet te ondertekenen opnieuw omdat je het al opnieuw hebt ingepakt met de META-INF-map naar je apk. De ondertekeningsinformatie bevindt zich in META-INF.
baksmali -x option
) met opzet? Het lijkt erop dat aangezien u deze optie uitvoert, zonder een ” bootclasspath ” u ‘ krijgt een vreemde kleine code die misschien niet terug kan worden geconverteerd naar een dex-bestand. Verwijder ook gewoon de META-INF-map voordat u gaat zippen en probeerzip -r unsigned.apk *
te doen in de map met alle inhoud. Als dit nog steeds crasht, probeer dan de logcat-uitvoer te posten.