Existe uma maneira de olhar para dentro e modificar um arquivo de backup adb? -- backup campo com adb camp android Relacionado O problema

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


43
vote

problema

português

Eu criei um backup do meu galaxy nexus com adb backup . O arquivo resultante é chamado Backup.db e é de alguma forma criptografado.

Eu queria restaurar o backup, mas ele pára quando se trata de restaurar com.android.providers.contacts . Eu usei adb logcat para descobrir o que está acontecendo e descobriu que com.android.acore falha durante o processo de restauração.

Eu gostaria de obter acesso aos dados no backup e remover o banco de dados Contatos para restaurar tudo de volta ao meu telefone. Existem outras maneiras restaurando os dados do backup?

Inglês Original

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 respostas

57
 
vote

Comecei a trabalhar nisso. Estou postando meus resultados até agora como uma resposta "Wiki" comunidade "por duas razões: primeiro, se alguém quiser participar, há um lugar para falar; Em segundo lugar, se eu for puxado para longe deste projeto, haverá dicas para alguém começar a trabalhar.

A lógica de backup no host está inteiramente contida dentro de https: // github.com/android/platform_system_core/blob/master/adb/commandline.cpp , Na função denominada backup . A função é muito Valida as opções da linha de comando, envia o comando principalmente como-é para o daemon do ADB no telefone e grava a saída do telefone para o arquivo. Não há uma verificação de erros: se, por exemplo, você recusar o backup no telefone, adb apenas escreve um arquivo vazio.

no telefone, a lógica de backup é iniciada em service_to_fd() em https://github.com/android/platform_system_core/blob/master/adb/services.cpp . A função identifica que o comando do host é "backup" e passa o comando nãoparsed para /system/bin/bu , que é um Script de Shell trivial Para lançar com.android.commands.bu.Backup como a classe principal de um novo processo de aplicativo Android. Que chama ServiceManager.getService("backup") para obter o serviço de backup como um adb uninstall com.google.android.apps.maps 0 e chama adb uninstall com.google.android.apps.maps 1 , passando o descritor de arquivo ainda não utilizado (muito indiretamente) conectado para o arquivo abcdefghgjklmnabcdefghijklmn12 no host.

Controle passa para adb uninstall com.google.android.apps.maps 3 em com.android.server.backup.backupmanagerservice , que aparece a GUI solicitando ao usuário confirmar / rejeitar o backup. Quando o usuário o faz, ABCDEFGHIJKLMNABCDEFGHIJKLMN14 (mesmo arquivo) é chamado. Se o usuário aprovar a solicitação, adb uninstall com.google.android.apps.maps 5 Figura se o backup for criptografado e passar uma mensagem para adb uninstall com.google.android.apps.maps 6 (mesmo arquivo.) adb uninstall com.google.android.apps.maps 7 então Instante e inicia um ABCDEFGHIJKLMNABCDEFGHIJKLMN18 ( Mesmo arquivo, linha 4004 A partir do tempo de escrita)

Nós finalmente começamos a gerar saída lá, em adb uninstall com.google.android.apps.maps 9 , entre linha 4151 e linha 4330 .

primeiro, restore0 grava um cabeçalho, que consiste em 4 ou 9 linhas ASCII:

.

    .
  1. restore1
  2. a versão do formato de backup: atualmente restore2
  3. restore3 se o backup estiver descompactado ou restore4 se for
  4. o método de criptografia: atualmente restore5 ou restore6
  5. (se criptografado), o "sal de senha do usuário" codificado no HEX, todas as caps
  6. (se criptografado), o "Master Key Checksum Salt" codificado no HEX, todas as caps
  7. (se criptografado), o "número de rodadas pbkdf2 usadas" como um número decimal: atualmente restore7
  8. (se criptografado), a "IV da tecla do usuário" codificada no HEX, todas as caps
  9. (se criptografado), o "mestre IV + BLOB, criptografado pela tecla do usuário" codificado no HEX, todas as caps

Os dados reais de backup segue, seja como (dependendo da compactação e criptografia) restore8 , , backup0 , ou backup1 .

todo : escreva o caminho do código que gera a saída do alcatrão - você pode simplesmente usar alcatrão, desde que as entradas estejam na ordem correta (veja abaixo).

formato de arquivo TAR

