30.07.2022

TWRP Recovery - как установить, как делать резервные копии на android, восстанавливать систему, устанавливать прошивки, патчи и ядра. Что такое Magisk, или как скрыть root в Android


Сведения о конфигурациях разделов диска для компьютеров на основе UEFI см. в разделе Рекомендуемые конфигурации разделов дисков в системах на основе UEFI .

Этот раздел также содержит описание конфигурации по умолчанию и примеры конфигураций, использующих разделы восстановления, использующих свыше четырех разделов и использующих один раздел. Другие конфигурации поддерживаются, если они соответствуют требованиям, описанным в разделе Общие сведения о разделах диска .

Описание создания структуры разделов с помощью диспетчера установки Windows® см. в разделе Создание разделов жесткого диска на базе BIOS с помощью диспетчера установки Windows .

При развертывании на основе образов используйте средство DiskPart для создания структуры разделов на конечных компьютерах. Инструкции см. в разделе Применение образов с помощью ImageX .

Конфигурация по умолчанию

Для новых установок программа установки Windows по умолчанию создаст системный раздел и раздел Windows.

Структура разделов показана в следующей таблице.

Программа установки Windows автоматически создаст эти разделы диска в следующих случаях:

  • на компьютере отсутствует системный раздел;
  • на компьютере еще нет трех существующих разделов;
  • достаточно дискового пространства для создания разделов;

при обновлении Windows с предыдущей версии программа установки Windows не меняет порядок разделов.

Приведенный ниже код содержит сценарий для средства DiskPart, создающий стандартную структуру разделов для использования в развертывании на основе образа.

Select disk 0 clean create partition primary size=300 format quick fs=ntfs label="System" assign letter="S" create partition primary format quick fs=ntfs label="Windows" assign letter="W" exit

Восстановление системы

Чтобы разрешить пользователям восстанавливать или переустанавливать Windows без удаления средств восстановления, рекомендуется устанавливать средства восстановления, такие как среда восстановления Windows, либо в системный раздел, либо в отдельный раздел восстановления.

После установки можно настроить систему так, чтобы диспетчер загрузки Windows запускал средство восстановления, если не удается запустить Windows.

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

  • В диспетчере установки Windows задайте значение для элемента Microsoft-Windows-Setup \DiskConfiguration\Disk\ModifyPartition\TypeID значение 0x27 .
  • После создания и форматирования раздела используйте команду set id=27 средства DiskPart.

В следующем примере конфигурация содержит основной раздел восстановления, основной системный раздел и основной раздел Windows.

Описание Создать раздел: порядок Создать раздел: расширить Создать раздел: размер Создать раздел: тип Изменить раздел: порядок Изменить раздел: PartitionID Изменить раздел: активный Изменить раздел: формат Изменить раздел: метка Изменить раздел: буква Изменить раздел: TypeID

Средства восстановления (например, Windows RE)

Основной

Восстановление

Системный раздел

Основной

Системный

Основной

Select disk 0 clean create partition primary size=3000 format quick fs=ntfs label="Recovery" assign letter="R" set id=27 create partition primary size=300 format quick fs=ntfs label="System" assign letter="S" active create partition primary format quick fs=ntfs label="Windows" assign letter="W" exit

Использование более четырех разделов

В системах на основе BIOS каждый жесткий диск может содержать до четырех основных разделов или до трех основных разделов и дополнительный раздел. Дополнительный раздел может быть разделен на несколько логических разделов.

На следующей схеме показаны три основных раздела (Recovery, Utility2 и системный раздел) и дополнительный раздел. Дополнительный раздел содержит логические разделы (Windows и Logical2).

В следующей таблице показаны параметры, используемые в диспетчере установки Windows, в разделе Microsoft-Windows-Setup \DiskConfiguration\Disk , для настройки конфигурации этого примера.

Описание Создать раздел: порядок Создать раздел: расширить Создать раздел: размер Создать раздел: тип Изменить раздел: порядок Изменить раздел: PartitionID Изменить раздел: активно Изменить раздел: расширить Изменить раздел: формат Изменить раздел: метка Изменить раздел: буква Изменить раздел: TypeID

Восстановление

Размер настроенного образа восстановления Windows

Основной

Восстановление

Основной

Системный раздел

Основной

Системный

Расширенный раздел

Расширенный

Логический

Логический

Для развертывания на основе образа создайте такую же структуру разделов на конечном компьютере. Следующий код представляет собой сценарий для средства DiskPart, создающий пример структуры разделов:

