APK-bestand opnieuw inpakken met baksmali en smali

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:

  1. Decomprimeer het apk-bestand

    $ Unzip test.apk 
  2. Converteer 1classes.dex1 naar smali

    $ baksmali -x classes.dex -o smaliClasses 
  3. De klassen terug geconverteerd naar classes.dex (oude classes.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 
  4. Zip alle bestanden naar test.zip

    $ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc 
  5. Hernoem test.zip naar test.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

:

  1. java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk

  2. 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

  • U moet uw logcat controleren voor meer informatie, indien mogelijk ook het crashlogboek plaatsen.
  • @xDragonZ , Ik heb het bericht bewerkt. Deze keer heb ik geprobeerd te installeren met ” adb install ” en ondertekend met signapk.jar. Deze keer is de app op de telefoon geïnstalleerd. Wanneer ik echter op de app klik, crasht het en zegt ” ” Helaas is de app gestopt “. Een ding dat me opviel, is dat de grootte van de opnieuw verpakte apk kleiner is dan de originele, is het de reden dat de zip-tool de grootte heeft? Enig idee waarom de app crasht? Hoe krijg ik hiervoor een logboek? Heel erg bedankt.
  • misschien moet je het bestand ook zipaligneren?
  • Bent u deodexing (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 probeer zip -r unsigned.apk * te doen in de map met alle inhoud. Als dit nog steeds crasht, probeer dan de logcat-uitvoer te posten.
  • Dus van de vijf antwoorden is er geen enkele acceptabel?

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:

  1. Unzip
    $ unzip test.apk
  2. Baksmali
    $ baksmali classes.dex -o smaliClasses
  3. Smali
    $ smali smaliClasses -o classes.dex
  4. Zip -r
    $ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
  5. Jarsign
    $ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
  6. Zipalign
    $ zipalign -v 4 test-patched.apk final-apk.apk
  7. 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:

    1. U kunt niet alle stappen in de juiste volgorde uitvoeren.

    2. 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.

https://www.dropbox.com/s/nkkmp4ait71kjku/Android%20Application%20Reversing%20Via%20Android%20Mobile.pdf?dl=0

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

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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *