Патчим прошивку Android за 5 минут

    Задача


    Все началось с того, что я захотел установить на планшет Digma Optima 7.61 игру GTA San Andreas. К сожалению, виртуальная SD-карта планшета имеет объем менее 1 Гб, а кэш игры весит порядка 2-3 Гб. На планшете установлен Android 4.4.2 и возможность просто взять и сменить память по умолчанию в нем отсутствует. Так же в нем отсутствует файл /etc/vold.fstab (он есть на более старых версиях андроида, и изменив данный файл с root-правами, можно поменять местами виртуальную и реальную карты памяти).

    Необходимые инструменты


    1. Компьютер или ноутбук с ОС Linux.
    2. Утилиты adb и fastboot (входят в состав Android SDK, так же, как заметил tmnhy, входят в репозитории как отдельные пакеты).
    3. Набор утилит bootimg_tools (нашел здесь).

    Решение


    1. Извлекаем с устройства загрузочный образ


    — Подключаем устройство к компьютеру через usb-кабель и заходим в shell устройства:

    adb shell
    

    — Где-то в папке /dev/block на устройстве нужно найти файл с именем boot. У меня он находился по пути /dev/block/by-name/boot, но данный путь может различаться на разных устройствах.

    — Извлекаем загрузочный образ:

    dd if=/dev/block/path/to/boot of=/mnt/sdcard/boot-from-device.img
    

    — Выходим из shell'а (exit) и извлекаем образ:
    adb pull /mnt/sdcard/boot-from-device.img
    


    2. Затем загрузочный образ нужно разобрать


    — Скачиваем и распаковываем bootimg_tools.

    — Добавляем bootimg_tools в PATH:

    export PATH=$PATH:/path/to/bootimg_tools
    

    — Распаковываем образ:

    unpack boot-from-device.img
    

    — Если все предыдущие шаги сделаны верно, то должна появиться папка boot-from-device. Внутри нее должны лежать файлы zImage и ramdisk.cpio.gz, а так же папка ramdisk. Как раз внутри последней лежит содержимое загрузочного образа, которое мы будем патчить.

    3. Патчим


    Для решения своей задачи я нашел строчку, которую нужно заменить, в файле init.sun8i.rc. Я просто заменил export EXTERNAL_STORAGE /mnt/sdcard на export EXTERNAL_STORAGE /mnt/extsd. Как я понимаю, это как раз и есть то значение, которое возвращает метод Environment.getExternalStorageDirectory() в Android API. В пользу этого предположения говорит тот факт, что после применения патча приложения начали использовать аппаратную карту памяти вместо виртуальной для хранения своих данных.

    4. Заменяем загрузочный образ на устройстве


    Я написал для этих целей небольшой скрипт:

    repack_ramdisk boot-from-device/ramdisk
    mkbootimg --kernel boot-from-device/zImage --ramdisk boot-from-device/new-ramdisk.cpio.gz --base 0x40000000 --cmdline 'console=ttyS0,115200 rw init=/init loglevel=4' -o new_boot.img
    sudo adb reboot-bootloader
    sudo fastboot flash boot new_boot.img
    sudo fastboot reboot
    

    Итоги


    После проделанных манипуляций игра на планшете успешно заработала.

    P.S.


    Все вышеописанное вы проделываете со своим устройством только на свой страх и риск. За превращение вашего девайса в кирпич автор ответственности не несет.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 28

      +1
      SDK зачем? Если для утилит adb и fastboot, то они присутствуют в репозиториях как отдельные пакеты.
        0

        Спасибо за поправку. Именно для этих утилит. Я как андроид-разработчик пользуюсь SDK, на счет наличия в репозиториях не знал.

          0

          В пакетах они старые, для новых версий Android не подойдут

            0
            Никогда не сталкивался с этим. Может, тогда по версиям разложите?
              0

              С Andoid 7+ пакетные версии из Ubuntu точно не работают, по-моему даже с 6+ не работают. С пятой версией вроде работало.

                0
                В ubuntu 16.10 android-tools версии 5.1.1, с 7-кой работает.
                Если не брать дебиан, то и в остальных дистрибутивах тоже самое или свежее.
                  0

                  У меня fastboot из этого пакета не работает с Android 7

                    0
                    Я не в плане придраться, просто интересно, разве fastboot не плевать какой андроид установлен? Исходя из назначения и режимов применения этой утилиты.
                      0

                      Вроде как нет. Мне нужно было разблокировать загрузчик на Nexus 6P и старые версии fastboot просто не имели нужных команд, а старые версии этих команд ни к чему полезному не приводили.

                        0
                        У меня старый китайский планшет начал стабильно общаться с ПК, с адб буквально месячной давности.
                        Андроид 4. И даже не хочу гадать что там накрученно было.
                  0
                  столкнулся с этим при разработке на RN на ubuntu 16.04. пришлось системное удалять и делать элиас на SDK версию adb
              +1

              Счастливый человек. Если бы всегда было так просто. Обычно "не-китайские" телефоны с залоченным бутлоадером проверяют цифровую подпись образа ядра с initramfs. А вот разлочить бутлоадер не так просто. Некоторым это удавалось: https://bits-please.blogspot.de/2016/05/qsee-privilege-escalation-vulnerability.html

                0
                Рут обязателен?
                  0

                  Теоретически, насколько я понимаю, нет.
                  Но на практике проверить не могу, поскольку мой девайс уже был рутованным.

                    0

                    Рут, как таковой, не нужен. Но нужен разлоченный бутлоадер (от которого до рута уже один простой шаг).

                  • UFO just landed and posted this here
                      0
                      Это какие 150 шагов? Приведите парочку для примера. Мне хватило ровно того, что написал автор: подключить по USB девайс и ввести в терминал adb shell.
                        0

                        На самом деле, на большинстве устройств сперва нужно включить в настройках "Отладку по USB".
                        Так же для некоторых девайсов может понадобиться сделать:


                        sudo adb kill-server
                        sudo adb shell

                        Но такие подробности я опустил, в предположении, что люди, составляющие аудиторию Хабра, смогут разобраться с этим сами.

                        • UFO just landed and posted this here
                    • UFO just landed and posted this here
                        0

                        Из описания bootimg_tools:


                        Note: These tools were made for Linux. They may also work on Cygwin, but I have not personally tested them.


                        Вы это имеете в виду? Или можете предложить альтернативный метод под Windows?

                        • UFO just landed and posted this here
                      • UFO just landed and posted this here
                          0
                          Распаковать BOOT под Windows можно с помощью утилиты AndImgTool простым движение мышки. То есть хватаете файл мышкой и «кидаете» на .exe файл. Аналогично кидаете папку и получаете BOOT файл.
                            0
                            Планшет и вправду может превратиться в кирпич, хорошо, что предупреждение сделал, а то начнут вовсю девайсы гробить.
                              0
                              Для 4.4.x есть более простой способ смены памяти — нужно пропатчить vold этим патчем (оригинала коммита не нашел, к сожалению). При этом сборку желательно проводить из исходников, версией как можно ближе к стоковой прошивке девайса. После чего можно поменять память из build.prop атрибутом ro.vold.switchablepair.
                                0

                                Не совсем очевидно, как собственно патчить. Так же есть сомнения, что Ваш способ более простой.
                                Собственно, а почему бы Вам не написать об этом собственную статью? :)

                                  0
                                  Возможно, для кого-то не более простой, уж прошу извинить, просто пишу со своей точки зрения, поскольку сам часто что-либо патчу при сборке кастомных прошивок. Материала тут на статью не хватит — это ж банально скачать нужные исходники, пропатчить (даже конфликтов патча не должно быть) и собрать. Самое главное — не прогадать с версией исходников.

                              Only users with full accounts can post comments. Log in, please.