He estado haciendo una copia de seguridad de mi Nexus 7 adb backup
para hacer una copia de seguridad de todos los archivos en una copia de seguridad cifrada. Veo que puede restaurar desde una copia de seguridad con adb restore
, pero eso eliminaría todos mis datos existentes en el dispositivo.
¿Cómo extraería exactamente los datos de una aplicación de este archivo de copia de seguridad cifrado?
Respuestas:
Solo para referencia de otros, aquí hay algunos antecedentes sobre el formato de archivo .ab.
El archivo de copia de seguridad de Android (* .ab) es un archivo TAR comprimido . Se comprime usando el algoritmo DEFLATE . Además de eso, puede haber encriptación AES utilizada. Esto se determina cuando crea la copia de seguridad; si ingresa una contraseña, la copia de seguridad se cifra, de lo contrario; no hay cifrado, solo está comprimido.
El HEADER del archivo es un poco diferente a un archivo DEFLATE normal. Contiene información sobre la copia de seguridad y tiene el siguiente aspecto:
La primera línea es la línea "Magia" . La siguiente línea es la versión del formato de archivo de copia de seguridad de Android. La siguiente línea es un booleano (verdadero o falso, 1 o 0) que indica si el archivo está comprimido. La última línea es el tipo de cifrado. Este ejemplo no está usando ningún cifrado. Si hubiera una contraseña, la línea leería "AES-256". Después de eso es el cifrado de cifrado. Si no hay contraseña, se inicia el "archivo" DEFLATE.
Está comprimido usando el Deflater de Java . Lo cual, desde la perspectiva de los desarrolladores, causa problemas si desea usar algo además de Java para extraerlo. No he podido encontrar nada que pueda desinflarlo usando el mismo algoritmo, aunque se supone que todo lo que he encontrado (por ejemplo, C #) sigue el "SPEC".
Dicho esto, hay un proyecto de código abierto bajo la licencia Apache 2.0, escrito por Nikolay Elenkov que le permitirá extraer el archivo .ab en un archivo tar.
Uso:
Si no está seguro de cómo usar realmente eso (que está más allá del alcance de esta respuesta), la próxima versión de Droid Explorer v0.8.8.7 ( disponible aquí ) le permitirá hacer exactamente esto, y más, directamente desde Explorer. Puede leer más sobre las funciones en mi blog (sí, lo sé, un enchufe descarado. Lo hago cuando se ajusta a la pregunta)
fuente
O con una línea:
fuente
.tar.gz
archivo conprintf
comando (0x1F 0x8B
es una firma,0x08
es el método de compresión,0x00
son banderas y 4 x0x00
es la marca de tiempo), luego agrega a este encabezado el contenido delbackup.ab
archivo, comenzando desde el desplazamiento 25d. Dicha secuencia es un.tar.gz
archivo válido , y eltar xfvz
comando lo reconoce como tal, por lo que puede descomprimir con éxito la secuencia.invalid compressed data--format violated
Una opción más es usar
bash
,cat
ygunzip
(gzip
).El proceso completo podría ser este ( con una copia de seguridad sin cifrar ):
copia de seguridad de los datos de una aplicación (por ejemplo, " Anular DNS para KitKat "):
extraer los datos comprimidos
descomprimir los datos comprimidos
"deshacer" el archivo tar
fuente
gzip: stdin: invalid compressed data--format violated
. Supongo que la extracción tuvo éxito, como sedd
informa22763821+0 records in 22763821+0 records out
.Otra opción es usar Perl AdbBackupRoutines de este hilo XDA . Sin embargo, tienen algunos requisitos: obviamente, Perl, más
libterm-readkey-perl
,libcrypt-cbc-perl
ylibcrypt-pbkdf2-perl
(si sus copias de seguridad no están encriptadas, puede omitir la última dependencia simplemente comentando la línea 103 debackupdecrypt.pl
dónde está incluida, funcionó bien para mí).El uso es bastante fácil:
El
.tar
archivo resultante puede ser investigado como cualquier otro tarball. Su estructura es bastante interesante en al menos un aspecto: no refleja las rutas reales de las que se han tomado los archivos (por ejemplo/data/data/com.app.name/databases/whatever.db
, no , pero en su lugarapps/com.app.name/db/whatever.db
), lo que indica que una aplicación respaldada en un dispositivo / ROM podría restaurarse a cualquier otro dispositivo / ROM sin problemas, comoadb restore
debe descubrir las rutas reales en sí.fuente
.ab
) en.tar.gz
archivos :)Basado en la información de otros, ahora sé que el archivo de copia de seguridad es solo un flujo desinflado prefijado (GZip), basado en esta información, este simple programa puede descomprimirlo para usted:
Escribí esto porque no tengo ninguna de las herramientas de Unix mencionadas anteriormente, y fue más fácil que instalar Cygwin u otras herramientas.
Ventajas :
desventajas :
Para convertirlo en una herramienta de línea de comandos, cree
unab.bat
con contenido:java -cp "%~dp0." unab %*
y el directorio paraPATH
.fuente
Como la pregunta implícita también es, cómo restaurar los datos de una sola aplicación, me gustaría mencionar esta ingeniosa secuencia de comandos, que divide un archivo full-backup.ab en archivos single-app.ab:
https://sourceforge.net/projects/adb-split/
Requiere los archivos jar: abe.jar y tar-bin-split.jar que se pueden encontrar aquí:
Al menos funcionó para mi caso de prueba.
fuente