Я выполнял резервное копирование своего Nexus 7 с помощью adb backup
резервного копирования всех файлов в зашифрованную резервную копию. Я вижу, что вы можете восстановить из резервной копии с помощью adb restore
, но это сотрет все мои существующие данные на устройстве.
Как именно я могу извлечь данные одного приложения из этого зашифрованного файла резервной копии?
Ответы:
Просто для справки других, вот некоторые сведения о формате файла .ab.
Файл Android Backup (* .ab) представляет собой сжатый файл TAR . Он сжимается с использованием алгоритма DEFLATE . Кроме того, может быть использовано шифрование AES . Это определяется при создании резервной копии, если вы вводите пароль, то резервная копия шифруется, в противном случае; нет шифрования, оно только сжато.
ЗАГОЛОВОК файла немного отличается от обычного архива DEFLATE. Он содержит информацию о резервной копии и выглядит следующим образом:
Первая строка - это «Волшебная» строка . Следующая строка - версия формата файла Android Backup. Следующая строка - логическое значение (true или false, 1 или 0), указывающее, сжат ли файл. Последняя строка - это тип шифрования. Этот пример не использует шифрование. Если был пароль, в строке было бы написано «AES-256». После этого идет шифрование. Если пароля нет, то запускается «архив» DEFLATE.
Он сжимается с помощью Java Deflater . Что, с точки зрения разработчика, вызывает проблемы, если вы хотите использовать что-то кроме Java для его извлечения. Я не смог найти ничего, что могло бы спустить это с помощью того же алгоритма, хотя все, что я нашел (например, C #), должно следовать "SPEC".
С учетом вышесказанного , существует проект с открытым исходным кодом под лицензией Apache 2.0, написанный Николаем Еленковым , который позволит вам извлечь .ab в файл tar.
Использование:
Если вы не уверены, как на самом деле использовать это (что выходит за рамки этого ответа), следующая версия Droid Explorer v0.8.8.7 ( доступна здесь ) позволит вам сделать именно это, и даже больше, прямо из Explorer. Вы можете прочитать больше о функциях в моем блоге (да, я знаю, бесстыдный плагин. Я делаю это, когда это соответствует вопросу)
источник
Или с одним вкладышем:
источник
.tar.gz
файла сprintf
командой (0x1F 0x8B
это сигнатура,0x08
метод сжатия,0x00
флаги и 4 x0x00
- метка времени), затем добавляет к этому заголовку содержимоеbackup.ab
файла, начиная со смещения 25d. Такой поток является допустимым.tar.gz
файлом, иtar xfvz
команда распознает его как таковой, поэтому он может успешно распаковать поток.invalid compressed data--format violated
Еще один вариант заключается в использовании
bash
,cat
иgunzip
(gzip
).Полный процесс может быть таким ( с незашифрованной резервной копией ):
резервное копирование данных одного приложения (например, « Переопределить DNS для KitKat »):
извлечь сжатые данные
распаковать сжатые данные
"распаковать" файл tar
источник
gzip: stdin: invalid compressed data--format violated
. Я предполагаю, что добыча прошла успешно, какdd
сообщается22763821+0 records in 22763821+0 records out
.Другой вариант - использование Perl AdbBackupRoutines из этого потока XDA . У них есть несколько требований, хотя: Perl , очевидно, плюс
libterm-readkey-perl
,libcrypt-cbc-perl
иlibcrypt-pbkdf2-perl
(если ваши резервные копии в незашифрованном виде, вы можете пропустить последнюю зависимость просто закомментировать строки 103 ,backupdecrypt.pl
где он включен - работал нормально для меня).Использование довольно просто:
Полученный
.tar
файл затем может быть исследован, как и любой другой архив. Его структура весьма интересна, по крайней мере, в одном аспекте: она не отражает реальные пути, откуда были взяты файлы (например, нет/data/data/com.app.name/databases/whatever.db
, но вместо этогоapps/com.app.name/db/whatever.db
), что указывает на то, что резервная копия приложения на одном устройстве / ПЗУ может быть восстановлена в Любое другое устройство / ПЗУ без проблем, так как самadb restore
должен выяснить реальные пути.источник
.ab
) в.tar.gz
Архивы :)Основываясь на информации, полученной от других, теперь я знаю, что файл резервной копии является просто потоком с префиксом Deflated (GZip), на основе этой информации эта простая программа может распаковать его для вас:
Я написал это, потому что у меня нет ни одного из инструментов Unix, упомянутых выше, и это было проще, чем установить Cygwin или другие инструменты.
Преимущества :
Недостатки :
Для этого создайте инструмент командной строки
unab.bat
с содержимым:java -cp "%~dp0." unab %*
и каталогомPATH
.источник
Поскольку неявный вопрос также заключается в том, как восстановить данные одного приложения, я хотел бы упомянуть этот изящный скрипт, который разбивает заданный файл full-backup.ab в файлах с одним app.ab:
https://sourceforge.net/projects/adb-split/
Для этого требуются файлы jar: abe.jar и tar-bin-split.jar, которые можно найти здесь:
Это сработало по крайней мере для моего теста.
источник