¿Hay alguna manera de mirar dentro y modificar un archivo de copia de seguridad de ADB? -- backup campo con adb camp android Relacionados El problema

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


43
vote

problema

Español

He creado una copia de seguridad de mi Galaxy Nexus con ABCDEFGHIJKLMNABCDEFGHIJKLMN4 . El archivo resultante se llama Backup.db y se cifra de alguna manera.

Quería restaurar la copia de seguridad, pero se detiene cuando se trata de restaurar ABCDEFGHIJKLMNABCDEFGHIJKLMN5 . Utilicé ABCDEFGHIJKLMNABCDEFGHIJKLMN6 Para averiguar qué está sucediendo y descubrí que com.android.acore se bloquea durante el proceso de restauración.

Me gustaría acceder a los datos en la copia de seguridad y eliminar la base de datos de contactos para restaurar todo a mi teléfono. ¿Hay alguna otra forma de restaurar los datos de la copia de seguridad?

Original en ingles

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?

     
 
 

Lista de respuestas

57
 
vote

Comencé a trabajar en esto. Estoy publicando mis resultados hasta ahora como una respuesta de "Wiki de la comunidad" por dos razones: primero, si alguien más quiere unirse, hay un lugar para hablar; En segundo lugar, si me alejarme de este proyecto, hubo sugerencias para que alguien más comience a trabajar.

La lógica de copia de seguridad en el host está totalmente contenida dentro de https: // github.com/android/platform_system_core/blob/master/adb/commandline.cpp , en la función llamada backup . La función es Muy simple: valida las opciones de línea de comandos, envía el comando en su mayoría como es el daemon ADB en el teléfono, y escribe la salida del teléfono al archivo. Ni siquiera hay una comprobación de errores: si, por ejemplo, rechaza la copia de seguridad en el teléfono, adb solo escribe un archivo vacío.

En el teléfono, la lógica de respaldo se inicia en service_to_fd() en https://github.com/android/platform_system_core/blob/master/adb/services.cpp . La función identifica que el comando del host es "backup" , y pasa el comando despojado a /system/bin/bu , que es una script trivial shell para iniciar com.android.commands.bu.Backup como la clase principal de un nuevo proceso de aplicación de Android. Que llama ServiceManager.getService("backup") para obtener el servicio de copia de seguridad como un adb uninstall com.google.android.apps.maps 0 , y llama adb uninstall com.google.android.apps.maps 1 , pasándola el descriptor de archivo aún no utilizado (muy indirectamente) conectado al archivo adb uninstall com.google.android.apps.maps 2 en el host.

Control pasa a adb uninstall com.google.android.apps.maps 3 en com.android.server.backup.backupmanagerservice , que aparece la GUI pidiéndole al usuario que confirme / rechace la copia de seguridad. Cuando el usuario lo hace, abcdefghijklmnadb uninstall com.google.android.apps.maps 4 (mismo archivo) se llama. Si el usuario aprobó la solicitud, ABCDEFGHIJKLMNABCDEFGHIJKLMN15. Instancheates y inicia un ABCDEFGHIJKLMNABCDEFGHIJKLMN18 ( mismo archivo, línea 4004 a tiempo de escritura)

Finalmente comenzamos a generar salida allí, en adb uninstall com.google.android.apps.maps 9 , entre línea 4151 y línea 4330 .

Primero, ABCDEFGHIJKLMNABCDEFGHIJKLMN20 escribe un encabezado, que consta de 4 o 9 líneas ASCII:

  1. restore1
  2. la versión de formato de copia de seguridad: actualmente restore2
  3. ya sea restore3 Si la copia de seguridad no es comprimida o restore4 si es
  4. El método de cifrado: actualmente, ya sea restore5 o restore6
  5. (si está encriptado), la "sal de contraseña de usuario" codificada en hexagonal, todas las capas
  6. (si está cifrado), la "sal de suma de suma de suma maestra" codificada en Hex, todas las capas
  7. (si se cifra), el "Número de rondas PBKDF2 utilizadas" como número decimal: actualmente restore7
  8. (si está cifrado), la "IV de la llave de usuario" codificada en hexagonal, todas las capas
  9. (Si está cifrado), la "Master IV + Blob, encriptado por la tecla de usuario" codificada en Hex, todas las capas

Los datos de copia de seguridad reales siguen, ya sea como (dependiendo de la compresión y el cifrado) restore8 , , backup0 , o backup1 .

todo : Escriba la ruta del código que genera la salida de alquitrán: simplemente puede usar alquitrán siempre que las entradas estén en el orden correcto (ver más abajo).

Formato de archivo de alquitrán

Los datos de la aplicación se almacenan en la aplicación / directorio, comenzando con un archivo _manifest, la APK (si se solicita) en A /, APP LOCHES en F /, Bases de datos en DB / Y Preferencias compartidas en SP /. Si solicitó una copia de seguridad de almacenamiento externo (usando la opción-compartido), también habrá un directorio compartido en el archivo que contiene archivos de almacenamiento externos.

  ABCDEFGHIJKLMNABCDEFGHIJKLMN32   

Detalles de cifrado

  1. Una clave AES 256 se deriva de la contraseña de cifrado de respaldo usando 10000 rondas de PBKDF2 con una sal de 512 bits generada al azar.
  2. Una llave maestra AES 256 se genera aleatoriamente
  3. Se genera una clave maestra ', la suma de suma de suma de comprobación "ejecuta la clave maestra a través de 10000 rondas de PBKDF2 con una nueva sal de 512 bits generada al azar.
  4. Se genera un cifrado aleatorio de cifrado IV.
  5. La IV, la llave maestra y la suma de comprobación se concatenan y cifradas con la clave derivada en 1. La bloba resultante se guarda en el encabezado como una cadena hexagonal.
  6. Los datos reales de copia de seguridad se cifran con la clave maestra y se adjuntan al final del archivo.

paquete de muestra / implementación del código de desempaquete (produce / usos) Archivos de alquitrán: https://github.com/nelenkov/android-backup-extractor

Algunas más detalles aquí: http://nelenkov.blogspot.com /2012/06/unpacking-android-backups.html

Perl Scripts para embalaje / desempaquetado y fijación de archivos rotos:

http://forum.xda-developers.com/showthread. 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
La mejor respuesta
 

El archivo no está encriptado, a menos que lo especifique cuando cree la copia de seguridad. Sin embargo, se comprime (usando el desinflado). Puede encontrar el formato exacto al observar el código de origen de Android (COM / Android / servidor / backupmanagerservice.java), y, técnicamente, debe poder extraer datos específicos de él. Sin embargo, IIRC, hay algunos controles de integridad de archivos en su lugar, por lo que probablemente no funcione si simplemente elimina un montón de datos de él. Desafortunadamente, el comando restoredefghijklmn2 no parece tener una opción para restaurar una aplicación / paquete particular solamente o excluir un paquete.

 

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

Excelente y detallada respuesta de Nikolay Elenkov . Sin embargo, debería agregar que alguien ya desarrolle un software que hace precisamente eso y empaquetado aquí: http: // sourceforge. red / proyectos / adbextractor /

El paquete contiene tanto la herramienta Java como la Perl. Yo mismo prefiero perl sobre Java cualquier día, así que extrayé los códigos PERL, asegúrese de que sean ejecutables, instalen la biblioteca Perl requerida y ejecute el ABCDEFGHIJKLMNABCDEFGHIJKLMN33 contra un archivo de copia de seguridad de ADB, y lo convierte en un archivo de alquitrán de alquitrán o gzipado sin ningún problema.

Incluso formé un único forro en Bash 3 que me permite hacer una copia de seguridad de ADB directamente al archivo TAR GIZPPEPE:

  backup4  

espero que ayude.

 

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

Para explorar el archivo de copia de seguridad existente, intente http://www.adb-backup.com página , es simple sin "DD", "TAR", ...

Los datos no se almacenan en este servidor. He desarrollado este servicio en línea para facilitar la vista de copias de seguridad sin manipular con DD / tar o instalar software adicional. Estoy autor 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

 
 
       
       

Relacionados problema

1  ¿Cómo puedo copiar contactos en una tarjeta SIM a mi computadora?  ( How can i backup contacts on a sim card to my computer ) 
Mi hermano quiere que haga una copia de seguridad de los datos en su tarjeta SIM. ¿Cómo puedo copiar esto a mi computadora sin arruinar mis propios contactos?...

6  ¿Cómo accede a los archivos .img con Yaffs2?  ( How do i access img files with yaffs2 ) 
He intentado montarlos en Ubuntu, sin suerte, mount no reconoce el sistema de archivos de YaffS2. He intentado yaffs2utils y abcdefhijklmnabcdefghijklmn3...

0  Restaurar whatsapp chat y datos  ( Restore whatsapp chat and data ) 
Realmente mostré mi Xperia Z2, antes de parpadear, tomé una copia de seguridad de la memoria interna del teléfono, teniendo una impresión de que los datos de ...

0  ¿Cómo puedo transferir mis contactos desde Old HTC Wildfifre Android 2.1 a LG Optimus Vu  ( How can i transfer my all contacts from old htc wildfifre android 2 1 to lg opti ) 
Solo quiero transferir todos los contactos del antiguo HTC Wildfire con la versión 2.1 de Android 2.1 a New LG Optimus Vu con la versión 4.0 de Android. He us...

5  Restaurar una copia de seguridad de una ROM  ( Restore a rom back up ) 
Voy a probar CyanogenMod esta noche en mi teléfono. Antes de hacer eso, sin embargo, tengo curiosidad por una cosa. Realicé una copia de seguridad de Nandroid...

3  ¿Por qué mi teléfono sigue siendo atascado al realizar una copia de seguridad?  ( Why does my phone keep getting stuck when performing a backup ) 
He arraigado mi teléfono y actualmente tiene una versión anterior de Cyanogen Mod en mi sprint HTC Hero. Cuando intento realizar una copia de seguridad con RO...

1  ¿Cómo hacer una copia de seguridad y restaurar la configuración de APN a través de ADB?  ( How to backup and restore apn setting via adb ) 
¿Cómo hacer una copia de seguridad y restaurar la configuración de APN a través de ADB? Estoy en Android 6.0 sin root. ...

1  ¿Está realizando una copia de seguridad de mi dispositivo Android a la nube con SkyDrive o Dropbox, igualmente efectivo como usar aplicaciones de copia de seguridad dedicadas?  ( Is backing up my android device to the cloud using skydrive or dropbox equally a ) 
es igualmente efectivo para respaldar mis aplicaciones, fotos, contactos, textos de SMS, etc. en mi teléfono inteligente Android (que no está enraizado) utili...

31  Copia de seguridad y restauración de la configuración de Android y la aplicación a través de ADB  ( Backup and restore android settings and application through adb ) 
Me gustaría preguntar si es posible realizar copias de seguridad y restaurar todas las configuraciones y aplicaciones de Android a través de ADB. Lo intenté...

4  Contactos de copia de seguridad, fotos, aplicaciones, eliminar la cuenta de Google y reemplazar con la cuenta ficticia  ( Backup contacts photos apps remove google account and replace with dummy acc ) 
Quiero desvincular mi cuenta de Google principal desde mi teléfono y usar una cuenta de un maniquí en su lugar. Realmente no uso ninguno de los servicios de G...

2  ¿Qué aplicación de respaldo / sincronización se recomienda para teléfonos Android (sin computadora)? [cerrado]  ( What backup sync app is recommended for android phones without computer ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

1  ¿Es una copia de seguridad ANDROID 5.1 ADB incompatible con Android 6.0?  ( Is an android 5 1 adb backup incompatible with android 6 0 ) 
Recientemente cargué CyanogenMod 13 en mi Nexus 4. Antes de parpadear, hice una copia de seguridad completa de ADB y una copia de seguridad de datos de la apl...

23  Nuevo teléfono: ¿Cómo transferir el progreso del juego?  ( New phone how to transfer game progress ) 
Estoy planeando comprar un nuevo teléfono Android y me gustaría poder transferir el progreso que he hecho en varios juegos al nuevo dispositivo, por lo que no...

50  Adb Backup crea un archivo de 0 bytes; solicita la contraseña de copia de seguridad actual aunque nunca establezca uno; "Error al establecer contraseña" para la contraseña de copia de seguridad de escritorio  ( Adb backup creates 0 byte file prompts for current backup password even though ) 
El problema: Cada vez que ejecuto adb backup, recibo un mensaje cerca de la parte inferior de la pantalla de inicio que dice Backup starting... , seguido d...

1  Transferencia de la historia de WhatsApp de persona a persona  ( Transferring whatsapp history from person to person ) 
Eliminé mi historia de WhatsApp con persona X, pero el historial de conversación aún existe en el teléfono de X. Entonces, ¿puedo recuperar la historia del te...

Relacionados problema

1  ¿Cómo puedo copiar contactos en una tarjeta SIM a mi computadora? 
6  ¿Cómo accede a los archivos .img con Yaffs2? 
0  Restaurar whatsapp chat y datos 
0  ¿Cómo puedo transferir mis contactos desde Old HTC Wildfifre Android 2.1 a LG Optimus Vu 
5  Restaurar una copia de seguridad de una ROM 
3  ¿Por qué mi teléfono sigue siendo atascado al realizar una copia de seguridad? 
1  ¿Cómo hacer una copia de seguridad y restaurar la configuración de APN a través de ADB? 
1  ¿Está realizando una copia de seguridad de mi dispositivo Android a la nube con SkyDrive o Dropbox, igualmente efectivo como usar aplicaciones de copia de seguridad dedicadas? 
31  Copia de seguridad y restauración de la configuración de Android y la aplicación a través de ADB 
4  Contactos de copia de seguridad, fotos, aplicaciones, eliminar la cuenta de Google y reemplazar con la cuenta ficticia 
2  ¿Qué aplicación de respaldo / sincronización se recomienda para teléfonos Android (sin computadora)? [cerrado] 
1  ¿Es una copia de seguridad ANDROID 5.1 ADB incompatible con Android 6.0? 
23  Nuevo teléfono: ¿Cómo transferir el progreso del juego? 
50  Adb Backup crea un archivo de 0 bytes; solicita la contraseña de copia de seguridad actual aunque nunca establezca uno; "Error al establecer contraseña" para la contraseña de copia de seguridad de escritorio 
1  Transferencia de la historia de WhatsApp de persona a persona 



© 2021 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos


Licensed under cc by-sa 3.0 with attribution required.