Riconfezionamento di file APK utilizzando baksmali e smali

Sono uno studente interessato alla sicurezza Android. Stavo cercando di modificare un file APK usando baksmali e smali. Tuttavia, non sono in grado di eseguire lapp riconfezionata sul mio cellulare. Quando clicco sullicona dice “Sfortunatamente, il test è stato interrotto” ed esiste. (Anche licona dellapp è stata modificata, ora vedo licona predefinita di Android invece della vecchia vera icona colorata dellapp)

Quale potrebbe essere la ragione? In realtà non ho nemmeno modificato il codice del file apk. Ho appena decompresso lapk per ottenere il file dex, poi lho convertito in smali usando baksmali.jar, e poi di nuovo in dex usando smali.jar. Finalmente zippato e firmato.

Cosa ho fatto in dettaglio:

  1. Decomprimere il file apk

    $ Unzip test.apk 
  2. Converti 1classes.dex1 in smali

    $ baksmali -x classes.dex -o smaliClasses 
  3. Ho riconvertito le classi in classes.dex (sostituito il vecchio classes.dex, infatti non ho aggiunto alcun nuovo codice al file smali . Prima volevo sapere se funziona).

    $ smali smaliClasses -o classes.dex 
  4. Comprimi tutti i file in test.zip

    $ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc 
  5. Rinomina test.zip in test.apk

    $ mv test.zip test.apk 

Ora credo di dover firmare di nuovo lAPK, correggimi se sbaglio qui.

Modificato

:

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

  2. Ho provato a installare il nuovo APK riconfezionato. Utilizzando adb shell. Adb shell ha mostrato che è stato installato con successo. Tuttavia, non sono in grado di eseguire lapp riconfezionata su dispositivi mobili. Lapp si blocca quando ci clicco sopra. Viene visualizzato il messaggio “Purtroppo il test è stato interrotto”.

Perché lapp riconfezionata non funziona? Non capisco cosa mi manca qui?

Modificato :

Ho provato a riconfezionare la stessa app utilizzando apktool. Ho estratto i piccoli file usandolo e riconfezionato. Ma perché il riconfezionamento non funziona con baksmali, smali, zip e signapk. La compressione è il vero problema in questa procedura? Vedo che la dimensione dellapp si riduce drasticamente quando la comprimo e la rinomino in .apk rispetto al file apk originale: |

Commenti

  • Dovresti controllare il tuo logcat per ulteriori informazioni, se possibile, per favore pubblica anche il log del crash.
  • @xDragonZ , Ho modificato il post. Questa volta ho provato a installare utilizzando ” adb install ” e firmato utilizzando signapk.jar. Questa volta lapp è stata installata nel telefono. Tuttavia, quando faccio clic sullapp si arresta in modo anomalo dicendo ” ” Sfortunatamente, lapp si è arrestata “. Una cosa che ho notato è che la dimensione dellapk reimballato è inferiore a quella originale, è il motivo per cui lo strumento zip ha modificato la dimensione? Qualche indizio sul motivo per cui lapp si arresta in modo anomalo? Come ottengo un registro per questo? Grazie mille.
  • forse hai anche bisogno di zipalign del file?
  • Stai deodexing (baksmali -x option) apposta? Sembra che dal momento che stai eseguendo questa opzione, senza fornire un ” bootclasspath ” tu ‘ si otterrà uno strano codice smali che potrebbe non essere in grado di riconvertire in un file dex. Inoltre, rimuovi la cartella META-INF prima di zippare e provare a eseguire zip -r unsigned.apk * allinterno della directory con tutti i contenuti. Se il problema persiste, prova a pubblicare loutput di logcat
  • Quindi su cinque risposte non una sola è accettabile?

Risposta

Uso apktool per questo scopo e un breve paio di script di shell per decompilare e ricompilare APK:

  • 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 

Lutilizzo di apktool ha il vantaggio di poter visualizzare e modificare anche tutte le risorse come file manifest decodificato.

Commenti

  • Questo è lunico metodo che funziona per me. ‘ ne ho provati a dozzine, nessuno ha funzionato. Grazie mille.

Risposta

Dopo aver giocato con smali / baksmali ho funzionato. Penso che tu non abbia utilizzato il flag ricorsivo durante lo zippare . Ciò causava il vuoto della cartella res che causava larresto anomalo. Inoltre eseguo zipalign dopo aver firmato lapk.

Passaggi:

  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. Profitto 🙂

Risposta

Non posso “commentare a causa di reputazione, quindi lo pubblicherò qui.

Dato che il lavoro è fatto correttamente con luso di apktool, mi sembra che qualcosa stia andando storto con il processo di zip.

Dopo riconfezionando lapp, puoi verificare che i contenuti del nuovo APK siano identici (per quanto riguarda i nomi dei file e la struttura) con i contenuti di quello originale?

EDIT: inoltre, dato che il file è un file .dex, non credo che tu abbia bisogno dellopzione -x in baksmali.

EDIT2: Quando si riconfeziona, non è necessario includere la directory META-INF nel file zip. verrà creato quando si firma t he file.

Risposta

Luso dellopzione deodex “-x” non è richiesto poiché “non stai eseguendo baksmali su un odex. Basta eseguire baksmali sul file dex. Puoi anche utilizzare apktool per decomprimere / impacchettare tutto, il che penso sia più semplice.

Answer

  • Perché la dimensione del file è stata ridotta?

    Perché apktool lo ha ottimizzato durante la ricompilazione.

  • Perché si è bloccato?

    Possibili ragioni di arresto anomalo:

    1. Non è possibile eseguire tutti i passaggi nellordine corretto.

    2. Lapplicazione potrebbe avere un Controllo CRC per la dimensione del file.

Strumento Completamente automatizzato con GUI .. È aggiornato con il framework Android recente, quindi nessun errore di decompilazione delle risorse e migliore gestione.

https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0

E questo piccolo documento che include Tuts sullinversione di app Android e tutte le informazioni di base relative alla modifica / gestione di apk.

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

Risposta

Se sei interessato alle app Anroid RE, troverai strumenti migliori da usare regolarmente.

Bene, uno degli strumenti è Android Cracker Kit (che ho sviluppato), ti dà tutto ciò di cui hai bisogno: Android Cracker Kit (ACK):

Commenti

Risposta

Uso APK Editor Pro per modificare APK direttamente dal mio dispositivo Android!

https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro

Commenti

  • Ottimo suggerimento. Lapk generato non si installa correttamente con lo script di (de) compilazione precedente (perché?) Ma è stato sostituito da classes.dex.

Risposta

Passaggio 4. Hai dimenticato di farlo in modo ricorsivo. Non copierà i file in / res quando lo comprimi. Aggiungi lopzione -r.

zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc 

Passaggio 6. Non è necessario firmarlo di nuovo poiché lhai già ricomposto con la directory META-INF nel tuo apk. Le informazioni sulla firma sono allinterno di META-INF.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *