Y a-t-il un moyen de regarder à l'intérieur et de modifier un fichier créé un adb de sauvegarde? -- backup domaine et adb domain android en relation problème

Is there a way to look inside and modify an adb backup created file?



43
vote

problème

français

J'ai créé une sauvegarde de mon Galaxy Nexus avec adb backup . Le fichier résultant est nommé backup.db et c'est crypté d'une manière ou d'une autre.

Je voulais restaurer la sauvegarde, mais cela s'arrête quand il s'agit de restaurer com.android.providers.contacts . J'ai utilisé adb logcat pour savoir ce qui se passe et découvert que com.android.acore acticules pendant le processus de restauration.

J'aimerais accéder aux données dans la sauvegarde et supprimer la base de données Contacts pour restaurer tout ce que mon téléphone. Y a-t-il d'autres moyens de restaurer les données de la sauvegarde?

langue Anglaise

I created a backup of my Galaxy Nexus with adb backup. The resulting file is named backup.db and it's somehow encrypted.

I wanted to restore the backup, but it stops when it comes to restoring com.android.providers.contacts. I used adb logcat to find out what's going on and found out that com.android.acore crashes during the restore process.

I'd like to gain access to the data in the backup and remove the contacts database to restore everything back to my phone. Are there any other ways restoring the data from the backup?

     
 
 

Liste de réponses

57
 
vote

J'ai commencé à travailler sur ceci. Je pose mes résultats jusqu'à présent ici comme une réponse "Wiki communautaire" pour deux raisons: premièrement, si quelqu'un d'autre veut adhérer, il y a un endroit pour parler; Deuxièmement, si je me suis éloigné de ce projet, il y aura des indications pour que quelqu'un d'autre commence à travailler.

La logique de sauvegarde sur l'hôte est entièrement contenu dans https: // github.com/android/platform_system_core/blob/master/Adb/commandline.cpp , dans la fonction nommée backup . La fonction est très simple: il valide les options de la ligne de commande, envoie la commande surtout as-is sur le démon ADB sur le téléphone et écrit la sortie du téléphone dans le fichier. Il n'y a même pas de vérification erronée: si, par exemple, vous refusez la sauvegarde sur le téléphone, adb écrit simplement un fichier vide.

Au téléphone, le début de la logique de sauvegarde dans service_to_fd() https://github.com/android/platform_system_core/blob/master/Adb/services.cpp . La fonction identifie que la commande de l'hôte est "backup" , et transmet la commande à unparsed /system/bin/bu , qui est un script shell trivial lancement ss0 comme la principale classe d'un nouveau processus d'application Android. Qui appelle ss1 pour obtenir le service de sauvegarde en tant que ss2 , et appelle ss3 , en lui passant le descripteur de fichier encore utilisé (très indirectement) connecté au fichier sur l'hôte.

La commande passe à ss5 en même fichier, ligne 4004 à partir du temps d'écriture)

adb uninstall <package.name> 1 , Nous avons enfin commencer à générer il y a sortie, entre ligne 4151 et Ligne 4330 .

Premier, adb uninstall <package.name> 2 écrit un en-tête, qui consiste en 4 ou 9 lignes ASCII:

  1. adb uninstall <package.name> 3
  2. Le format de sauvegarde Version: Actuellement adb uninstall <package.name> 4
  3. soit 99887776625 si la sauvegarde est non compressée ou adb uninstall <package.name> 6 s'il est
  4. La méthode de cryptage: actuellement adb uninstall <package.name> 7 ou adb uninstall <package.name> 8
  5. (si crypté), le "Sel de mot de passe de l'utilisateur" codé dans Hex, toutes les capuchons
  6. (si crypté), le "sel de contrôle principal de la clé de contrôle principal" codé dans HEX, toutes les capuchons
  7. (si crypté), le "nombre de rondes PBKDF2 utilisées" en tant que nombre décimal: actuellement adb uninstall <package.name> 9
  8. (si crypté), le "IV f La clé utilisateur "codée dans HEX, toutes les capuchons
  9. (si crypté), le "Master IV + BLOB BLOB, chiffré par la clé utilisateur" codé dans HEX, tous les CAPS

Les données de sauvegarde réelles suivent, soit comme (selon la compression et le cryptage) adb uninstall com.google.android.apps.maps 0 , 99887776631 , adb uninstall com.google.android.apps.maps 2 ou adb uninstall com.google.android.apps.maps 3 .

TODO : Écrivez le chemin de code qui génère la sortie tar - Vous pouvez simplement utiliser le goudron aussi longtemps que les entrées sont dans le bon ordre (voir ci-dessous).

Format d'archive de goudron

Les données de l'application sont stockées sous l'application / répertoire, à commencer par un fichier _Manifest, l'APK (si demandé) dans un /, des fichiers d'application dans F /, des bases de données dans les préférences DB / et partagées dans SP /. Si vous avez demandé une sauvegarde de stockage externe (à l'aide de l'optionHared Option), vous y trouverez également un répertoire partagé dans les archives contenant des fichiers de stockage externes.

adb uninstall com.google.android.apps.maps 4

Détails de chiffrement

  1. Une clé AES 256 est dérivé du mot de passe de cryptage de sauvegarde en utilisant 10000 tours de PBKDF2 avec un sel de 512 bits généré aléatoirement.
  2. Une clé principale AES 256 est générée de manière aléatoire
  3. Une clé principale 'CheckSum' est générée en exécutant la clé maître via 10000 tours de PBKDF2 avec un nouveau sel de 512 bits généré au hasard.
  4. Un cryptage de sauvegarde aléatoire IV est généré.
  5. La clé IV, la clé principale et la somme de contrôle sont concaténées et cryptées avec la clé dérivée dans 1. Le blob résultant est enregistré dans l'en-tête sous forme de chaîne hexagonale.
  6. Les données de sauvegarde réelles sont cryptées avec la clé principale et annexées à la fin du fichier.

Echantillon Pack / Déballez la mise en œuvre du code (produit / usages) Archives de goudron: https://github.com/nelenkov/android-Backup-extractor

Quelques détails ici: http://nelenkov.blogspot.com /2012/06/Unpacking-android-Android-BackUps.html

Scripts Perl pour l'emballage / le déballage et la fixation des archives cassées:

http://forum.xda-developers.com/showTthread. php? p = 27840175 # POST27840175

 

I started working on this. I'm posting my results so far here as a "community wiki" answer for two reasons: first, if someone else wants to join in, there's a place to talk; second, if I get pulled away from this project, there'll be hints for someone else to start working.

xc2xa0

The backup logic on the host is entirely contained within https://github.com/android/platform_system_core/blob/master/adb/commandline.cpp, in the function named backup. The function is very simple: it validates the command line options, sends the command mostly as-is to the adb daemon on the phone, and writes the phone's output to the file. There isn't even error-checking: if, for example, you refuse the backup on the phone, adb just writes out an empty file.

On the phone, the backup logic starts in service_to_fd() in https://github.com/android/platform_system_core/blob/master/adb/services.cpp. The function identifies that the command from the host is "backup", and passes the unparsed command to /system/bin/bu, which is a trivial shell script to launch com.android.commands.bu.Backup as the main-class of a new Android app process. That calls ServiceManager.getService("backup") to get the backup service as an IBackupManager, and calls IBackupManager.fullBackup(), passing it the still-unused file descriptor (very indirectly) connected to the backup.ab file on the host.

Control passes to fullBackup() in com.android.server.backup.BackupManagerService, which pops up the GUI asking the user to confirm/reject the backup. When the user do so, acknowledgeFullBackupOrRestore() (same file) is called. If the user approved the request, acknowledgeFullBackupOrRestore() figures out if the backup is encrypted, and passes a message to BackupHandler (same file.) BackupHandler then instantiates and kicks off a PerformAdbBackupTask (same file, line 4004 as of time of writing)

We finally start generating output there, in PerformAdbBackupTask.run(), between line 4151 and line 4330.

First, run() writes a header, which consists of either 4 or 9 ASCII lines:

  1. "ANDROID BACKUP"
  2. the backup format version: currently "4"
  3. either "0" if the backup is uncompressed or "1" if it is
  4. the encryption method: currently either "none" or "AES-256"
  5. (if encrypted), the "user password salt" encoded in hex, all caps
  6. (if encrypted), the "master key checksum salt" encoded in hex, all caps
  7. (if encrypted), the "number of PBKDF2 rounds used" as a decimal number: currently "10000"
  8. (if encrypted), the "IV of the user key" encoded in hex, all caps
  9. (if encrypted), the "master IV + key blob, encrypted by the user key" encoded in hex, all caps

The actual backup data follows, either as (depending on compression and encryption) tar, deflate(tar), encrypt(tar), or encrypt(deflate(tar)).

xc2xa0

TODO: write up the code path that generates the tar output -- you can simply use tar as long as entries are in the proper order (see below).

Tar archive format

App data is stored under the app/ directory, starting with a _manifest file, the APK (if requested) in a/, app files in f/, databases in db/ and shared preferences in sp/. If you requested external storage backup (using the -shared option), there will also be a shared/ directory in the archive containing external storage files.

$ tar tvf mybackup.tar -rw------- 1000/1000      1019 2012-06-04 16:44 apps/org.myapp/_manifest -rw-r--r-- 1000/1000   1412208 2012-06-02 23:53 apps/org.myapp/a/org.myapp-1.apk -rw-rw---- 10091/10091     231 2012-06-02 23:41 apps/org.myapp/f/share_history.xml -rw-rw---- 10091/10091       0 2012-06-02 23:41 apps/org.myapp/db/myapp.db-journal -rw-rw---- 10091/10091    5120 2012-06-02 23:41 apps/org.myapp/db/myapp.db -rw-rw---- 10091/10091    1110 2012-06-03 01:29 apps/org.myapp/sp/org.myapp_preferences.xml 

Encryption details

  1. An AES 256 key is derived from the backup encryption password using 10000 rounds of PBKDF2 with a randomly generated 512 bit salt.
  2. An AES 256 master key is randomly generated
  3. A master key 'checksum' is generated by running the master key through 10000 rounds of PBKDF2 with a new randomly generated 512 bit salt.
  4. A random backup encryption IV is generated.
  5. The IV, master key, and checksum are concatenated and encrypted with the key derived in 1. The resulting blob is saved in the header as a hex string.
  6. The actual backup data is encrypted with the master key and appended to end of the file.

Sample pack/unpack code implementation (produces/uses) tar archives: https://github.com/nelenkov/android-backup-extractor

Some more details here: http://nelenkov.blogspot.com/2012/06/unpacking-android-backups.html

Perl scripts for packing/unpacking and fixing broken archives:

http://forum.xda-developers.com/showthread.php?p=27840175#post27840175

 
 
         
         
15
 
vote
vote
Meilleure réponse
 

Le fichier n'est pas crypté, sauf si vous ne spécifiez donc donc lors de la création de la sauvegarde. Il est cependant compressé (à l'aide de dégonfler). Vous pouvez trouver le format exact en consultant le code Android Source (COM / Android / Server / Backupmanagerservice.java), et, techniquement, devrait être en mesure d'extraire des données spécifiques de celle-ci. Cependant, IIRC, il y a des chèques d'intégrité de fichiers en place, de sorte que cela ne fonctionnera probablement pas si vous supprimez simplement un tas de données de celui-ci. Malheureusement, la commande 9988777664 ne semble pas avoir une option pour restaurer une application / package particulière ou exclure un package.

 

The file is not encrypted, unless your specify so when creating the backup. It is however compressed (using deflate). You can find out the exact format by looking at Android source (com/android/server/BackupManagerService.java) code, and, technically, should be able to extract specific data from it. However, IIRC, there are some file integrity checks in place, so it most probably won't work if you just delete a bunch of data from it. Unfortunately the restore command doesn't seem to have an option to restore a particular app/package only or exclude a package.

 
 
         
         
7
 
vote

Réponse super et détaillée de Nikolay Elenkov . Cependant, je devrais ajouter que quelqu'un développe déjà un logiciel qui fait exactement cela et l'emballer ici: http: // sourceforge. NET / Projets / Adbextractor /

Le paquet contient des outils Java et Perl. Je préfère moi-même Perl sur Java n'importe quel jour, j'ai donc extrait les codes Perl, assurez-vous qu'ils sont exécutables, installés la bibliothèque de Perl requise et exécutent le adb uninstall com.google.android.apps.maps 5 contre un fichier de sauvegarde ADB et convertissez-le en. un fichier tar gouth ou gzippé sans aucun problème.

J'ai même formé une doublure à Bash 3 qui me permettez-moi de faire une sauvegarde adb directement au fichier tar gzipped:

adb uninstall com.google.android.apps.maps 6

espère que cela aide.

 

Great and detailed answer from Nikolay Elenkov. However I should added that somebody already develop a software that do just that and package it here: http://sourceforge.net/projects/adbextractor/

The package contains both Java and Perl tool. I myself prefer Perl over Java any day, so I extracted the Perl codes, make sure they are executable, installed the required Perl library, and run the backupdecrypt.pl against an adb backup file, and it convert it into a tar or gzipped tar file without any issue.

I even formed a one liner in Bash 3 that allow me to do adb backup directly to gzipped tar file:

adb backup -f >(backupdecrypt.pl -D -z - backup.tgz) -all 

Hope it helps.

 
 
   
   
-4
 
vote

Pour explorer le fichier de sauvegarde existant, essayez http://www.adb-backup.com page , il est simple sans "dd", "goudron", ...

Les données ne sont pas stockées sur ce serveur. J'ai développé ce service en ligne pour faciliter la visualisation de sauvegardes sans manipuler avec DD / goudron ou installer des logiciels supplémentaires. Je suis auteur www.adb-backup.com

 

For explore existing backup file, try http://www.adb-backup.com page, it is simple without "dd", "tar", ...

Data is not stored on this server. I've developed this online service to make it easier to view backups without manipulating with dd / tar or installing additional software. I'm author www.adb-backup.com

 
 
       
       

Questions connexes

3  Est-ce que "adb remnant" peut être utilisé sur un téléphone de stock (non ometté)?  ( Can adb remount be used on a stock phone unrooted ) 
est-il possible d'utiliser adb remount avec un micrologiciel standard et sans avoir enraciné l'appareil? Sinon, existe-t-il un autre moyen de forcer le syst...

13  Comment tirer uniquement les fichiers plus récents avec "adb tire"? (Utilitaire Android SDK)  ( How to pull only newer files with adb pull android sdk utility ) 
avec la commande "ADB TIX / SDCARD /" Je peux copier tout le contenu de la mémoire interne de mon téléphone Android dans mon annuaire local actuel (et "ADB TI...

3  Problème avec adb sur mon Nexus 4 (téléphone non autorisé)  ( Problem with adb on my nexus 4 unauthorized phone ) 
Lorsque vous exécutez des périphériques ADB dans CMD, il est indiqué que mon téléphone est non autorisé. Il semble que cela ait quelque chose à voir avec l'in...

1  J'ai flashé des récupérations avec Odin, pourquoi mon téléphone ne botte-t-il pas d'arc?  ( I flashed recoveries with odin why doesnt my phone boot bow ) 
Téléphone Android Samsung S3, non enraciné, micrologiciel de stock. Dans l'ordre chronologique: J'ai allumé le débogage USB, bien que ne puisse pas utiliser...

0  Forcer une tablette Android pour se connecter à un wifi à partir de PC  ( Forcing an android tablet to connect to a wifi from pc ) 
Il y a quelque temps, j'ai eu une tablette (Coby Kyros Mid9742), qui s'est écarté lorsque l'écran quitte l'écran (la moitié de la zone de l'écran tactile ne r...

1  Xiaomi M8se Boucle de fastboot lorsque vous essayez d'installer TWRP  ( Xiaomi m8se fastboot loop when trying to install twrp ) 
Lors de la tentative d'installation de TWRP (dernière version de Xiaomi Mi 8Se), je parviens à installer le plus récent TWRP à l'aide de ADB (Fastboot Flash r...

3  Commande de shell adb qui peut tester les codes MLS / SPC? [fermé]  ( Adb shell command that can test mls spc codes ) 
Cette question est peu susceptible d'aider les futurs visiteurs; Il n'est pertinent qu'à une petite zone géographique, à u...

7  Comment changer "Mode de réseau préféré" en utilisant adb sans redémarrer?  ( How to change preferred network mode using adb without reboot ) 
J'essaie de changer de téléphone de mon téléphone (CM 12, Stock 4.2, à la fois enracinée Mode de réseau préféré de "GSM / WCDMA" (0) à "WCDMA uniquement" (2) ...

0  Boot-boucle sur Amazon 4K Fire TV Stick  ( Boot looping on amazon 4k fire tv stick ) 
J'ai des problèmes avec ma TV Amazon 4K Fire. hier, je devais associer ma télécommande à un bâton différent dans notre maison (parce que quelqu'un a oublié ...

49  Y a-t-il un moyen pour moi d'exécuter ADB Shell en tant que root sans taper 'Su'?  ( Is there a way for me to run adb shell as root without typing in su ) 
Y a-t-il un moyen pour moi d'exécuter la coquille ADB en tant que root sans taper dans su ? Je veux pouvoir avoir un accès root sans entrer dans la coquille....




© 2022 www.demandez.top All Rights Reserved. Questions et réponses Accueil Tous les droits sont réservés