Select disk 0 clean create partition primary size=3000 format quick fs=ntfs label="Recovery" assign letter="R" set id=27 create partition primary size=250 format quick fs=ntfs label="Utility2" assign letter="U" set id=27 create partition primary size=100 format quick fs=ntfs label="System" assign letter="S" active create partition extended create partition logical format quick fs=ntfs label="Windows" assign letter="W" create partition logical format quick fs=ntfs label="Logical2" assign letter="L" exit

Использование одного раздела

Можно установить Windows на диск, содержащий только один раздел.

В следующей таблице показаны параметры, используемые в диспетчере установки Windows, в разделе Microsoft-Windows-Setup \DiskConfiguration\Disk , для настройки конфигурации этого примера.

Для развертывания на основе образа создайте такую же структуру разделов на конечном компьютере. Следующий код представляет собой сценарий для средства DiskPart, создающий пример структуры разделов:

Select disk 0 clean create partition primary format quick fs=ntfs label="Windows" assign letter="C" exit

Диски не отображаются в Проводнике Windows.

Системный раздел и разделы служебных программ по умолчанию не отображаются в Проводнике Windows. Чтобы убедиться в существовании этих разделов на целевом компьютере, выполните следующие действия:

  1. Нажмите кнопку Пуск , щелкните правой кнопкой мыши пункт Компьютер , а затем выберите пункт Управление . Откроется панель управления Управление компьютером .
  2. Нажмите кнопку Управление дисками . Отобразится список доступных дисков и разделов.
  3. Убедитесь в том, что разделы системы и служебных программ присутствуют в этом списке и не имеют назначенной буквы диска.

Права суперпользователя или по-простому рут - неотъемлемая часть мира операционной системы Android. Как известно, с его помощью можно существенно расширить функционал: от удаления рекламы до серьезной модификации программного обеспечения устройства. Однако, многие пользователи задаются вопросами в духе: «как запустить Сбербанк Онлайн с root?», - либо: «как играть в Pokemon GO на взломанном смартфоне?». Ответ на все это - Magisk.
С популяризацией систем бесконтактной оплаты, актуальным стал вопрос: «почему не работает Visa payWave с правами суперпользователя?». Раньше на помощь приходили модифицированные версии приложений с отключенной защитой, об их безопасности говорить нельзя, в apk-файл можно включить всё, что угодно! Разработчик под ником topjohnwu с форума XDA-Developers подошёл к проблеме совсем иначе!

Что такое Magisk

- современный администратор рут прав, по сути - более продвинутая альтернатива SuperSU от Chainfire с некоторыми функциональными нововведениями.

Интерфейс программы выполнен по гайдлайну Material Design, навигация интуитивно понятная, меню не перегружено лишними пунктами, только всё необходимое. Приложение, за редким исключением, русифицировано.

Основные особенности

Механизм получения прав суперпользователя MagiskSU не вмешивается в системный раздел. Такой подход является более безопасным по сравнению с классическим, и позволяет обновлять прошивку с форматированием системного раздела, без опасений за рут и дополнительно установленные модули.

Ключевая функция - возможность скрыть права суперпользователя от приложений, которые не работают на взломанном устройстве. К таким относятся клиенты многих банков, системы бесконтактной оплаты и, к примеру, Pokemon GO. Реализация удобная, рут скрывается в один клик, раздел Magisk Hide главного меню. Тот же Сбербанк Онлайн перестал сообщать об угрозе и открыл весь функционал!

Дополнительные модули

Ко всему прочему, в Magisk Manager включен мощный движок модов, который соответствует общей концепции приложения и работает без модификации системного раздела (systemless), можно не беспокоиться за порчу системных файлов, такой подход позволяет в любой момент отключить все дополнения. Установка модификаций осуществляется через кастомный рекавери или непосредственно через меню Magisk Manager. Уже сейчас существует множество модулей, самые интересные из них рассмотрим отдельно:

App Systemizer - модуль, который позволяет установить в качестве системного любое пользовательское приложение без модификации системного раздела. Установка в системный раздел вручную - не самое простое занятие, а в модуле необходимо лишь только отметить нужные приложения.

Viper4Android – популярный менеджер звуковых эффектов с широчайшими возможностями по настройке звукового тракта. С его помощью можно с лёгкостью раскрыть потенциал любого современного смартфона!

SELinuxPermissive Script - переводит систему безопасности SELinux в режим «Только предупреждение». Данную манипуляцию требуют некоторые приложения, например, аудио движок Viper4Android.

