Автостарт Android-устройств — это просто! Реверсим, патчим загрузчик и заставляем смартфон включаться самому

Часто Android-устройства считаются «бесполезными» через 5-10 лет после их выпуска. Особенно это актуально для бюджетных моделей, которые не справляются с современным обслуживанием или оборудования, которое по каким-то причинам было физически повреждено в течение срока службы. Однако пока одни люди выбрасывают свои смартфоны и планшеты, считая их электронными отходами, засоряющими мир, другие пытаются найти всему применение, и оказывается, что Android-устройства по-прежнему полезны. Однако бывают случаи, когда устройство необходимо автоматически включать при подключении к зарядке, и именно здесь у многих возникает замешательство – ведь кнопки выключения зачастую недостаточно! В сегодняшнем материале я расскажу о своем случае использования блока питания для питания устройства и случае достижения автоматического запуска на разных чипсетах интересный? Так что добро пожаловать в разрез!

❯ Как и зачем?

Читатели могут спросить: «Зачем вам устройство Android 10-летней давности?» Если задуматься на минутку, то можно прийти к выводу, что гаджеты прошлого действительно были очень полезны во многих областях, не только в планшетах, но и в Android-умных устройствах телефон. Помимо «стандартного» функционала в виде красивых Android-часов с будильником или мультимедийной станции вроде iPod, существует еще множество интересных ситуаций, в которых можно использовать такие устройства. Я лично для себя собрал кое-что:

  • Панель HMI: это интеллектуальные программируемые модули дисплея, которые могут отображать на экране определенную информацию с микроконтроллера или любого другого устройства. С помощью 10-дюймового планшета можно очень удобно переключать режимы работы тех или иных устройств или отображать информацию от различных датчиков в помещении в режиме реального времени. Никто не мешает вам поставить в машину такой планшет для сбора информации о двигателе.

    Устройства Android имеют огромные преимущества перед традиционными дисплеями HMI: наличие 3D-ускорителей и возможность отображать красивые визуализации и графику, а также анимацию. В будущем проекте моего автомобиля ВАЗ 2110 я покажу как на практике использовать планшет для таких целей.

  • Сбор данных: микроконтроллер имеет слишком мало встроенной флэш-памяти, чтобы хранить какие-либо большие наборы данных и строить на их основе статистику. Конечно, можно подключить MicroSD.. но нельзя подключить отдельные флэшки для всех одновременно, а MicroSD ни в коем случае не долговечна, когда данные постоянно перезаписываются - вот тут-то и приходят на помощь такие планшеты eMMC вообще более долговечен по сравнению с MicroSD, с него можно получать данные (без шифрования), а мощный процессор планшета также может обрабатывать входящие данные и отправлять их куда-то. Очень полезно!

  • Использование в качестве единого плательщика: недавно я написал об этом статью. Многие дешевые планшеты имеют на плате UART, доступ к которому можно получить из пользовательской среды или даже из Java-приложения! Так что с микроконтроллером можно общаться по проводному интерфейсу, либо тянуть ветку микроконтроллера напрямую, реализуя прошивку для МК.

  • Нестандартное приложение: Ну тут я просто хочу показать свой проект превращения планшета в игровую консоль с помощью внешнего микроконтроллера :)

итак, как мы с вами видим, устройства прошлого отнюдь не бесполезны, и при некоторой изобретательности мы можем дать им вторую жизнь и приспособить их для работы на определенных объектах. Понятное дело, что никто на него ничего серьезного вешать не будет, но например заказать что-то типа ням-панели в чебуречку или установить ГУ на машину - почему бы и нет?

Однако иногда необходимо включить автоматический запуск устройства при подключении смартфона к зарядному устройству или даже реализовать схему автономного питания. Схемы с автономным питанием относительно просты в реализации: иногда 5В можно подать напрямую от источника питания на VBat (положительный и отрицательный контакты аккумулятора). Пороговое напряжение батареи MediaTek CP достигает 5,5–5,6 В и не сгорает. Но это рискованно, если питание плохое и произойдет скачок, то может повредиться жгут/редуктор/ключи (входы со стороны USB обычно защищены). Лучше всего использовать DC-DC преобразователь ~4,2В с током 1,5-2А.

А вот с автозапуском проблема интереснее. Все зависит от реализации этой кнопки питания и чипсета: например, на смартфонах Sony с чипами Qualcomm иногда просто отключаешь кнопку питания и замыкаешь ее контакты перемычкой: все будет работать нормально и без проблем. Но на некоторых смартфонах удержание кнопки питания заставляет устройство перезагружаться каждые 10 секунд, что может быть неприемлемо.

Несколько месяцев назад читатель под ником @A1f установил мне китайский iPhone 7 Plus на Android — именно такой, какой я люблю :) Аппарат работал нормально, но после того, как читатель сдал его в сервис, и по каким-то причинам это не работает.

Обратите внимание: 12 лучших смартфонов Xiaomi.

Не хватает нескольких винтов, сломана кнопка включения на кабеле, смартфон не заряжается...

что ж, проблему с зарядкой я быстро решил: в отечественных айфонах иногда используются собственные «Осветительные» устройства, которые несовместимы с оригинальными и не могут заряжать оригинальные айфоны. К счастью, в комплекте был засохший оригинальный кабель, который я разобрал и припаял все обратно. Теперь USB и зарядка работают нормально!

вопрос про кнопку интереснее: хотя поиск кнопки на кабеле и перекидка с нее перемычки занял 5 минут, вместо того, чтобы искать простой способ, я решил запустить автоматически при подключении к зарядному устройству - точно так же, как в оригинал То же, что и на iPhone :)