Os dados do aplicativo são armazenados no diretório APP /, começando com um arquivo _manifest, o APK (se solicitado) em arquivos A /, App em F /, Bancos de Dados em DB / E Preferências Compartilhadas em SP /. Se você solicitou backup de armazenamento externo (usando a opção -shared), também haverá um diretório compartilhado / no arquivo contendo arquivos de armazenamento externos.

  backup2   

Detalhes de criptografia

    .
  1. Uma chave AES 256 é derivada da senha de criptografia de backup usando 10000 rodadas de PBKDF2 com um sal de 512 bits gerado aleatoriamente.
  2. uma chave mestra AES 256 é gerada aleatoriamente
  3. Uma chave mestra 'Checksum' é gerada executando a chave mestra através de 10000 rodadas de PBKDF2 com um novo sal de 512 bits gerado aleatoriamente.
  4. Uma criptografia de backup aleatória IV é gerada.
  5. A IV, a chave mestre e a soma de verificação são concatenadas e criptografadas com a chave derivada em 1. O blob resultante é salvo no cabeçalho como uma string hexadecel.
  6. Os dados de backup reais são criptografados com a chave mestra e anexados ao final do arquivo.

bloco de amostra / implementação de código de descompacta (produz / usa) Arquivos Tar: https://github.com/nelenkov/android-backup-extractor

Mais alguns detalhes aqui: http://nelenkov.blogspot.com /2012/06/unpacking-android-backups.html

Perl scripts para embalagem / desembalagem e fixação de arquivos quebrados:

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
Melhor resposta
 

O arquivo não é criptografado, a menos que seja especificado, então ao criar o backup. No entanto, é comprimido (usando deflate). Você pode descobrir o formato exato olhando para o código do Android Source (Com / Android / Server / BackupManagerService.java) e, tecnicamente, deve ser capaz de extrair dados específicos a partir dele. No entanto, IIRC, existem algumas verificações de integridade de arquivo em vigor, então provavelmente não funciona se você apenas excluir um monte de dados dele. Infelizmente, o comando abcdefghgjklmnabcdefghijklmn2 não parece ter uma opção para restaurar um determinado aplicativo / pacote apenas ou excluir um pacote.

 

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

resposta excelente e detalhada de nikolay elenkov . No entanto, eu deveria adicionar que alguém já desenvolve um software que faça exatamente isso e o empacote aqui: http: // sourceforge. Net / Projetos / adbextractor /

O pacote contém a ferramenta Java e Perl. Eu prefiro Perl sobre o Java qualquer dia, então eu extrai os códigos Perl, certifique-se de que eles são executáveis, instalaram a biblioteca Perl necessária e executar o abcdefghijklmn33 em um arquivo de backup adb, e convertê-lo em um arquivo tar ou tar-gziped sem qualquer problema.

Eu até formei um liner em bash 3 que permite que eu faça backup adb diretamente para o arquivo tar gzipped:

  backup4   

Espero que ajude.

 

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 o arquivo de backup existente, tente http://www.adb-backup.com página , é simples sem "dd", "tar", ...

Os dados não são armazenados neste servidor. Desenvolvi este serviço on-line para facilitar a visualização de backups sem manipular com DD / TAR ou instalar software adicional. Estou 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

 
 
       
       

Perguntas relacionadas