Xposed - мощный движок для модинга без изменения apk-файлов не требует представления. Поддерживается Android от Lollipop до Marshmallow. Отрадно, что теперь он работает без модификаций системных файлов! Для его установки помимо самого фреймворка из Magisk Manager необходимо установить Xposed Installer!

Выбор модулей и правда широкий, найти их можно в приложении, или в специальном разделе на XDA-Developers . Существует как общие модификации, вроде того же ViperFX или AdBlock, так и заточенные под определенные устройства, например, активация записи 50/60 FPS видео для Nexus 5X/6P, либо APT-X HD кодеки для OnePlus 3. Каждый найдет что-то интересное, а желающие смогут создать что-то своё, автор представляет весь необходимый инструментарий!

Как установить Magisk

Для установки приложения необходима версия ОС 5.0 Lollipop и выше, разблокированный загрузчик и кастомный рекавери, например, TWRP. Настоятельно рекомендуется сделать полный нандроид-бэкап на случай, если установка пройдёт неудачно.

Для полной функциональности Magisk Manager необходимо использовать MagiskSU, для корректной установки которого, предварительно рекомендуется удалить альтернативные администраторы рут прав. К примеру, SuperSU от Chainfire удаляется из меню настроек приложения.

Удаление Magisk Manager

Все необходимые для удаления файлы последней версии можно найти в топике
Для удаления приложения в автоматическом режиме , необходимо прошить Magisk-unistaller.zip соответствующей версии через кастомный рекавери.

В случае, если архив не отработал
, необходимо восстановить загрузочный раздел (boot.img) из резервной копии, а также вручную удалить /data/magisk.img, /cache/magisk, /data/busybox.

А что в итоге?

В результате выходит, что Magisk Manager – новый, современный подход к правам суперпользователя, который ориентирован на комфорт, а не на простую выдачу доступа. Очень радует модульность, с помощью которой можно достичь необходимого функционала без лишних рюшек. Проект активно развивается, думаю, что со временем разработчики начнут использовать его по умолчанию в своих кастомных прошивках.

Постановка проблемы

Хранение информации в компьютере связано с риском ее случайного или преднамеренного раскрытье, поэтому для ее защиты применяют различные методы и средства. Чаще всего в качестве основного средства, что препятствует свободному доступу к информации в электронном виде, используют шифрование , которое реализуется аппаратным или программным способом. Как объекты криптографической защиты выступают отдельные файлы, группы файлов, каталоги и, наконец, логические диски. Результатом шифрования является файловые архивы, находятся на электронном носителе . Подробности реализации различных криптографических алгоритмов, можно отметить, что в этом случае ГКУ необходимо также решать задачи, связанные с гарантированным уничтожением начальной незашифрованной информации , чтобы исключить ее восстановления.

Дело в том, что особенностью всех использованных файловых систем (FAT, NTFS и др.). являются не возможность перезаписи информации в кластерах, принадлежащих какому-либо файлу, пока данный файл не будет замечен, как удаленный. То есть во время шифрования файла, его зашифрованный экземпляр записывается не вместо начального файла, а в свободные кластеры электронного носителя, и только после завершения процесса шифрования незашифрованный файл удаляется, если это не предусмотрено алгоритмом.

Таким образом, возможно восстановление удалённой незашифрованной информации, чем с успехом справляются такие программные продукты, как File Recover, Back2Life, R-Studio, GetDataBack for NTFS и др.

Если не учитывать рекомендаций, связанного них с полным физическим уничтожением электронного носителя, то сделать невозможным это можно только путем многократной перезаписи тех кластеров магнитного диска, где ранее хранилась конфиденциальная информация. Например, американский национальный стандарт Министерства обороны DOD 5220.22-M (E) предполагает в первый проход запись случайных чисел, во второй — чисел, дополнительных к записанным на предыдущем проходе, а в третий — случайных чисел.В известном алгоритме Питера Гутмана (Peter Gutmann), который считается одним из самых надежных, на место уничтожаемых данных по очереди пишутся все известные комбинации разрядов (всего осуществляется 35 проходов). — методы уничтожения информации поддерживают американские стандарты DOD 5220.22-M, Army AR380-19, NCSC-TG-025, Air Force 5020, NAVSO P-5239-26, HMG IS5, немецкий VSITR, канадский OPS-II и российский ГОСТ P50739-95 и др. Таким образом, шифрование, выполняемой внутри логического диска, всегда сопряжено с риском неполного уничтожения первоначальной информации, поэтому необходим другой подход к этой проблемы.