И, как вы уже поняли, просто поставить перемычки на контакты питания и массу не получится — смартфон будет постоянно перезагружаться. Поэтому я сбросил загрузчик с помощью SP Flash Tool и начал модифицировать его в IDA Pro, поскольку устройство не требовало разблокировки того же загрузчика. Этот метод работает на многих устройствах на MediaTek, в том числе на некоторых 67хх (возможно, потребуется разблокировать загрузчик), а на устройствах с другими чипсетами алгоритм может быть +- аналогичный, но если напрямую вмешаться в загрузку программой невозможно, можно автоматически загрузите стартовый patch.img.

❯ Реверсим и патчим

Для реализации автозагрузки необходимо пропатчить загрузчик. В устройствах на базе чипсета MediaTek их два — первый — Preloader, который занимается первичной инициализацией периферии и оперативной памяти, второй — lk, который инициализирует дисплей, загружает ядро ​​Linux и передает ему управление; Объединенные исходники Preloader и lk уже давно гуляют в сети, поэтому проблем с их изучением не возникнет, идея общая для всех устройств.

итак, что происходит, когда вы включаете свой смартфон? lk определяет так называемый режим загрузки, который варьируется в зависимости от раздела, с которого загружается ядро ​​(загрузка или восстановление), и передает ядру аргументы (атаги). Во время работы lk и перед загрузкой ядра, перед показом анимации зарядки, загрузчик проверяет, была ли нажата кнопка питания - если да, то быстро перезагружает устройство в обычный режим.

Да, это так просто! Поэтому все, что нам нужно сделать, это исправить ситуацию, проверив кнопку питания, чтобы смартфон думал, что кнопка нажата, хотя на самом деле это не так. В IDA Pro lk загружается по смещению памяти 0x0, подсказки в виде отладочных строк помогут нам найти нужную инструкцию. IDA Pro мгновенно создает все внешние ссылки и доступ к строкам, поэтому найти необходимые данные не составит труда. Ищем «[%s] PowerKey Pressed in Kernel Charging Mode Before Jump to Kernel, Reboot Os» и видим все обращения к адресу памяти в начале строки.

чуть выше метода вызова printf вы можете найти наше условие, которое начинается с инструкции CMP R0, #0. Далее следует инструкция BNE, которая уничтожает код и продолжает загрузку системы в режиме «зарядки». Все, что нам нужно было сделать, это заменить его на NOP в шестнадцатеричном редакторе той же IDA Pro и система сразу ушла в перезагрузку и перезапустилась в обычном режиме после попытки открытия в режиме зарядки, точно так же, как мы только что открыли Смартфон кнопкой!

прошиваем наш новый lk:

Мы видим, что все работает хорошо! :)

❯ Второй способ

если пропатчить загрузчик невозможно, второй подход - пропатчить boot.img - раздел, содержащий ядро ​​устройства и ramdisk, содержащий скрипт (*.rc), используемый для инициализации устройства. Проблема в том, что даже при зарядке смартфон загружает ядро ​​Linux, начальный рамдиск и запускает app_process (основной процесс в Android), запускает загрузку системы или специальную программу в зависимости от режима загрузки, которую обычно называют зарядником, находится в /system/bin/ (иногда находится в самом boot.img).

Реализация этого метода может существенно отличаться на смартфонах с разными чипсетами, но в качестве примера я буду использовать смартфон Sony Ericsson 2011 года выпуска (у меня Xperia Play со сломанной кнопкой питания). Там устройство начинает выполнять скрипт init.rc, который в свою очередь запускает init.semc.rc и на этапе инициализации запускает программу chargemon, которая показывает анимацию зарядки, выключает смартфон, если кабель отключен и слушает кнопку питания, которую нужно нажать. Если пользователь нажимает кнопку питания, процесс загрузки продолжается. Так что весь фикс в том, чтобы закомментировать эту строку :)

#exec /system/bin/chargemon

Для МТК также можно попробовать пропатчить init.rc, чтобы система продолжала загружаться даже при подключении кабеля в режиме зарядки. Способов много, главное быть умным и не бояться понимать странные вещи :)

❯ Заключение

как видите, реализовать автоматический запуск вашего устройства не сложно. Где-то есть перемычка на кнопке питания, где-то патч boot.img, где-то патч загрузчика. Но тем не менее на практике это вполне возможно и позволяет делать интересные вещи, как я это делаю со своим китайским айфоном :)

Надеюсь, эти материалы будут вам интересны и полезны! Напишите, пожалуйста, в комментариях, нужно ли вам реализовать что-то подобное и как вы это сделали!

Друзья, если у вас есть подобные китайские устройства и вы не хотите вдыхать в них жизнь, а выбросить жалко, вы можете подарить их мне :) Как видите, эти устройства в надежных руках. Недавно я получил от SC в качестве основного смартфона непригодную для использования встроенную китайскую версию 14 Pro Max. У меня также есть канал в Telegram, где я публикую статьи по бэкенду, различные заметки и свои мысли по поводу ремонта, моддинга, программирования и реверс-инжиниринга, а также ссылки на мои новые статьи и видео. Если кому-то интересно, приходите к нам!

Всего голосов:
Всего голосов:

Статья написана при поддержке Time Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать новые статьи каждую неделю!

[Мое] Исследование гаджетов для Android-смартфонов Покупка модифицированного микроконтроллера UnixLinux своими руками Длинный пост 12

Больше интересных статей здесь: Гаджеты.

Источник статьи: Автостарт Android-устройств — это просто! Реверсим, патчим загрузчик и заставляем смартфон включаться самому.