Fiz o backup do meu Nexus 7 adb backup
para fazer o backup de todos os arquivos em um backup criptografado. Vejo que você pode restaurar a partir de um backup com adb restore
, mas isso limparia todos os meus dados existentes no dispositivo.
Como exatamente eu extrairia os dados de um aplicativo desse arquivo de backup criptografado?
Respostas:
Apenas para referência de outras pessoas, aqui estão algumas informações sobre o formato de arquivo .ab.
O arquivo de backup do Android (* .ab) é um arquivo TAR compactado . É compactado usando o algoritmo DEFLATE . Além disso, pode haver criptografia AES usada. Isso é determinado quando você cria o backup; se você digitar uma senha, o backup será criptografado; caso contrário; não há criptografia, é apenas compactada.
O HEADER do arquivo é um pouco diferente de um arquivo DEFLATE normal. Ele contém informações sobre o backup e é semelhante ao seguinte:
A primeira linha é a linha "Magic" . A próxima linha é a versão do formato de arquivo de backup do Android. A próxima linha é um booleano (verdadeiro ou falso, 1 ou 0) indicando se o arquivo está compactado. A última linha é o tipo de criptografia. Este exemplo não está usando nenhuma criptografia. Se houvesse uma senha, a linha seria "AES-256". Depois disso é a cifra de criptografia. Se não houver senha, o DEFLATE "archive" será iniciado.
É compactado usando o Java Deflater . O que, da perspectiva dos desenvolvedores, causa problemas se você quiser usar qualquer coisa além do Java para extraí-lo. Não consegui encontrar nada que possa esvaziá-lo usando o mesmo algoritmo, mesmo que tudo o que encontrei (por exemplo, C #) deva seguir o "SPEC".
Com isso dito, há um projeto de código aberto sob a licença Apache 2.0, escrito por Nikolay Elenkov, que permitirá extrair o .ab em um arquivo tar.
Uso:
Se você não tiver certeza de como realmente usar isso (que está além do escopo desta resposta), a próxima versão do Droid Explorer v0.8.8.7 ( disponível aqui ) permitirá que você faça exatamente isso e muito mais, diretamente do Explorer. Você pode ler mais sobre os recursos do meu blog (sim, eu sei, plug descarado. Faço isso quando ele se encaixa na pergunta)
fonte
Ou com uma linha:
fonte
.tar.gz
arquivo comprintf
comando (0x1F 0x8B
é uma assinatura,0x08
é o método de compactação,0x00
são sinalizadores e 4 x0x00
é carimbo de data e hora) e, em seguida, anexa a esse cabeçalho o conteúdo dobackup.ab
arquivo, iniciando no deslocamento 25d. Esse fluxo é um.tar.gz
arquivo válido e otar xfvz
comando o reconhece como tal, para que ele possa descompactar com êxito o fluxo.invalid compressed data--format violated
Mais uma opção é usar
bash
,cat
egunzip
(gzip
).O processo completo pode ser este ( com um backup não criptografado ):
faça backup dos dados de um aplicativo (por exemplo, " Substituir DNS para KitKat "):
extrair os dados compactados
descomprimir os dados compactados
"descompactar" o arquivo tar
fonte
gzip: stdin: invalid compressed data--format violated
. Presumo que a extração tenha sido bem-sucedida, comodd
relatórios22763821+0 records in 22763821+0 records out
.Outra opção é usar o Perl AdbBackupRoutines desse thread XDA . Porém, eles têm alguns requisitos: Perl obviamente, mais
libterm-readkey-perl
,libcrypt-cbc-perl
elibcrypt-pbkdf2-perl
(se seus backups não estiverem criptografados, você pode pular a última dependência simplesmente comentando a linha 103 debackupdecrypt.pl
onde está incluída - funcionou bem para mim).O uso é bastante fácil:
O
.tar
arquivo resultante pode ser investigado como qualquer outro tarball. Sua estrutura é bastante interessante em pelo menos um aspecto: não reflete os caminhos reais de onde os arquivos foram extraídos (por exemplo/data/data/com.app.name/databases/whatever.db
, não , mas em vez dissoapps/com.app.name/db/whatever.db
) - o que indica que um aplicativo com backup em um dispositivo / ROM pode ser restaurado para qualquer outro dispositivo / ROM sem problemas, comoadb restore
deve descobrir os caminhos reais.fonte
.ab
) em.tar.gz
arquivos :)Com base nas informações de outras pessoas, agora sei que o arquivo de backup é apenas um fluxo deflacionado (GZip) prefixado. Com base nessas informações, este simples programa pode descompactá-lo para você:
Escrevi isso porque não tenho nenhuma das ferramentas Unix mencionadas acima e era mais fácil do que instalar o Cygwin ou outras ferramentas.
Vantagens :
Desvantagens :
Para torná-lo uma ferramenta de linha de comando, crie
unab.bat
com o conteúdo:java -cp "%~dp0." unab %*
e o diretório paraPATH
.fonte
Como a pergunta implícita também é: como restaurar dados de aplicativos únicos, gostaria de mencionar esse script bacana, que divide um determinado backup completo.ab em arquivos single-app.ab:
https://sourceforge.net/projects/adb-split/
Requer os arquivos jar: abe.jar e tar-bin-split.jar que podem ser encontrados aqui:
Funcionou pelo menos para o meu testcase.
fonte