На просторах Рунета сложно найти конструктивную и грамотно-поданную информацию об устройстве операционной системы Android. В большинстве своем, информация имеет раздробленный и неполных характер, отсутствует вводная часть с базовыми понятиями, что делает ее трудной для восприятия и понимания новичкам. При отсутствии базовых знаний устройства и алгоритма работы операционной системы Android невозможно производить отладку или кастомизацию прошивок, заниматься разработкой под ОС Android. Именно это и натолкнуло меня на написание данной статьи, в которой я попытаюсь, обычным и понятным языком, донести "сложные" вещи.

Материал направлен, в первую очередь, на изучение обычными пользователями и представлен в качестве вводного экскурса в мир операционных систем Android. Поэтому здесь будет представлена сжатая и поверхностная информация без технических углублений и нюансов. Данный материал будет полезен всем, кто занимается перепрошивкой и кастомизацией прошивок, разработкой под ОС Android, ремонтом мобильных компьютерных систем и обычному пользователю, для лучшего понимания принципов работы и возможностей своего Android"а.

Разделы внутренней памяти Android

Внутренняя память устройства на андроиде разбита на несколько логических дисков (разделов). Приведем классическую разметку памяти:

Bootloader - здесь находится программа (загрузчик), позволяющая запускать операционную систему Android, Recovery и другие сервисные режимы.

Recovery - как видно из названия, тут установлено инженерное меню восстановления или просто Рекавери.

Boot - сердце Андроид ОС, тут находится ядро, драйвера и настройки управления процессором и памятью.

System - системный раздел, в котором находятся все, необходимые для работы Android ОС, файлы, это как папка Windows на вашем диске С:\ (здесь и далее будev проводить ассоциацию с ОС Windows)

Data - раздел для установки приложений и хранения их данных. (Program files)

User - это всем известная sdcard или, проще говоря, место под пользовательские файлы (Мои документы).Здесь мы вынуждены сделать отступление, т.к. размещение данного раздела имеет несколько вариантов:

  • Раздел отсутствует во внутренней памяти, а вместо него используется внешний накопитель — самый популярный вариант. (рис.1)
  • В устройствах со встроенной памятью большого размера, данный раздел видится как sdcard, а внешняя карта памяти видится как sdcard2 или extsd (могут быть и другие варианты названия). Обычно, встречается на устройствах с Android 3.2. (Рис.2 Вариант 1)
  • Данный вариант пришел на смену предыдущему варианту, вместе с Андроид 4.0. Раздел User заменили папкой media на разделе Data, что позволило использовать всю доступную пользователю память для установки программ и хранения данных, а не то количество, что выделил нам производитель. Иными словами sdcard и data являются одним целым. (Рис.2 Вариант 2)

Теперь, когда мы знаем, что и где находится, давайте разберемся для чего оно там и как эта информация может быть нам полезна.

Начнем с Bootloader. Это загрузчик, который запускает Андроид, рекавери и т.п. Когда мы нажимаем кнопку включения, запускается загрузчик и, если нет дополнительных команд (зажатых клавиш), запускает загрузку boot. Если же была зажата комбинация клавиш (у каждого устройства она своя) то запускает, в зависимости от команды, recovery, fastboot или apx. На рисунке ниже наглядно показано, что запускает Bootloader и как взаимосвязаны разделы.

Как видно из рисунка №3, раздел Recovery не влияет на загрузку Андроид ОС, но зачем же он тогда нужен? Давайте попробуем разобраться.

Recovery (рекавери) по сути является маленькой утилитой на ядре Linux и загружается не зависимо от Андроид. Его штатный функционал не богат: можно сбросить аппарат до заводских настроек или же обновить прошивку(заранее скачанную на sdcard). Но, благодаря народным умельцам, у нас есть модифицированные рекавери, через которые можно устанавливать модифицированные (кастомные) прошивки, настраивать андроид, создавать резервные копии и многое другое. Наличие или отсутствие рекавери, а также его версия не влияют на работоспособность Андроид ОС (очень частый вопрос на форумах).

Особо внимательные читатели могли заметить на Рис.3 некий Fastboot. Это интерфейс для работы напрямую с разделами внутренней памяти, при помощи командной строки. Через него можно прошить рекавери, ядро или новую версию прошивки, или же форматировать (удалить всю информацию) тот или иной раздел.

Раз уж зашла речь об интерфейсах, хочу рассказать о еще одном, довольно известном,- adb (android debugbridge). Это, так называемый, режим отладки и назван он так неспроста - через него можно отслеживать работу, как системы в целом, так и отдельных приложений. Но это еще не все, при помощи adb можно получить полный доступ к файловой системе устройства и изменять системные файлы или же вытянуть важную информацию, когда ваш девайс завис на загрузке. Все функции режима отладки описывать не буду т.к. моя цель донести общую информацию, а не подробный обзор о функциях того или иного режима.

Разобравшись с теорией, давайте запустим Андроид ОС.

Нажимаем кнопку питания — запускается Bootloader, который загружает Ядро (boot), оно, в свою очередь, запускает систему (System), ну, а она уже подгружает программы (data) и пользовательское пространство (user). (Рис.3)

А теперь перейдем в корневой каталог и посмотрим на внутренности самой Android OS:

В этой схеме мы привели, только необходимые для ознакомления, директории. На самом деле их гораздо больше и на обзор только одной папки System понадобится целая статья.

И так, папка data. Как можно догадаться из названия, она как-то связана с данными, но с какими? Да практически со всеми, это и данные о синхронизации и аккаунтах, пароли к точкам доступа wifi и настройки vpn, и так далее. Среди всего прочего тут можно обнаружить папки app, data и dalvik-cache - рассмотрим их назначение:

  • app - сюда устанавливаются программы и игры.
  • data - здесь хранятся данные приложений, их настройки, сэйвы игр и прочая информация.
  • dalvik-cache - программная область кэш-памяти для программы Dalvik. Dalvik это Java-виртуальная машина, которая является основой для работы программ, имеющих *.apk расширение.
  • Для того, чтобы сделать запуск программ быстрее — создается их кэш.

Папка System хранит в себе системные данные и все необходимое для работы ОС. Давайте рассмотрим некоторые из этих папок:

  • app - здесь находятся системные приложения (смс, телефон, календарь, настройки и т.п.), а так же приложения установленные производителем устройства (фирменные виджеты, живые обои и т.д.).
  • fonts - системные шрифты
  • media - содержит стандартные мелодии звонков, уведомлений, будильников и звуков интерфейса, а так же загрузочную анимацию (bootanimation)
  • build.prop - Этот файл упоминается, чуть ли не первым, в разговорах и статьях о тонкой настройке системы. В нем содержится огромное количество настроек, таких как плотность экрана, время задержки сенсора приближения, управление wifi, имя и производитель устройства и многие другие параметры.

Права суперпользователя Root в ОС Android

Как и в любой Linux-подобной системе, в операционной системе Android доступ к системным файлам и директориям осуществляется при наличии прав суперпользователя Root. В даном разделе мы решили рассмотреть принцип работы прав суперпользователя ОС Android, возможность редактирования системных файлов или логических разделов файлового пространства при наличии прав суперпользователя Root.

— Знать что в какой папке это хорошо, но можно ли что-то с этим сделать?

— Да! Но нужны права суперпользователя (root) или, если проводить аналогию с Windows, права Администратора. Изначально все устройства на Андроид идут без root прав для конечного пользователя, т.е. покупая девайс, мы не являемся в нем полноценными хозяевами. Это сделано как для защиты от вредоносных программ, так и от самого пользователя - ведь, в неумелых руках, полный доступ к системе может привести к «смерти» операционной системы и последующей необходимости в перепрошивке устройства.

«Ну и в чем польза такой опасной штуки?» — спросите Вы.

Сейчас расскажем:

  • Возможность делать резервные копии данных и восстанавливать их после прошивки или случайного удаления.
  • Тонкая настройка системы вручную или при помощи специальных программ.
  • Удаление системных приложений, мелодий, обоев и т.п.
  • Изменение внешнего вида ОС (например, отображение заряда батареи в процентах)
  • Добавление функционала (поддержка ad-hoc сетей, к примеру)

Данный список можно продолжать еще долго, но, думаю, данных примеров будет достаточно для представления о возможностях и широте применения root привилегий.

— Это все здорово, но теперь любая программа сможет получить доступ к «сердцу» операционки и моим данным?

— Нет. Вы сами решаете разрешить, тому или иному приложению, получить root доступ, или нет. Для этого существует программа Superuser или ее продвинутая сестра SuperSU. Без этой или подобной программы воспользоваться root не возможно.

Как видите, Андроид не такая уж и сложная операционная система для понимания пользователя. Если вы ранее имели опыт работы с Linux-подобными операционными системами, вы найдете много схожего с Android системами и это сходство обосновано. Android система является производной и построенной на базе ядра Linux. Надеюсь, после прочтения статьи, вы узнали что-то новое или получили ответ на давно интересовавший вопрос.

Здравствуй Хабр!

Несколько лет назад, когда я впервые познакомился с Android, я услышал от своего коллеги по работе, что Android предусматривает возможность установки модифицированных или самодельных прошивок. Признаться, тогда я был далек от этого. И даже пол года назад меня едва интересовали подобные вещи. Глубоко в душе, я был уверен: то, что делает производитель, уже предназначено для нормального использования.

Каково же было мое разочарование, когда я приобрел телефон из поднебесной, где заводскими настройками было запрещено использование Google, Skype, Facebook и других приложений. В принципе, на некоторые вещи можно было закрыть глаза, но когда мой телефон не подразумевал использование учетной записи Google - я взял с себя обещания обязательно разобраться во что бы мне это не стало.

Прошло пол года и мои кастомные прошивки с успехом используются по всему миру.

В данной серии статей пойдет речь о том, как делать reverse программирование для Android, реализовывать патчи, твики и моды.

Преамбула

И так! Давайте сперва определимся с понятиями, которые будут использоваться в данной статье. Ваше привычное понимание, при этом, может сильно отличаться.

Патч - изменение или замена существующего программного кода с целью модификации алгоритма программы.
Мод - как правило, добавление дополнительного функционала в существующий программный код без изменения алгоритма.
Твик - усовершенствование функционала программы с целью облегчения доступа к параметрам системы.

Также хочу заметить, что все примеры будет взяты для телефона HTC, но это не значит, что данная информация не может быть использована на других телефонах.

Подготовка среды

Обойдусь без подробных инструкций как пользоваться тем или иным программным обеспечением. Если вам интересна данная статья и вы дочитали до этих строк, то я надеюсь, что вы уже опытный пользователь и имеете опыт использования, ну или хотя бы экспериментирования в данной области. Инструкций, статей и результатов тестирования полно в открытом доступе, впрочем, как и на Хабре. Также обойдусь без описания некоторых терминов, иначе статья получится очень большой и нудной. Будем писать только по делу. Уверен, что среда у вас уже давно стоит. Если нет, то предлагаю скачать и установить.

1 . Android SDK . Это среда разработки приложений для Андроид. Для того чтобы делать модификации, нам обязательно придется проверять наш программный код. Среда разработки самое лучшее, что мы можем использовать.
2 . Android Kitchen . Данная утилита позволит вам работать с образами системных партиций официальной ну или неофициальной прошивки.
3 . JD-GUI . Декомпилятор программного кода языка Java. Сразу отмечу, что это самый лучший декомпилятор в плане удобства использования.
4 . DJ Java Decompiler . Еще один декомпилятор, или дизассемблер, как некоторые любят называть, программного кода языка Java. Не удобен в плане использования, но разбирает код, который иногда не понимает JD-GUI.
5 . smali . Еще один дизассемблер, но уже dalvik кода. smali нужен для дизассемблирования, а backsmali ассемблирования кода.
6 . dex2jar . Утилита для конвертации исполняемых файлов Dalvik кода.

Преобразование прошивки

Разумеется, прошивка, которая стоит у вас на телефон от производителя оптимизирована с целью сокращения энергопотребления. Для того чтобы прошивку можно было изменять, ее необходимо преобразовать в формат, позволяющий изменять код. Для этого используется Android Kitchen. Можно конечно и руками, как я и делал раньше, пока не нашел эту самую «кухню». Как вытаскивать системную область из телефона, устанавливать среду, делать DEODEX прошивки, вы можете прочитать в интернете. Если вам уже ничего не понятно, я думаю стоит повременить со статьей, пока вы не наберете достаточно опыта.

После того, как прошивка из оптимизированного вида (ODEX - оптимизированный dalvik исполняемый код, если мне не изменяет память) стала DEODEX (то бишь НЕ оптимизированной), все исполняемые файлы готовы к модификации.

Непосредственно модификации

Создание патчей
Как я уже и рассказывал, мой телефон изначально имел запрет на использование Google. Ну хоть ты тресни, на Playstore не зайти, учетную запись не настроить, телефонная книга толком не синхронизируется. Зачем нужен такой Android? Долго копаясь в логах (logcat) самого устройства, я нашел записи, которые говорили о том, что использование Google запрещено. Самое не удобное в Android, вы видите лог, но не знаете какое системное приложение его производит. Чтобы отыскать от куда ноги растут, мне пришлось распотрошить все системные приложения до дизассемблированного Java кода. Это заняло достаточно времени, но я до сих пор пользуюсь проделанной работой при анализе и поиске нужного кода. Этапы получения подобного инструментария следующие:
1 . Сделать DEODEX всей прошивки
2 . Вашу новую DEODEX прошивку надо будет собрать и прошить на телефон. Как это делается - тема другой статьи.
3 . Из каждого файла, находящегося в /system/framework вытащить файл classes.dex и переконвертировать в JAR посредством dex2jar.
4 . Каждый полученный JAR открыть в JD-GUI и пере-сохранить в исходный код
5 . Распаковать исходный код из архива.

