Ich habe mein Nexus 7 mit adb backup
gesichert, um alle Dateien in einem verschlüsselten Backup zu sichern. Ich sehe, dass Sie von einem Backup mit wiederherstellen können adb restore
, aber das würde alle meine vorhandenen Daten auf dem Gerät löschen.
Wie genau würde ich die Daten einer App aus dieser verschlüsselten Sicherungsdatei extrahieren?
Antworten:
Hier finden Sie Hintergrundinformationen zum .ab-Dateiformat.
Die Android-Sicherungsdatei (* .ab) ist eine komprimierte TAR- Datei. Es wird mit dem DEFLATE- Algorithmus komprimiert . Darüber hinaus kann eine AES-Verschlüsselung verwendet werden. Dies wird beim Erstellen der Sicherung festgelegt. Wenn Sie ein Kennwort eingeben, wird die Sicherung verschlüsselt. Es gibt keine Verschlüsselung, es wird nur komprimiert.
Der HEADER der Datei unterscheidet sich ein wenig von einem normalen DEFLATE-Archiv. Es enthält Informationen zur Sicherung und sieht folgendermaßen aus:
Die erste Zeile ist die "Magic" -Zeile . Die nächste Zeile ist die Version des Android Backup-Dateiformats. Die nächste Zeile ist ein Boolescher Wert (true oder false, 1 oder 0), der angibt, ob die Datei komprimiert ist. Die letzte Zeile gibt die Art der Verschlüsselung an. In diesem Beispiel wird keine Verschlüsselung verwendet. Wenn es ein Passwort gäbe, würde die Zeile "AES-256" lauten. Danach folgt die Verschlüsselung. Wenn kein Passwort vorhanden ist, startet das DEFLATE "Archiv".
Es wird mit dem Java Deflater komprimiert . Was aus Entwicklersicht zu Problemen führt, wenn Sie etwas anderes als Java zum Extrahieren verwenden möchten. Ich habe mit dem gleichen Algorithmus nichts gefunden, das die Luft entleeren könnte, obwohl alles, was ich gefunden habe (zum Beispiel C #), dem "SPEC" folgen soll.
Vor diesem Hintergrund gibt es ein Open-Source-Projekt unter der Apache 2.0-Lizenz von Nikolay Elenkov , mit dem Sie die .ab-Datei in eine tar-Datei extrahieren können.
Verwendungszweck:
Wenn Sie sich nicht sicher sind, wie Sie das wirklich verwenden sollen (was über den Rahmen dieser Antwort hinausgeht), können Sie mit der nächsten Version von Droid Explorer v0.8.8.7 ( hier verfügbar ) genau dies und mehr direkt aus dem Explorer heraus tun. Sie können mehr über die Funktionen in meinem Blog lesen (ja, ich weiß, schamloser Stecker. Ich mache das, wenn es die Frage passt)
quelle
Oder mit einem Einzeiler:
quelle
.tar.gz
Datei mit demprintf
Befehl (0x1F 0x8B
ist eine Signatur,0x08
ist die Komprimierungsmethode,0x00
sind Flags und 4 x0x00
ist ein Zeitstempel). Anschließend wird der Inhalt derbackup.ab
Datei beginnend mit Offset 25d an diesen Kopf angehängt . Ein solcher Stream ist eine gültige.tar.gz
Datei, und dertar xfvz
Befehl erkennt ihn als solche, sodass er den Stream erfolgreich dekomprimieren kann.invalid compressed data--format violated
Eine weitere Option ist die Verwendung
bash
,cat
undgunzip
(gzip
).Der vollständige Vorgang kann wie folgt aussehen ( mit einer unverschlüsselten Sicherung ):
Sichern Sie die Daten einer App (zum Beispiel " DNS für KitKat überschreiben "):
extrahieren Sie die komprimierten Daten
Dekomprimieren Sie die komprimierten Daten
"entpacken" Sie die Teer-Datei
quelle
gzip: stdin: invalid compressed data--format violated
. Ich gehe davon aus, die Extraktion erfolgreich ist, wiedd
berichtet22763821+0 records in 22763821+0 records out
.Eine andere Option ist die Verwendung der Perl AdbBackupRoutines aus diesem XDA-Thread . Sie haben jedoch ein paar Anforderungen: Perl natürlich plus
libterm-readkey-perl
,libcrypt-cbc-perl
undlibcrypt-pbkdf2-perl
(wenn Ihre Backups unverschlüsselt sind, können Sie die letzte Abhängigkeit überspringen, indem Sie einfach Zeile 103 auskommentieren,backupdecrypt.pl
wo sie enthalten ist - hat für mich gut funktioniert).Die Bedienung ist ganz einfach:
Die resultierende
.tar
Datei kann dann wie jeder andere Tarball untersucht werden. Die Struktur ist zumindest in einer Hinsicht sehr interessant: Sie spiegelt nicht die tatsächlichen Pfade wider, von denen die Dateien stammen (z. B. nicht/data/data/com.app.name/databases/whatever.db
, sondernapps/com.app.name/db/whatever.db
) - was darauf hinweist, dass eine App, die auf einem Gerät / ROM gesichert wurde, möglicherweise wiederhergestellt wird jedes andere Gerät / ROM ohne Probleme, wieadb restore
die tatsächlichen Pfade selbst herausfinden müssen.quelle
.ab
) in.tar.gz
Archive konvertiert :)Aufgrund der Informationen von anderen weiß ich jetzt, dass die Sicherungsdatei nur ein vorangestellter GZip-Stream (Deflated Stream) ist. Auf der Grundlage dieser Informationen kann dieses einfache Programm sie für Sie entpacken:
Ich habe dies geschrieben, weil ich keines der oben genannten Unix-Tools besitze und es einfacher war, Cygwin oder andere Tools zu installieren.
Vorteile :
Nachteile :
Um es zu einem Befehlszeilentool zu machen, erstellen Sie es
unab.bat
mit Inhalt:java -cp "%~dp0." unab %*
und dem Verzeichnis zuPATH
.quelle
Da die implizite Frage auch ist, wie einzelne Anwendungsdaten wiederhergestellt werden können, möchte ich dieses raffinierte Skript erwähnen, das eine gegebene full-backup.ab in single-app.ab-Dateien aufteilt:
https://sourceforge.net/projects/adb-split/
Es werden die JAR-Dateien benötigt: abe.jar und tar-bin-split.jar, die hier zu finden sind:
Zumindest für meinen Testfall hat es funktioniert.
quelle