У меня смартфон Samsung Galaxy S2 GT-I9100 с LineageOS и TWRP. Каждую неделю я делаю резервную копию с помощью следующей команды:
adb backup -f twrp-20170322.ab --twrp boot data system
При желании я тоже могу использовать эту --compress
опцию.
Есть ли способ извлечь twrp-20170322.ab
файл резервной копии с помощью стандартных инструментов командной строки GNU/Linux? Я также рассмотрю возможность установки дополнительного программного обеспечения, если это необходимо, но оно должно быть бесплатным (как свобода).
Ссылки:
Я обнаружил, что файлы, сгенерированные TWRP .ab
, отличаются от обычных adb backup
файлов, поэтому смещение отличается от обычных .ab
файлов. Мне удалось проверить и извлечь файлы, используя (например, для проверки) следующую команду:
dd if=backup.ab bs=512 skip=1 | tar ft -
Судя по всему, заголовок может быть длиннее, но он должен быть выровнен с 512-байтовыми границами, поэтому просто поднимите skip=
параметр, если он не может найти его сначала.
Обратите внимание, что формат файла определен в twadbstream.h , если вам нужно углубиться в это.
Проблема с наивным подходом на основе dd заключается в том, что в файле время от времени присутствуют метаданные. Это приводит к повреждению файлов любой значительной длины.
Я написал инструмент извлечения, используя twadbstream.h (спасибо @anarcat), который я использовал для успешного восстановления больших (~ 10 ГБ) резервных копий TWRP ADB с несколькими файловыми системами. twrpabx
Если вы не защитили его паролем:
dd if=$1 bs=24 skip=1 | openssl zlib -d >${1%%.ab}.tar
dd
это «Дубликатор диска» (также известный как «разрушитель диска», если вы перепутаете его параметры с переключателем if
и of
;)bs=23
советует использовать размер блока 24 байта, который нам нужен…skip=1
пропустить 1 блок из 24 байт ("Резервный заголовок")openssl
для обработки и распаковкиОттуда вы должны знать свой путь: просто «распаковать» (извлечь) то, что вы хотите.
Почему он использует $1
? Что ж, я скопировал эту строку из ab2tar
, которая включена в мой маленький инструмент Adebar , который может вас заинтересовать: создает хорошую документацию устройства, сценарии резервного копирования и многое другое, все через ADB, используя только Bash 😇 Так что поместите эту строку в крошечный небольшой сценарий оболочки и назовите его:
ab2tar twrp-20170322.ab
Затем найдите twrp-20170322.tar
результат. Конечно, это требует openssl
установки на вашем компьютере с Linux.
--compress
при создании бэкапа, создает несжатые бэкапы? В последнем случае попробуйте не zlib
указывать параметр (или сделать наоборот и указать --compress
при создании бэкапа ;).openssl
). Но когда я пытаюсь просмотреть содержимое tar-архива с помощью tar -tf twrp-20170320.tar, я получаю: tar: Это не похоже на tar-архив; tar: переход к следующему заголовку; tar: выход со статусом сбоя из-за предыдущих ошибок--compress
опцию с adb
: она сжимает менее эффективно, чем xz
. Я предпочитаю экономить как можно больше места. Но это не связано с моей первоначальной проблемой.--compress
там). Из вашего заявления ( adb backup …
) я исходил из того же формата. Если вы просто используете другое сжатие, вы должны это учитывать. openssl
необходим для расшифровки резервной копии, поэтому без этого вы не получите действительный файл .tar
. Из ваших последних комментариев я бы предположил, что вы должны заменить zlib
соответствующую часть для xz
. Кроме того, у меня нет идей, извините.adb backup
здесь не создается «резервная копия ADB»? Это довольно запутанно.data.ext4.win
с заголовком 1536 байт, но «разбит» на блоки данных. также он может содержать несколько разделов sourceforge.net/p/adbextractor/discussion/general/thread/…
TrojanName
Сандро Антонуччи
TrojanName