В итоге у меня получилось столько папок, сколько было JAR файлов в /system/framework, и каждая папка имела структуру исходных кодов Java.
Путем несложных манипуляций, я быстро отыскал то место, которое генерировало записи в logcat.

Не будем рассматривать всю логику запрета, так как для каждого случая это отдельная история. Мне пришлось потратить пару часов, прежде чем я нашел где производятся проверки, построить в голове блок схему алгоритма и понять куда надо лезть, чтобы алгоритм чуть чуть «попортить».

Оказалось все просто. Есть подпрограмма, которая на основе заранее установленных констант, при обращении отвечала, относится ли телефон к Китаю или же нет.

Код находился в файле HTCExtension.jar , а класс, который содержал данную подпрограмму находился в

Распаковка и анализ оригинального файла
1 . Сперва нам надо взять оригинальный DEODEX JAR файл, который отвечает за нужную нам часть кода. В нашем случае HTCExtension.jar .
2 . Открыть любым архиватором и вытащить от туда classes.dex
3 . С помощью конвертера dex2jar преобразовать его в JAR файл. Команда: dex2jar.bat classes.dex
4 . Открыть полученный classes_dex2jar.jar файл в JD-GUI.
5 . Да, чаще всего JD-GUI декомпилирует код не так как он выглядит в оригинале, оно и понятно, но читать вполне можно. В исходнике мы видим, что подпрограмма проверяет параметры проекта и языковой флаг прошивки. В нашем прискорбном случае возвращается значение TRUE.
public static boolean isChina() { if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23)); while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27)) return true; return false; }
6 . Чтобы сделать патч, нам надо дизассемблировать сам Dalvik код. Для этого используем baksmali. Удобнее всего создать отдельную папку и положить туда три файла вместе: HTCExtension.jar , smali.jar и baksmali.jar . Даем команду java -Xmx512m -jar baksmali.jar -a -d -o HTCExtension -x HTCExtension.jar

Это API вашей версии Android. Для JB - это 16
- папка, где находятся все фреймворки прошивки.

В моем случае это была команда
java -Xmx512m -jar baksmali.jar -a 16 -d S:\dev\Android\Android-Kitchen\WORKING_JB_15\system\framework -o HTCExtension -x HTCExtension.jar
7 . В нашей вновь созданной папке появилась папка HTCExtension, а в ней наши файлы с Dalvik кодом.
8 . Отыскиваем файл по пути \com\htc\util\contacts\BuildUtils$Customization.java и смотрим код:
.method public static isChina()Z .registers 3 .prologue const/4 v0, 0x1 .line 276 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0xd8 if-eq v1, v2, :cond_13 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0xda if-eq v1, v2, :cond_13 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0x17 if-ne v1, v2, :cond_14 .line 297:cond_13:goto_13 return v0 .line 283:cond_14 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S if-ne v1, v0, :cond_1d .line 285 const/4 v1, 0x2 sget-short v2, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_LANGUAGE_flag:S if-eq v1, v2, :cond_13 .line 291:cond_1d sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0x1b if-eq v1, v2, :cond_13 .line 297 const/4 v0, 0x0 goto:goto_13 .end method
9 . Страшно, не правда ли? Ничего же не понятно. Но, это дело поправимое. Создав несколько своих патчей и набив тем самым руку, вы легко сможете модифицировать код без сторонних средств. В нашем случае, в этом коде
.prologue const/4 v0, 0x1 происходит присваивание переменной v0 значение 1, то есть TRUE. Далее идут всякие проверки, и если телефон не китайский, то значение переменной изменяется:
.line 297 const/4 v0, 0x0 goto:goto_13
10 . Самый простой способ спасти отца русской демократии, это изменить код на следующий:
.prologue const/4 v0, 0x0 , то есть поменять значение переменной с 1 на 0. То есть что бы ни было, всегда бы возвращалось значение FALSE и в JD-GUI код выглядел бы как public static boolean isChina() { if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23)); while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27)) return false; return false; }
11 . Да, метод,будет работать. Но мы же не ищем легких путей - это раз. Во-вторых не совсем красиво. Хочется кода что-то вроде
public static boolean isChina() { return false; }
12 . А как нам получить Dalvik код данного исходного кода? Для новичков мы сделаем небольшой трюк.

