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:
-
Decomprimere il file apk
$ Unzip test.apk
-
Converti 1classes.dex1 in smali
$ baksmali -x classes.dex -o smaliClasses
-
Ho riconvertito le classi in
classes.dex
(sostituito il vecchioclasses.dex
, infatti non ho aggiunto alcun nuovo codice al file smali . Prima volevo sapere se funziona).$ smali smaliClasses -o classes.dex
-
Comprimi tutti i file in
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
-
Rinomina
test.zip
intest.apk
$ mv test.zip test.apk
Ora credo di dover firmare di nuovo lAPK, correggimi se sbaglio qui.
Modificato
:
-
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
-
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
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:
- 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
- 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:
-
Non è possibile eseguire tutti i passaggi nellordine corretto.
-
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.
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
- Link interrotto. per favore aggiustalo.
- ecco qui: forum.exetools.com/showthread.php?t=16538
- @raypixar: il collegamento non è stato interrotto, solo lento.
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.
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 eseguirezip -r unsigned.apk *
allinterno della directory con tutti i contenuti. Se il problema persiste, prova a pubblicare loutput di logcat