Ich bin ein Student, der sich für Android-Sicherheit interessiert. Ich habe versucht, eine APK-Datei mit baksmali und smali zu ändern. Ich kann die neu gepackte App jedoch nicht auf meinem Handy ausführen. Wenn ich auf das Symbol klicke, heißt es „Leider wurde der Test gestoppt“ und existiert. (Sogar das Symbol der App wurde geändert. Jetzt wird das Standard-Android-Symbol anstelle des alten, wirklich farbenfrohen Symbols der App angezeigt.)
Was könnte der Grund dafür sein? Eigentlich habe ich nicht einmal den Code der apk-Datei geändert. Ich habe gerade apk entpackt, um die Dex-Datei zu erhalten, dann habe ich sie mit baksmali.jar
in smali konvertiert und dann mit smali.jar
. Endlich komprimiert und signiert.
Was ich im Detail getan habe:
-
Dekomprimiere die apk-Datei
$ Unzip test.apk
-
Konvertieren Sie 1classes.dex1 in smali
$ baksmali -x classes.dex -o smaliClasses
-
Konvertierte die Klassen zurück in
classes.dex
(ersetzt altesclasses.dex
, tatsächlich habe ich der smali-Datei keinen neuen Code hinzugefügt Ich wollte wissen, ob dies zuerst funktioniert.$ smali smaliClasses -o classes.dex
-
Zippen Sie alle Dateien nach
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
-
Benennen Sie
test.zip
in$ mv test.zip test.apk
Jetzt glaube ich, dass ich die APK erneut unterschreiben muss. Bitte korrigieren Sie mich, wenn ich falsch liege hier.
Bearbeitet
:
-
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
-
Ich habe versucht, die neue neu gepackte APK zu installieren. Verwenden der ADB-Shell. Adb Shell zeigte, dass es erfolgreich installiert wurde. Ich kann die neu gepackte App jedoch nicht auf Mobilgeräten ausführen. Die App stürzt ab, wenn ich darauf klicke. Es heißt „Leider wurde der Test gestoppt“.
Warum wird die neu gepackte App nicht ausgeführt? Ich verstehe nicht, was mir hier fehlt?
Bearbeitet :
Ich habe versucht, dieselbe App mit apktool neu zu verpacken. Ich habe die Smali-Dateien damit extrahiert und neu verpackt. Aber warum funktioniert das Umpacken nicht mit Baksmali, Smali, Zip und Signapk? Ist das Zippen das eigentliche Problem bei diesem Verfahren? Ich sehe, dass die Größe der App drastisch reduziert wird, wenn ich sie komprimiere und in .apk umbenenne, verglichen mit der ursprünglichen apk-Datei: |
Kommentare
- Sie sollten Ihren Logcat auf weitere Informationen überprüfen. Wenn möglich, veröffentlichen Sie auch das Absturzprotokoll.
- @xDragonZ Ich habe den Beitrag bearbeitet. Dieses Mal habe ich versucht, mit “ zu installieren und “ zu installieren und mit signapk.jar zu signieren. Diesmal wurde die App im Telefon installiert. Wenn ich jedoch auf die App klicke, stürzt sie ab und sagt “ “ Leider hat die App „. Eine Sache, die mir aufgefallen ist, ist, dass die Größe des umgepackten apk geringer ist als die des Originals. Ist dies der Grund für diese Änderung des Reißverschlusswerkzeugs? Gibt es einen Hinweis darauf, warum die App abstürzt? Wie bekomme ich ein Protokoll dafür? Vielen Dank.
- Vielleicht müssen Sie die Datei auch zipalignieren?
- Deodexieren Sie absichtlich (
baksmali -x option
)? Es scheint, dass Sie, da Sie diese Option ausführen, ohne einen “ Bootclasspath “ Sie ‚ wird einen seltsamen Smali-Code erhalten, der möglicherweise nicht wieder in eine Dex-Datei konvertiert werden kann. Entfernen Sie außerdem einfach den META-INF-Ordner, bevor Sie ihn komprimieren und versuchen,zip -r unsigned.apk *
im Verzeichnis mit dem gesamten Inhalt auszuführen. Wenn dies immer noch abstürzt, versuchen Sie, die Logcat-Ausgabe zu veröffentlichen. - Von fünf Antworten ist also keine einzige akzeptabel?
Antwort
Zu diesem Zweck verwende ich apktool
und ein kurzes Paar Shell-Skripte zum Dekompilieren und Neukompilieren von 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
Die Verwendung von apktool
bietet den Vorteil, dass auch alle Ressourcen angezeigt und bearbeitet werden können als dekodierte Manifestdatei.
Kommentare
- Dies ist die einzige Methode, die für mich funktioniert. Ich ‚ habe Dutzende ausprobiert, keine hat funktioniert. Vielen Dank.
Antwort
Nachdem ich mit smali / baksmali gespielt hatte, funktionierte es. Ich denke, Sie haben das rekursive Flag beim Zippen von nicht verwendet. Dies führte dazu, dass der Ordner res leer war, was den Absturz verursachte. Außerdem starte ich zipalign nach dem Signieren der apk.
Schritte:
- Entpacken
$ 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 🙂
Antwort
Ich kann wegen nicht kommentieren Ruf, also werde ich es hier posten.
Da die Arbeit mit der Verwendung von apktool korrekt erledigt wird, scheint mir, dass beim Zip-Prozess etwas schief geht.
Nachher Können Sie beim erneuten Packen der App überprüfen, ob der Inhalt der neuen APK mit dem Inhalt der ursprünglichen APK identisch ist (was Dateinamen und -struktur betrifft)?
BEARBEITEN: Auch, da die Datei ist Eine .dex-Datei, ich glaube nicht, dass Sie die Option -x in baksmali benötigen.
EDIT2: Beim erneuten Packen müssen Sie das META-INF-Verzeichnis nicht in die Zip-Datei aufnehmen wird beim Signieren von t erstellt Die Datei.
Antwort
Die Verwendung der Deodex-Option „-x“ ist nicht erforderlich, da Sie kein Baksmali auf einem ausführen Odex. Führen Sie einfach baksmali in der Dex-Datei aus. Sie können auch apktool verwenden, um alles zu entpacken / zu packen, was meiner Meinung nach einfacher ist.
Antwort
-
Warum wurde die Dateigröße reduziert?
Weil
apktool
sie beim Neukompilieren optimiert hat. -
Warum ist sie abgestürzt?
Mögliche Gründe für den Absturz:
-
Sie können nicht alle Schritte in der richtigen Reihenfolge ausführen.
-
Die Anwendung verfügt möglicherweise über eine CRC-Prüfung auf Dateigröße.
-
Tool Vollautomatisch mit GUI. Es wurde mit dem neuesten Android-Framework aktualisiert, sodass kein Fehler beim Dekompilieren von Ressourcen auftritt Bessere Handhabung.
https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0
Und dieses kleine Papier, das Enthält Tipps zum Umkehren von Android-Apps und alle grundlegenden Informationen zum Ändern / Behandeln von apk.
Antwort
Wenn Sie an Anroid Apps RE interessiert sind, werden Sie bessere Tools finden, die Sie regelmäßig verwenden können.
Nun, Eines der Tools ist das Android Cracker Kit (das ich entwickelt habe). Es bietet Ihnen alles, was Sie brauchen: Android Cracker Kit (ACK):
Kommentare
- Unterbrochener Link. Bitte beheben Sie das Problem.
- Hier gehts: forum.exetools.com/showthread.php?t=16538
- @raypixar: Link wurde nicht unterbrochen, nur langsam.
Antwort
Ich verwende APK Editor Pro zum Bearbeiten APKs direkt von meinem Android-Gerät!
https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro
Kommentare
- Großartiger Tipp. Die generierte apk wird mit dem obigen (de) Kompilierungsskript nicht korrekt installiert (warum?), Aber das Ersetzen der classes.dex hat es getan.
Antwort
Schritt 4. Sie haben vergessen, dies rekursiv zu tun. Beim Kopieren werden die Dateien nicht in / res kopiert. Fügen Sie die Option -r hinzu.
zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc
Schritt 6. Sie müssen sie nicht signieren wieder, da du es mit dem META-INF-Verzeichnis bereits wieder in deine apk gepackt hast. Die Signaturinformationen befinden sich in META-INF.