Создание Dalvik кода
1 . Открываем Android SDK.
2 . Создаем новый проект, и в наш единственный тестовый класс пишем следующий код
package ru.habrahabr.test; public class test { public static boolean isChina() { return false; } }
3 . Компилируем наш проект и затем берем собранное приложение из рабочей области.
4 . Кладем собранное приложение в папку, где мы с вами потрошили JAR файл.
5 . Даем команду java -Xmx512m -jar baksmali.jar -a -d -o test -x test .apk
6 . Мы дизассемблировали только что собранное приложение в Dalvik код.
7 . Открываем наш файлик test.smali и видим там код
.method public static isChina()Z .registers 1 .prologue .line 7 const/4 v0, 0x0 return v0 .end method
8 . Все, код для патчинга готов.
Накатывание патча
1 . Dalvik код замусорен маркерами, указывающими строку кода в оригинальном исходном файле. Это нужно при выводе ошибок, если таковые имеются в вашей программе. Без указаний строк код также прекрасно работает.
2 . Удаляем строки с нумерацией строк, копируем и заменяем метод (подпрограмму) в нашем \com\htc\util\contacts\BuildUtils$Customization.java файле.
.method public static isChina()Z .registers 1 .prologue const/4 v0, 0x0 return v0 .end method
3 . Сохраняем файл. Да, забыл сказать, редактор нужен нормальный, например Notepad++ или EditPlus. Кому какой нравится.
Компиляция и сборка патченного JAR файла
1 . С помощью backsmali мы распотрошили наш JAR файл, а теперь его надо собрать обратно.
2 . Даем команду java -Xmx512m -jar smali.jar -a 16 HTCExtension -o classes.dex
3 . В нашей папочке появляется файлик classes.dex
4 . Снова открываем HTCExtension.jar файл архиватором и заменяем в нем существующий classes.dex на наш только что созданный.
5 . Все, наш HTCExtension.jar содержит модифицированный программный код.
Замена оригинального файла на патченный
Обычно, для рядовых пользователей создаются специальные скрипты, которые через recovery заменяются. Но нам такое не интересно. Во-первых долго и нудно, во-вторых мы же опытные пользователи и можем себе позволить некоторые тонкости.

1 . Заменить текущий рабочий файл можно следующими командами, если у вас уже стоит DEODEX прошивка и имеется root доступ:

Adb push HTCExtension.jar /sdcard/HTCExtension.jar adb shell su mount -o remount -rw /system dd if=/system/framework/HTCExtension.jar of=/system/framework/HTCExtension.jar.back dd if=/sdcard/HTCExtension.jar of=/system/framework/HTCExtension.jar chmod 644 /system/framework/HTCExtension.jar rm /data/dalvik-cache/system@[email protected]@classes.dex reboot

1-ая команда закидывает патченный файл на флешку
2-ая команда открывает shell
3-ая команда дает root доступ
4-ая команда монтирует систему в режим чтения/записи
5-ая команда делает резервную копию файла
6-ая команда перезаписывает существующий файл новым патченным.
7-ая команда настраивает разрешения
8-ая команда удаляет кэш
9-ая команда делает перезагрузку устройства.

2 . Спасибо что дочитали до этого пункта, осталось немного.
3 . После перезагрузки ваш новый патченный код вступит в силу.
4 . Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.
adb shell su mount -o remount -rw /system dd if=/system/framework/HTCExtension.jar.back of=/system/framework/HTCExtension.jar rm /data/dalvik-cache/system@[email protected]@classes.dex reboot

Эпилог

Да, кому-то показалось данная статья слишком специфичной, кому-то мало-понятной, а кому-то бесполезной. Я специально обошелся без углубленной детализации и иллюстраций как это все выглядит в живую и на практике. Во-первых, данный труд будет неблагодарный и только породить еще больше вопросов. Во-вторых, не хочу видеть армию пользователей на форумах, которые жалуются, что убили свой телефон.

К следующей статье я расскажу как делать Твики. Будет пример использования автоматической записи телефонных звонков родными средствами телефона. Спасибо за ваше внимание.

P.S. Если что-то не понятно или смущает, задавайте вопросы - всегда буду рад ответить и пояснить.