LXF157:Android и Motorola
|
|
|
Как отстоять права root: внедрим теорию в жизнь
Android и Motorola
Александр Хрюкин делится личным опытом обхода тивоизации в телефоне на базе операционной системы Android.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Тивоизация – это когда вендор занимается привязкой конкретной версии софта к железкам устройства. Подобные ограничения не позволяют модифицировать софт или позволяют это делать только в ограниченных пределах. [Термин «тивоизация» сконструировал Ричард Столлмен из названия компании TiVo, которая применила ПО, лицензированное под GPL, на своих цифровых видеомагнитофонах, аппаратно блокировав, однако, возможность модифицировать ПО, – прим. ред.]
Что делать, если вендор выпустил телефон, но не хочет выпускать апдейты к нему?
В прошлом году я купил неплохой такой телефон от компании Motorola c Android под капотом, это был уже мой второй девайс.
Какое-то время меня все устраивало, но Google имеет похвальное свойство выпускать обновления одно за другим и в достаточно короткий срок, и что самое важное – с достаточно большими количественными и качественными изменениями, как в самом фреймворке, так и в ядре Linux.
Мой же телефон был, что называется, тивоизирован по самое не могу, а стало быть, обновления ему никоим образом не светили.
Зачем это нужно конкретно для телефонов со «свободным» Android, мне несколько неясно: на мой взгляд, Motorola пытается катить из года в год одну и ту же телегу, доверху набитую подлыми и устаревшими приемами, ради, якобы, «пользовательской безопасности».
Итак, вооружившись старым добрым Vim, парочкой компиляторов и git, я приступил к ковырянию в программных внутренностях аппарата под названием Motorola Charm MB502.
Сначала следовало отделить открытые компоненты от проприетарных компонентов или тех GPL-компонентов, для которых компания «забыла» открыть исходные коды.
А если очень хочется поставить свою версию операционной системы, нужно придумать способ, как ее заливать в NAND-память устройства.
Во время разработки инженер может работать с NAND-чипом, например, при помощи JTAG-кабеля, но я подобной роскоши, в силу не зависящих от меня причин (тивоизация же повсюду), не имел. Соответственно, оставался единственный способ: использовать стандартные средства операционной системы, то есть recovery + Android Debug Bridge (ADB).
После этого можно подключить телефон USB-кабелем к компьютеру, ввести команду
adb shell
и попасть наконец-то внутрь устройства.
Чтобы гулять по файловой системе дальше точек монтирования типа /tmp, /sdcard/ и небольшого кусочка /data/, необходимо получить root-доступ.
Детально описывать процесс не буду, скажу лишь, что подобные программы доступны непосредственно в Android-маркете и являются абсолютно бесплатными.
Ну вот, теперь у меня появилась возможность совершать любые непотребства с такими разделами, как /data (где хранятся личные данные, учетки, пароли и прочее) и /system, где находится собственно сам Android, то есть его фреймворк, демоны и прочие радости дефолтной мотороловской поставки телефона.
Сейчас я попробую описать, как выглядит процесс замены прошивки устройства у тивоизированного устройства и, скажем, условно открытого.
Например, при переходе с Android 2.1 на 2.3 инженеры Google внесли несколько изменений в ядро Linux, связанных с шифрованием, ну и в 2.3, конечно же, перешли на новую стабильную ветку ядра 2.6.32.
Происходит замена следующим образом: пользователь запускается в режим recovery – при помощи мастера обновлений или соответствующей комбинации кнопок на устройстве; дальше recovery в соответствии со скриптом может самостоятельно начать процесс обновления, ну или придется руками выбрать пункт “Update”.
В случае с тивоизацией же совершенно невозможно прошить что-то еще, кроме апдейта, подписанного ключом вендора, а ключ этот выдают только особо избранным – и простым смертным он недоступен. Взломать его тоже не очень получится: на брутофорс подобных подписей должно уйти время, сравнимое со временем существования Вселенной. Поиск ключа hash-collision в теории должен занять меньше времени, но оно все равно значительно дольше человеческой жизни.
Итак, чтобы прошить в NAND-память правильный апдейт, нужен recovery, который не проверяет ту заветную цифровую подпись.
Таких recovery на самом деле полно: в проекте CyanogenMod используется ClockWork Recovery, года два назад были еще несколько, но в итоге все слились в единый проект CyanogenMod.
Процесс компиляции recovery в рамках этой статьи я рассматривать не буду, остановимся на этом как-нибудь в другой раз. Сейчас же важен способ запуска нового модифицированного recovery, которое не проверяет подписи.
Настало время напомнить, что новое recovery записать в Nand невозможно, потому что загрузчик проверяет при старте системы подпись разделом boot и, собственно, самого recovery.
Значит, нужно запускать с каким-нибудь хитрым костылем. Покопавшись весьма продолжительное время во внутренностях опубликованного Моторолой ядра, его конфига и файловой системы телефона, я обнаружил, что существует двоичный файл под названием mot_boot_mode, и, что самое удивительное, его запускает непосредственно ядро.
Исходный код бинарника был закрыт, но, на мое счастье, размер исполняемого файла был всего 6 КБ, а во мне проснулся талант реверс-инженера.
Файл был немедленно дизассемблирован и переписан под свободной лицензией.
Суть программы mot_boot_mode сводилась к следующему: при старте системы запускается программа, дальше она читает файл /proc/bootinfo и спрашивает у него: «А чего ж мне ядро туда понаписало и что же делать?» И в соответствии с содержимым выполняет парочку команд, которые запускают или не запускают Android.
Итак, решено, буду запускать новое recovery при помощи этой штуковины.
Примерно за час я дописал еще небольшую часть кода, суть которой сводилась к тому, что при существовании файла /data/.recovery_mode mot_boot_mode остановит загрузку Android, развернет архив с recovery из раздела /cdrom, который я приспособил под хранение нового recovery, и собственно запустит его.
Вот подобным нехитрым способом я смог запустить новое recovery, которое обладает массой преимуществ по сравнению со стандартным, а именно:
- возможность сохранения текущего образа телефона на карту памяти;
- калибровка батареи;
- установка zip-архива с карты памяти;
и множество других приятных мелочей.
Весь код легко раздобыть на сайте: