J'ai sauvegardé mon Nexus 7 avec adb backup
pour sauvegarder tous les fichiers dans une sauvegarde cryptée. Je vois que vous pouvez restaurer à partir d'une sauvegarde avec adb restore
, mais cela effacerait toutes mes données existantes sur le périphérique.
Comment puis-je extraire les données d'une application à partir de ce fichier de sauvegarde crypté?
Réponses:
Juste pour la référence des autres, voici quelques informations sur le format de fichier .ab.
Le fichier de sauvegarde Android (* .ab) est un fichier TAR compressé . Il est compressé à l'aide de l' algorithme DEFLATE . En plus de cela, il peut y avoir un cryptage AES utilisé. Ceci est déterminé lors de la création de la sauvegarde. Si vous entrez un mot de passe, la sauvegarde est cryptée, sinon; il n'y a pas de cryptage, il est seulement compressé.
L'en-tête du fichier est un peu différent d'une archive DEFLATE normale. Il contient des informations sur la sauvegarde et se présente comme suit:
La première ligne est la ligne "Magic" . La ligne suivante est la version du format de fichier de sauvegarde Android. La ligne suivante est un booléen (vrai ou faux, 1 ou 0) indiquant si le fichier est compressé. La dernière ligne est le type de cryptage. Cet exemple n'utilise aucun chiffrement. S'il y avait un mot de passe, la ligne se lirait "AES-256". Après c'est le chiffrement de chiffrement. S'il n'y a pas de mot de passe, "l'archive" DEFLATE démarre.
Il est compressé à l'aide de Java Deflater . Du point de vue des développeurs, cela pose des problèmes si vous souhaitez utiliser quelque chose en plus de Java pour l'extraire. Je n'ai pas été capable de trouver quoi que ce soit qui puisse le dégonfler en utilisant le même algorithme, même si tout ce que j'ai trouvé (comme C #) est supposé suivre le "SPEC".
Cela dit, il existe un projet open source sous licence Apache 2.0, écrit par Nikolay Elenkov, qui vous permettra d'extraire le fichier .ab dans un fichier tar.
Usage:
Si vous ne savez pas vraiment comment l'utiliser (ce qui dépasse le cadre de cette réponse), la prochaine version de Droid Explorer v0.8.8.7 ( disponible ici ) vous permettra de faire exactement cela, et plus encore, directement depuis Explorer. Vous pouvez en savoir plus sur les fonctionnalités de mon blog (oui, je sais, plug éhonté. Je le fais quand ça correspond à la question)
la source
Ou avec un one-liner:
la source
.tar.gz
fichier avec laprintf
commande (0x1F 0x8B
est une signature,0x08
est la méthode de compression,0x00
est un indicateur et 4 x0x00
est un horodatage), puis ajoute à cet en-tête le contenu dubackup.ab
fichier à partir du décalage 25d. Un tel flux est un.tar.gz
fichier valide , et latar xfvz
commande le reconnaît comme tel, afin de pouvoir décompresser le flux avec succès.invalid compressed data--format violated
Une autre option consiste à utiliser
bash
,cat
etgunzip
(gzip
).Le processus complet pourrait être le suivant ( avec une sauvegarde non chiffrée ):
sauvegarder les données d'une application (par exemple, " Remplacer le DNS pour KitKat "):
extraire les données compressées
décompresser les données compressées
"untar" le fichier tar
la source
gzip: stdin: invalid compressed data--format violated
. Je suppose que l'extraction a réussi, comme lesdd
rapports22763821+0 records in 22763821+0 records out
.Une autre option consiste à utiliser les règles Perl AdbBackupRoutines à partir de ce thread XDA . Cependant, ils ont quelques exigences: Perl évidemment, plus
libterm-readkey-perl
,libcrypt-cbc-perl
etlibcrypt-pbkdf2-perl
(si vos sauvegardes ne sont pas chiffrées, vous pouvez ignorer la dernière dépendance en commentant simplement la ligne 103 debackupdecrypt.pl
son inclusion - cela a bien fonctionné pour moi).L'utilisation est assez facile:
Le
.tar
fichier résultant peut alors être examiné comme n'importe quelle autre archive. Sa structure est assez intéressante au moins pour un aspect: elle ne reflète pas les chemins réels où les fichiers ont été extraits (par exemple, pas/data/data/com.app.name/databases/whatever.db
, mais à la placeapps/com.app.name/db/whatever.db
) - ce qui indique qu'une application sauvegardée sur un périphérique / ROM peut être restaurée. tout autre périphérique / ROM sans problème, car iladb restore
faut déterminer les véritables chemins lui-même.la source
.ab
) en.tar.gz
archives :)D'après les informations communiquées par d'autres utilisateurs, je sais maintenant que le fichier de sauvegarde est simplement un flux préfixé Deflated (GZip). Ce programme simple, basé sur ces informations, peut le décompresser pour vous:
J'ai écrit ceci parce que je n'avais aucun des outils Unix mentionnés ci-dessus, et c'était plus facile que d'installer Cygwin ou d'autres outils.
Avantages :
Inconvénients :
Pour en faire un outil de ligne de commande, créez
unab.bat
avec le contenu:java -cp "%~dp0." unab %*
et le répertoire dansPATH
.la source
Comme la question implicite est également, comment restaurer des données d'applications simples, je voudrais mentionner ce script astucieux, qui divise un fichier full-backup.ab donné en fichiers single-app.ab:
https://sourceforge.net/projects/adb-split/
Il nécessite les fichiers jar: abe.jar et tar-bin-split.jar qui peuvent être trouvés ici:
Cela a fonctionné au moins pour mon test.
la source