воскресенье, 14 сентября 2014 г.

Backup раздела /system в Android напрямую на ПК (на примере Мегафон Логин 3)

Иногда делаешь какие-то вещи, которые в итоге оказываются не то что беполезными, но малоприменимыми что-ли. Предысторией к этой заметке является статья на Хабре - Как сделать nandroid backup устройства непосредственно на компьютер, минуя sdcard. Вообщем-то пробежавшись мельком по ней, я решил вспомнить что такое netcat (в данном случае речь идет не о популярной CMS), и как собственно ее можно использовать для backup'а раздела system на ПК, минуя карту памяти. Под рукой у меня был рутированный планшет Мегафон Логин 3, и собственно его backup'ом я и решил заняться. Автор статьи на Хабре использует cygwin терминал, ну а я собственно, решил свести задачу к использованию "нативного" Win32 софта. Сборка NetCat по Win32 нашлась практически сразу же - netcat 1.11 for Win32/Win64, ну а большего собственно нам и не было нужно. Т.к. тестировал я все на планшете, то и рассказывать в дальнейшем я буду про этот планшет. Итак, нам понадобятся root права, включенный abd и установленный busybox на планшете (установить его можно прямо из Google Play, это не так сложно). Активируем отладку по USB и в дальнейшем работаем через ADB.

Первое что мы делаем - это adb forward tcp:5555 tcp:5555, т.е. мапим локальный TCP порт 5555 планшета, на localhost:5555. Теперь при обращении к 127.0.0.1:5555 - фактически мы будем обращаться к порту планшета (android'а). Затем в adb shell делаем три следующие команды:

/system/xbin/busybox mkfifo /data/local/tmp/myfifo
/system/xbin/busybox tar -cvf /data/local/tmp/myfifo /system
/system/xbin/busybox nc -l -p 5555 -e /system/xbin/busybox cat /data/local/tmp/myfifo

Создаем FIFO очередь с помоющью mkfifo, затем запускаем tar, который будет отправлять содержимое /system в созданную нами очередь в /data/local/tmp/myfifo, ну и наконец запускаем netcat. Он создаст pipe и будет слушать на порту 5555, ожидая входящего подключения. Вернее выполнится команда cat /data/local/tmp/myfifo, которая фактически запустит отображение нашей очереди в порт. Т.е. при подключении клиента на порт 5555 - сработает cat, который будет отображать очередь, а в очередь у нас tar будет класть содержимое system. Пока клиент не подключился на 5555 порт - tar не работает. Но достаточно с локального ПК дать команду: nc 127.0.0.1 5555 > system.tar , как содержимое /system с планшета польется через pipe на ваш ПК в файл system.tar. Все вышесказанное оформлено с помощью простого скрипта - https://yadi.sk/d/rQnasL5cbTkWH (пароль на архив - www.decker.su, будьте внимательны - некоторые антивирусы определяют netcat порт под win32 как RemoteAdmin_Tool/Not_A_Virus, на самом деле ничего страшного в этом инструменте нет, если его используете именно вы, а не кто-нибудь на вашем ПК в тайне от вас).

Распаковываем скачанный архив backup_mflogin3t.rar , подключаем планшет USB шнурком, убеждаемся в том что отладка по USB включена, на планшете есть root и busybox и он видится по adb devices. После чего запускаем backup.cmd. При этом на экране поочередно появляются несколько окон cmd:


Не закрываем их, а просто дожидаемся окончания выполнения скрипта. В окне #1 вы видите надпись "Ждите ... ", в окне #2 - показан вывод tar'а, который пишет содержимое system в пайп от nc, который в свою очередь перенаправлен в файл system.tar у вас на диске.  Когда все окна автоматически закроются у вас на диске окажется файл system.tar (~860 Mb), это и есть backup папки system.

Почему скрипт фактически бесполезен? Потому что развернуть backup аналогичным образом не удастся, я уже отписывался на этом на 4pda, поэтому здесь лишь процитирую себя же:

"Как его использовать - это уже другой вопрос. Потому как залить все назад аналогичным образом по понятным причинам не получается. Если мы начнем разворачивать backup (примонтировать system как rw, чтобы туда была разрешена запись - не проблема), проблема в том что способ требует запущенного экземпляра nc и tar на планшете, понятное дело что если мы распаковываем system.tar в /system, то рано или поздно случится "баг" (работающие экземпляры уже ведь находятся в system). Поэтому, повторюсь, в архиве только скрипты для backup'а. Я также писал скрипт восстановления из этого backup'а, но в архиве его нет, т.к. на выходе можно получить кирпич. Скрипт Backup'а абсолютно безопасен для вашего планшета. Но с другой стороны - зачем нужен backup который нельзя развернуть? ) Разве что отдельные файлы, чтобы брать, если случайно удалили (чтобы не просить на форуме). Вообщем так или иначе решил поделиться. " (с) Decker

Идеи, комментарии, предложения, пожелания приветствуются ;)

p.s. На самом деле писалось все это только чтобы "освежить" свои знания в плане *nix, pipe'ов, ну и собственно практики использования netcat. Надеюсь что для кого-то все это также окажется полезным ) 

4 комментария :

  1. Лучше бы написал, что и где нужно изменить что бы сохранять приложения на SD карту.

    ОтветитьУдалить
  2. http://www.youtube.com/watch?v=8WnPCVeMKOU - уже не то что написали, даже видеоролик отсняли. Ну а что касается меня - я про это не писал, т.к. ни одной свободной microSD, чтобы поставить в планшет под рукой нет ))

    ОтветитьУдалить
    Ответы
    1. привет !подскажите как востановить плеймаркет не работает после установки freedom_1.0.6.apk

      Удалить
  3. Ребят..А как восстановить очти мертвый(загружается и бесконечно выдает ошибки) через к??

    ОтветитьУдалить