149 votes

Comment extraire les données d'une application à partir d'une sauvegarde complète créée par "adb backup" ?

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 l'appareil.

Comment pourrais-je extraire les données d'une application de ce fichier de sauvegarde crypté?

0 votes

Je crois que aucune des réponses sans utiliser Java ne fonctionnera sur les téléphones chiffrés. Voir ma réponse ci-dessous résumant l'utilisation de l'application de nelenkov (github.com/nelenkov/android-backup-extractor). Malheureusement, les scripts perl Adebar d'Izzy ab2tar ne fonctionneront pas sur les fichiers de sauvegarde chiffrés. Similaire: android.stackexchange.com/questions/23357/…

1 votes

Corrélation- dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf - mentionné stackoverflow.com/questions/18533567/…

4voto

Milner Points 533

Une autre option consiste à utiliser les routines Perl AdbBackupRoutines de ce fil XDA. Ils ont cependant quelques exigences : Perl bien sûr, plus libterm-readkey-perl, libcrypt-cbc-perl, et libcrypt-pbkdf2-perl (si vos sauvegardes ne sont pas chiffrées, vous pouvez ignorer la dernière dépendance en commentant simplement la ligne 103 de backupdecrypt.pl où elle est incluse -- cela a bien fonctionné pour moi).

L'utilisation est assez simple :

./backupdecrypt.pl [options]  

Le fichier .tar résultant peut ensuite être examiné comme n'importe quel autre fichier tar. Sa structure est assez intéressante, du moins dans un aspect : elle ne reflète pas les chemins réels d'où les fichiers ont été pris (par exemple, pas /data/data/com.app.name/databases/whatever.db, mais plutôt apps/com.app.name/db/whatever.db) -- ce qui indique qu'une application sauvegardée sur un appareil/ROM peut éventuellement être restaurée sur n'importe quel autre appareil/ROM sans problème, car adb restore doit lui-même trouver les vrais chemins.

0 votes

Il existe un autre outil (un peu mieux maintenu) qui fait cela : github.com/nelenkov/android-backup-extractor

0 votes

Merci, @lid! J'ai également inclus un petit script shell (presque d'une seule ligne) avec mon outil Adebar (Android DEvice Backup And Report), qui convertit les sauvegardes ADB (.ab) en Archives .tar.gz :)

4voto

Nicholas Hardy Points 21

Pour ajouter une autre option, voici une version de manipulation de l'en-tête en Windows PowerShell :

$file_in = (Get-Location).Path + "\backup.ab"
$file_temp = (Get-Location).Path + "\temp.tgz"
[int32[]]$header = 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00
$bytes = [System.IO.File]::ReadAllBytes($file_in)
$bytesout = $header + $bytes[24..($bytes.Length - 1)]
[System.IO.File]::WriteAllBytes($file_temp, $bytesout)

Vous pouvez essayer d'utiliser l'exécutable tar dans les versions actuelles de Windows 10, 17063 ou ultérieures, pour extraire le fichier, cependant il semble qu'il ne gère actuellement pas le fichier mal formé produit dans ce processus aussi bien que la version linux. YMMV :

tar -xvzf $file_temp

Pour obtenir le contenu complet, vous pouvez extraire manuellement avec 7zip ou similaire. Ou vous pourriez combiner avec l'une des réponses de l'extraction .tar native en Powershell.

0 votes

7zip et d'autres outils d'archivage disposent d'outils en ligne de commande

1 votes

J'aime cette technique, mais je reçois une erreur OOM (Out Of Memory) quand j'essaie de l'utiliser. C'est la ligne avant la dernière dans le script PS qui semble consommer toute la RAM disponible.

1voto

alchemy Points 111

Just to add to other answers, I finally got it using l'application de nelenkov and les instructions d'ici. I was trying to avoid the extra 800mb disk space for Java. La plupart des téléphones passent désormais par défaut au chiffrement, et je pense que l'application de nelenkov est la seule qui fonctionne bien avec le chiffrement.

Voici un lien direct vers la version compilée de l'application de nelenkov. Veuillez vérifier s'il s'agit de la dernière version, puis suivez les instructions du lien ci-dessus. Il contient plus d'informations sur Helium et la division d'un fichier ab en fichiers d'applications individuels. Et aussi une façon de modifier les applications qui ne sont pas configurées pour utiliser la sauvegarde adb sans root. Substituez abe-all.jar si vous utilisez ce fichier de version.

  1. Convertissez la sauvegarde adb d'origine au format tar :

java -jar abe.jar unpack nexus7.ab nexus7.tar

  1. Extraire le contenu de l'archive tar. Cela doit être fait sur un système de fichiers où les autorisations des fichiers à l'intérieur du tar sont préservées, par exemple en utilisant linux, mac ou bsd. Jusqu'à deux dossiers peuvent apparaître, apps et shared :

tar -xvf nexus7.tar

Maintenant, vous devriez avoir de nouveaux dossiers à inspecter. Maintenant vous pouvez voir quelles applications sont sauvegardées et lesquelles ne le sont pas.

Au fait, la réponse de Izzy est bonne, mais son script nécessite plusieurs modules perl à installer, le troisième dont je n'ai pas pu trouver facilement. Son application est complète, mais trouvez adb2tar dans Adebar-master/tools/. Encore une fois, cela ne fonctionne pas avec les fichiers ab chiffrés.

0 votes

Je n'étais pas au courant que ab2tar nécessite des modules Perl. Ce qu'il fait essentiellement est décrit dans la réponse de rmil ;) Mais peut-être que c'était le cas dans une ancienne version...

0voto

rmil Points 1

Cela a fonctionné pour moi dans un environnement Linux :

dd if=backup.adb skip=1 bs=24 | zlib-flate -uncompress | cat > somewhere.tar
tar xvf somewhere.tar

0 votes

Dupliquer ci-dessus comme par exemple android.stackexchange.com/a/73052/340401 ?

0 votes

@Cadoiz non, vérifiez attentivement les commandes. C'est plutôt ce que ab2tar d'Adebar fait (voir la réponse d'alchimie).

2 votes

Quel est l'intérêt de passer stdin à travers cat? Supprimez complètement l'étape | cat dans le pipeline.

0voto

Chuma Umenze Points 101

Vous pouvez télécharger la dernière version binaire de l'Android Backup Processor. Une fois téléchargé, extrayez le fichier zip et exécutez :

java -jar abp.jar unpack

Commandes
Utilisation :
    info:       java -jar abp.jar [-debug] [-useenv=yourenv] info  [password]
    unpack:     java -jar abp.jar [-debug] [-useenv=yourenv] unpack   [password]
    pack:       java -jar abp.jar [-debug] [-useenv=yourenv] pack   [password]
    pack-kk:    java -jar abp.jar [-debug] [-useenv=yourenv] pack-kk   [password]

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X