0  Boot-looping na Amazon 4K Fire Tv Stick  ( Boot looping on amazon 4k fire tv stick ) 
Estou tendo problemas com minha TV Amazônia 4K Fire. ontem, eu tive que parentar meu controle remoto para um pau diferente em nossa casa (porque alguém esqu...

5  Executando uma tarefa do Tasker via sshdroid (ou shell adb)  ( Running a tasker task via sshdroid or adb shell ) 
Estou tentando executar uma tarefa de tarefa manualmente do shell adb, via sshdroid. Eu estou Executando o seguinte em Putty (Windows SSH Client): am broad...

0  Nexus 10 não reconhecido no Debian Wheezy / Mac OS / Windows 8 com ADB  ( Nexus 10 not recognized on debian wheezy mac os windows 8 with adb ) 
Estou tentando conectar meu tablet Nexus 10 + Android 4.4 + Cyanogen-Mod 11 para o meu computador desktop, onde instalei o Debian Wheezy usando ADB. Trabalhou...

1  Alterar permissões de ADB para RW? [duplicado]  ( Change adb permissions to rw ) 
. Esta pergunta já tem respostas aqui : (2 respostas) ...

0  Forçando um tablet Android a se conectar a um WiFi do PC  ( Forcing an android tablet to connect to a wifi from pc ) 
um tempo atrás, eu tinha um tablet (Coby Kyros Mid9742), que ficou arquivado quando a tela parou (metade da área da tela sensível ao toque não reconhecerá toq...

3  Pode "adb remonta" ser usado em um telefone de ações (desrotado)?  ( Can adb remount be used on a stock phone unrooted ) 
É possível usar adb remount com um firmware padrão e sem ter enraizado o dispositivo? Se não, existe outra maneira de forçar o sistema a fazer / sistema gra...

13  Como puxar apenas arquivos mais novos com "adb puxar"? (Utilitário Android SDK)  ( How to pull only newer files with adb pull android sdk utility ) 
com o comando "adb pull / sdcard /" posso copiar todo o conteúdo da memória interna do meu telefone Android no meu diretório local atual (e "ADB Pull / MNT / ...

7  Como alterar o "modo de rede preferencial" usando ADB sem reinicialização?  ( How to change preferred network mode using adb without reboot ) 
Estou tentando mudar o meu telefone (CM 12, estoque 4.2, tanto enraizado) Modo de rede preferido de "GSM / WCDMA" (0) para "somente WCDMA" (2) e vice-versa (p...

1  Como fazer backup e restaurar a configuração da APN via adb?  ( How to backup and restore apn setting via adb ) 
Como fazer backup e restaurar a configuração da APN via ADB? Eu estou no Android 6.0 sem raiz. ...

1  TWRP Advanced Wipe Soft Thicked?  ( Twrp advanced wipe soft bricked ) 
bagunçado com o meu lago Moto G7 Plus na linhagem 17.1 & amp; acabou com o TWRP na partição B & AMP; Recuperação de linhagem na partição A, não importa meus f...

50  Backup de ADB cria arquivo 0-byte; solicita a senha de backup atual, apesar de nunca definir um; "Falha ao definir a senha" para a senha de backup da área de trabalho  ( Adb backup creates 0 byte file prompts for current backup password even though ) 
o problema: Toda vez que eu executo backup adb, recebo uma mensagem perto da parte inferior da tela inicial dizendo Backup starting... , seguido por uma me...

7  Como extrair .zip através do shell adb  ( How to extract zip through adb shell ) 
Exatamente o que o título diz. Eu tenho um arquivo zip de 1,5 gb no meu sdcard que gostaria de extrair via adb (não puxando para PC e empurrando para trás). E...

1  É um Android 5.1 ADB Backup incompatível com o Android 6.0?  ( Is an android 5 1 adb backup incompatible with android 6 0 ) 
Eu carregei recentemente CyanogenMod 13 no meu Nexus 4. Antes de piscar, fiz um backup completo de ADB e um backup de dados do aplicativo para com.king.candyc...

4  adb pull - copie a pasta inteira para o computador  ( Adb pull copy whole folder to computer ) 
Como faço para copiar uma pasta do meu dispositivo Android para uma determinada pasta do meu computador? Se eu usar este comando: adb pull efs Copia ...

1  Xiaomi m8se fastboot loop ao tentar instalar o TWRP  ( Xiaomi m8se fastboot loop when trying to install twrp ) 
Ao tentar instalar o TWRP (versão mais recente para Xiaomi MI 8SE), consigo instalar o mais novo TWRP usando ADB (Fastboot Flash Recovery "C: Arquivos de Pro...

3  Problema com adb no meu Nexus 4 (telefone não autorizado)  ( Problem with adb on my nexus 4 unauthorized phone ) 
Ao executar dispositivos ADB em cmd, ele diz que meu telefone não é autorizado. Parece que tem algo a ver com o prompt de impressão digital RSA. Não me lembro...

49  Existe uma maneira de executar o shell adb como raiz sem digitar em 'su'?  ( Is there a way for me to run adb shell as root without typing in su ) 
Existe uma maneira de executar o shell adb como root sem digitar su ? Eu quero ser capaz de ter acesso root sem entrar na concha. ...

31  Backup e restaurar as configurações e aplicação do Android através do ADB  ( Backup and restore android settings and application through adb ) 
Eu gostaria de perguntar se possível fazer backup e restaurar todas as configurações e aplicativos do Android através do ADB. Eu tentei: adb backup -all ...

0  Problema adb enquanto conecta através de wifi  ( Adb issue while connecting through wifi ) 
Eu estou executando o encaminhamento da porta ADB do computador para celular com este comando: adb forward tcp:6401 tcp:50000 O que está funcionando co...

14  Qual é a diferença entre 'adb push' e 'adb install'?  ( Whats the difference between adb push and adb install ) 
Vai adb push apenas copie o arquivo no local de destino Considerando que adb install copia o arquivo no local de destino e também define a permissão ade...

3  ADB Shell Command que pode testar códigos MLS / SPC? [fechado]  ( Adb shell command that can test mls spc codes ) 
. Esta questão é improvável que ajude a futuros visitantes; Só é relevante para uma pequena área geográfica, um momento esp...

43  Existe uma maneira de olhar para dentro e modificar um arquivo de backup adb?  ( Is there a way to look inside and modify an adb backup created file ) 
Eu criei um backup do meu galaxy nexus com adb backup . O arquivo resultante é chamado Backup.db e é de alguma forma criptografado. Eu queria restaurar o b...

2  adb backup no marshmallow - é diferente?  ( Adb backup on marshmallow is it different ) 
dispositivo e configurações: moto x play (stock 6.0.1), , USB Depuração habilitado nas opções do desenvolvedor e verificada usando adb devices . Out...

1  Postei recuperações com Odin, por que minha bota do telefone não se curva?  ( I flashed recoveries with odin why doesnt my phone boot bow ) 
telefone Android Samsung S3, não enraizado, firmware de estoque. em ordem cronológica: Eu liguei a depuração USB, embora não pudesse usar fastboot. Eu usei ...

6  Como faço para acessar arquivos .img com yaffs2?  ( How do i access img files with yaffs2 ) 
Eu tentei montá-los no Ubuntu, sem sorte, mount não reconhece o sistema de arquivos Yaffs2. Eu tentei yaffs2utils e ./unyaffs2 mas não descompacta os ar...

Perguntas relacionadas

0  Boot-looping na Amazon 4K Fire Tv Stick 
5  Executando uma tarefa do Tasker via sshdroid (ou shell adb) 
0  Nexus 10 não reconhecido no Debian Wheezy / Mac OS / Windows 8 com ADB 
1  Alterar permissões de ADB para RW? [duplicado] 
0  Forçando um tablet Android a se conectar a um WiFi do PC 
3  Pode "adb remonta" ser usado em um telefone de ações (desrotado)? 
13  Como puxar apenas arquivos mais novos com "adb puxar"? (Utilitário Android SDK) 
7  Como alterar o "modo de rede preferencial" usando ADB sem reinicialização? 
1  Como fazer backup e restaurar a configuração da APN via adb? 
1  TWRP Advanced Wipe Soft Thicked? 
50  Backup de ADB cria arquivo 0-byte; solicita a senha de backup atual, apesar de nunca definir um; "Falha ao definir a senha" para a senha de backup da área de trabalho 
7  Como extrair .zip através do shell adb 
1  É um Android 5.1 ADB Backup incompatível com o Android 6.0? 
4  adb pull - copie a pasta inteira para o computador 
1  Xiaomi m8se fastboot loop ao tentar instalar o TWRP 
3  Problema com adb no meu Nexus 4 (telefone não autorizado) 
49  Existe uma maneira de executar o shell adb como raiz sem digitar em 'su'? 
31  Backup e restaurar as configurações e aplicação do Android através do ADB 
0  Problema adb enquanto conecta através de wifi 
14  Qual é a diferença entre 'adb push' e 'adb install'? 
3  ADB Shell Command que pode testar códigos MLS / SPC? [fechado] 
43  Existe uma maneira de olhar para dentro e modificar um arquivo de backup adb? 
2  adb backup no marshmallow - é diferente? 
1  Postei recuperações com Odin, por que minha bota do telefone não se curva? 
6  Como faço para acessar arquivos .img com yaffs2? 



© 2021 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.