Программа для редактирования прошивок андроид
Несколько лет назад такие операции, как рутинг, прошивка и тюнинг Android-смартфона, требовали достаточно глубоких знаний, специальных инструментов, совместимых только с настольной Windows, и массу терпения. Сегодня все стало намного проще и все эти действия можно выполнить с помощью специального софта для смартфона, доступного прямо в Google Play.
Введение
Обычно установка альтернативной прошивки на девственно чистый смартфон выглядит примерно так: сначала ты находишь в Google информацию по рутингу своей модели смартфона, затем обзаводишься необходимыми инструментами (Android SDK, adb, fastboot, скрипты), подключаешь смартфон к компу и пытаешься как можно точнее выполнить инструкции. Если все удалось, ты получаешь root и, в некоторых случаях, в довесок кастомную консоль восстановления.
Далее следует установить прошивку. Для этого ты вновь погружаешься в интернет и, спустя полчаса хождения по форумам и чтения информации о совместимости, находишь и скачиваешь zip-архив с прошивкой. Снова подключаешь смартфон к компу и скидываешь на него прошивку. Затем ты выключаешь смартфон, включаешь его, зажав кнопки уменьшения громкости и включения, и получаешь доступ к консоли восстановления. Пять минут походив по меню с помощью клавиш громкости, ты находишь свою прошивку на карте памяти и даешь команду на установку.
После окончания установки ты перезагружаешь смартфон и молишься, чтобы все получилось. Когда на экране появляется рабочий стол, ты с облегчением выдыхаешь и тут же вспоминаешь, что забыл скачать и установить приложения Google и ядро. Что ж, для этого ты еще полчаса проводишь в интернете, находишь искомые zip’ы, скидываешь их на карту памяти, дальше консоль восстановления, тыканье по меню, ожидание со скрещенными пальцами, и вот оно, рабочий стол… блин, надо было устанавливать другую прошивку…
Знакомая картина? Если да, то эта статья для тебя. Из нее ты узнаешь, как проделать все то же самое за десять минут, подключив смартфон к компу только один раз на две минуты.
Что ты хочешь и что ты получишь?
Итак, предположим, что ты держишь в руках совершенно новый смартфон. Твоя задача — установить на него CyanogenMod (как вариант — AOKP, ParanoidAndroid или популярный SuperVasyaAndroidModPlus) и ядро franco.kernel. И тот и другой распространяются в прошиваемых через консоль восстановления zip-файлах. Однако обычная конcоль их не примет из-за кривой цифровой подписи («не производителя это подпись, прощайте»). Поэтому тебе нужна кастомная консоль восстановления, которая не обращает внимания на цифровые подписи. Это может быть ClockworkMod или TWRP.
Бесплатная версия franco.updater не умеет ничего, кроме установки и обновления ядра
Другие статьи в выпуске:
Но! Чтобы установить кастомную консоль восстановления, нужны права записи во внутреннюю память смартфона, то есть нужен root. А root в «не Nexus» устройствах всегда получают с помощью взлома защиты Android. Итого в целом картина действий выглядит так: получение root -> установка консоли восстановления -> прошивка CyanogenMod -> прошивка приложений Google -> прошивка ядра -> перезагрузка -> радость. Давай посмотрим, как все это сделать.
В CyanogenMod есть собственный механизм OTA-обновления прошивки
Перво-наперво нам нужен root. Сразу скажу, что это единственная задача, для решения которой придется подключить смартфон к компу. Здесь уж ничего не поделаешь, система безопасности Android не позволит сделать это Android-приложению. С другой стороны, плеваться тоже не стоит, так как все делается очень быстро и безболезненно. Общий алгоритм действий выглядит так:
По заявлению украинских разработчиков, iRoot действует в отношении любого смартфона под управлением Android 2.3–4.2.2, а не только устройств от Huawei, как можно было подумать, скачав и запустив приложение. После завершения работы и нескольких перезагрузок на смартфоне должно появиться приложение SuperUser и, конечно же, root-доступ, который откроет нам путь для установки рекавери и прошивок.
iRoot — получаем root в один клик
Установка Recovery
Установить кастомную консоль восстановления между тем очень просто. Для этого в маркете есть куча приложений, но я бы рекомендовал использовать Recovery-Tools, ROM Manager или TWRP Manager. Первая предназначена исключительно для установки рекавери и, по сути, состоит всего из двух кнопок: «Flash Clockworkmod Recovery» и «Flash TWRP Recovery». После нажатия одной из них будет установлена та или иная консоль восстановления. В принципе, неважно, какую из них устанавливать, отличие разве что в том, что TWRP удобнее управлять пальцем, но и эта функция нам безразлична — самостоятельно рыться в их настройках мы не будем, а положимся на специальный софт.
ROM Manager предлагает нам установить ClockworkMod Recovery
По идее, Recovery-Tools должна сама определить модель смартфона и скачать правильный архив с консолью, однако этот механизм срабатывает не всегда, да и база данных неполная. Поэтому как запасной вариант можно использовать ROM Manager, предназначенный исключительно для установки ClockworkMod, но зато включающий в себя исчерпывающую базу устройств. Опять же все, что нужно сделать, — это нажать на кнопку Recovery Setup -> ClockworkMod Recovery, подтвердить модель телефона и дождаться окончания установки.
TWRP-Manager: простой и удобный способ управления TWRP Recovery
Если же и этот метод не сработал, то стоит обратить внимание на модель своего смартфона и убедиться, не китайская ли это поделка. Само собой разумеется, супердешевые китайские телефоны нельзя прошить таким образом. Никто их в базу вносить не будет, а заниматься поддержкой тем более. Поэтому в отношении китайцев придется применять старый дедовский способ ручной установки (да и то тебе сильно повезет, если на него вообще что-то будет портировано).
Recovery-Tools: простой и удобный способ установки рекавери
Установка прошивки
Теперь, когда смартфон оснащен кастомной консолью восстановления, он готов принять любую доступную для данной модели прошивку и проглотить ее, не поперхнувшись. Самостоятельно искать прошивки мы, конечно же, не станем. Мы автоматизируем этот процесс с помощью приложения GooManager. Для тех, кто не в курсе: еще с самого начала распространения кастомных прошивок в Сети появился сайт. Изначально на нем размещался проприетарный гугловский софт (типа Gmail или маркета), который авторы кастомных прошивок не могли использовать из-за лицензионных ограничений, но затем он превратился в открытый репозиторий всевозможных прошивок, а еще через некоторое время появилось приложение GooManager, позволяющее автоматически устанавливать как прошивки, так и гугловские приложения.
Это приложение замечательно тем, что дает выбор из доступных прошивок, основываясь на модели смартфона. В результате нам не придется ни самостоятельно искать прошивки, ни бояться за то, что какая-то из них может криво встать. В общем и целом алгоритм работы с приложением выглядит так: «Запуск -> Browse Compatible ROMs -> выбор прошивки по имени (например, aokp или cm) -> выбор версии -> Begin Download -> Order & flash selected -> Flash». И это все, прошивка будет скачана, а затем установлена автоматически. Смартфон при этом перезагрузится.
Отмечу также, что по умолчанию GooManager не делает вайп перед установкой прошивки, однако он это умеет. Поэтому каждый раз при кардинальной смене прошивки, то есть именно замене одной на другую, а не обновлении, в последнем окне (которое появляется после нажатия «Order & flash selected») следует ставить флажок напротив опции «Wipe data (factory reset)». Так ты избежишь возможных проблем с загрузкой и работой новой прошивки.
GooManager собственной персоной
Установка ядра
Кроме кастомной прошивки, мы также можем поставить кастомное ядро. О том, что это такое, мы уже подробно рассказывали в одном из предыдущих номеров. Если в двух словах, то кастомное ядро может дать более тонкий контроль над смартфоном, поднять его производительность и сохранить заряд батареи, однако здесь все далеко не так просто, как с прошивками, и без детального ознакомления с темой я бы не рекомендовал прошивать кастомное ядро и ограничиться тем, которое идет в комплекте с прошивкой.
Если же решение об установке ядра принято, то самое время заглянуть в Google Play. Для многих популярных кастомных ядер в свое время были разработаны специальные утилиты для управления и обновления, с помощью которых установить ядро можно так же легко, как запустить почтовый клиент. Три известных утилиты из этого списка:
- franco.Kernel updater — «обновлятор» и конфигуратор одного из самых известных ядер для девайсов линейки Nexus (поддерживаются Samsung Galaxy Nexus, LG Nexus 4, Asus Google Nexus 7 и Samsung Nexus 10). Бесплатная версия умеет только устанавливать и обновлять ядро, но большего нам и не нужно;
- Trinity Kernel Toolbox — аналогичное решение для ядра Trinity, поддерживающего все те же Nexus-устройства, а также Samsung Galaxy Note II и Galaxy S III. Помимо функции установки, также включает в себя инструменты управления всеми функциями ядра и стоит 114 рублей;
- GLaDOS Control — практически копия предыдущего приложения, но в этот раз для, прямо скажем, не самого популярного ядра GlaDOS (Galaxy Nexus и Nexus 7). Включает в себя полный комплект для тюнинга и автоматическую обновлялку. Стоит 81 рубль.
Все эти приложения позволяют без лишних телодвижений установить одно из трех ядер. Но если деньги тратить не хочется или ты выбрал ядро, для которого просто нет управляющего приложения, то можно выйти из ситуации, скачав ядро прямо на телефон, а затем прошив его с помощью все того же GooManager. Делается это так:
- Идем на xda или 4pda, находим свой девайс, выбираем ядро (да, придется покопаться в многочисленных тредах) и скачиваем его на телефон. Обычно ядро весит 5–10 Мб, поэтому ждать придется недолго и стоить это будет копейки (если нет Wi-Fi).
- Устанавливаем и запускаем любой файловый менеджер, переходим в каталог Download на карте памяти, находим архив с ядром и копируем его в каталог goomanager, опять же в корне карты памяти.
- Запускаем GooManager, жмем на пункт Flash ROMs, ставим галочку напротив архива с ядром, жмем кнопку «Order & flash selected», а на следующем экране, ничего не меняя, нажимаем кнопку «Flash».
Обновление прошивки, ядра и gapps
К этому моменту у тебя уже должны быть кастомная консоль восстановления, кастомная прошивка, приложения Google и кастомное ядро; фул-хаус, все, что только нужно. Однако долго на этом всем мы не просидим, и вскоре уже выйдут новые версии прошивок, основанные на новой версии Android, еще более быстрые ядра и еще более фичастые консоли восстановления. Короче говоря, нужно обновляться. Но как?
Для обновления также предусмотрены свои собственные инструменты, но перед тем, как перейти к их обзору, поясню несколько специфичных моментов:
- Консоль восстановления можно обновлять когда угодно и как угодно. Она находится в отдельном разделе, поэтому, даже угробив этот раздел, ты не угробишь Android. Обновлять можно с помощью все тех же Recovery-Tools, ROM Manager и TWRP Manager.
- Ядро тоже находится в отдельном разделе, и его можно обновлять/менять когда угодно и как угодно, главное — учитывать совместимость с версиями Android и типами прошивок. Способы описаны выше.
- Обновляется прошивка без всяких вайпов, однако, если было установлено кастомное ядро, его придется переустановить. Переустановка приложений Google не требуется.
- Переход на другую прошивку производится с полным вайпом (factory reset) и последующей доустановкой приложений Google и ядра. Все данные, кроме файлов на карте памяти, будут потеряны (этого можно избежать, сделав бэкап с помощью Helium или Titanium Backup).
Теперь о том, как выполнять обновление. Рекавери и ядро обновляются с помощью специализированного софта либо, в случае использования редкого ядра, самостоятельного скачивания и прошивки вручную, как показано в предыдущем разделе. Обновлять прошивки можно разными способами. Если прошивка была установлена с помощью GooManager, то при появлении новой версии в репозитории goo.im тебе придет уведомление, нажав на которое можно скачать и установить новую версию. Никаких данных и приложений ты при этом не потеряешь, останется переустановить только ядро.
В CyanogenMod есть собственный механизм обновления, который также автоматически предупредит тебя о выходе новой версии и предложит скачать ее и установить. По умолчанию он работает только со стабильными версиями прошивки, но его можно переконфигурировать, так что предупреждения будут приходить и после выхода ночных сборок. Для этого идем в «Настройки -> О телефоне -> Обновление CyanogenMod». В опции «Проверка обновлений» выбираем «Ежедневно», в опции «Тип обновления» — «Новые версии (Включая ночные сборки)».
Единственная проблема такого метода обновления в том, что каждая прошивка будет весить около 200 Мб — накладно, если производить обновления каждый день или несколько раз в неделю. Поэтому я бы рекомендовал использовать инструмент CyanDelta, который позволяет выкачивать только патчи с измененными компонентами прошивки вместо всего архива целиком. При использовании этого инструмента каждое обновление будет весить всего 2–10 Мб, так что для выкачивания подойдет даже сотовая сеть. Пользоваться очень просто: после первого запуска софтина предложит загрузить всю прошивку целиком (на нее в дальнейшем будут накладываться патчи), после чего повиснет в фоне и будет уведомлять о появлении обновлений.
CyanDelta позволяет скачать новую версию Android, потратив всего 3 Мб трафика
Бэкап
Обычно бэкап Nandroid выполняется вручную прямо из меню кастомного рекавери, однако мы воспользуемся приложением Online Nandroid Backup, которое создает резервную копию системы прямо во время ее работы. Приложение это бесплатное и доступно в Google Play. После установки оно установит скрипт бэкапа (это, кстати, придется делать после каждого обновления прошивки) и предложит выполнить первоначальную настройку, которая сводится к выбору способа автогенерации имени бэкапа (по умолчанию текущее время), а также выбору формата бэкапа. Обычный Clockworkmod-формат универсален и будет совместим с любым кастомным рекавери, однако если на смартфоне установлен именно ClockworkMod, то в опции Backup Mode лучше выбрать CWM Incremental. В этом случае каждая новая резервная копия будет содержать только отличия от предыдущей, из-за чего потеряется совместимость с TWRP, но удастся сохранить солидный кусок свободного места на карте памяти.
![Nandroid Manager позволяет вытащить из бэкапа практически любые данные](nandroid-manager1.jpg, nandroid-manager2.jpg)
![Online Nandroid Backup: делаем резервную копию прямо во время работы смартфона](online-nandroid1.jpg, online-nandroid2.jpg)
В прошивке AOKP есть масса скрытых настроек, активировать которые можно, установив бесплатное приложение AOKP.co.
TWRP Manager позволяет выполнять практически все операции TWRP Recovery прямо из Android: установка прошивок, вайп, бэкап и восстановление, перезагрузка в разных режимах.
Выводы
Сегодня процесс прошивки и кастомизации смартфона под управлением Android — это уже не тот зубодробительный квест, каким он был во времена первых версий Android. Как ты смог заметить, все делается очень просто, без чтения длинных мануалов и поиска совместимых прошивок. Но даже в том случае, если что-то пойдет не так, если ты окажешься столь невезучим, что запорешь не только установленный Android, но и консоль восстановления, boot-сектор все равно останется на месте и ты сможешь вернуть свой смартфон к жизни, подключив его к компу и воспользовавшись фирменными инструментами прошивки от производителя.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Несколько лет назад, когда я впервые познакомился с 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, а класс, который содержал данную подпрограмму находился в \com\htc\util\contacts\BuildUtils$Customization.java
Распаковка и анализ оригинального файла
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.
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 и смотрим код:
9. Страшно, не правда ли? Ничего же не понятно. Но, это дело поправимое. Создав несколько своих патчей и набив тем самым руку, вы легко сможете модифицировать код без сторонних средств. В нашем случае, в этом коде
происходит присваивание переменной v0 значение 1, то есть TRUE. Далее идут всякие проверки, и если телефон не китайский, то значение переменной изменяется:
10. Самый простой способ спасти отца русской демократии, это изменить код на следующий:
, то есть поменять значение переменной с 1 на 0. То есть что бы ни было, всегда бы возвращалось значение FALSE и в JD-GUI код выглядел бы как
11. Да, метод ,будет работать. Но мы же не ищем легких путей - это раз. Во-вторых не совсем красиво. Хочется кода что-то вроде
12. А как нам получить Dalvik код данного исходного кода? Для новичков мы сделаем небольшой трюк.
Создание Dalvik кода
1. Открываем Android SDK.
2. Создаем новый проект, и в наш единственный тестовый класс пишем следующий код
3. Компилируем наш проект и затем берем собранное приложение из рабочей области.
4. Кладем собранное приложение в папку, где мы с вами потрошили JAR файл.
5. Даем команду
8. Все, код для патчинга готов.
Накатывание патча
1. Dalvik код замусорен маркерами, указывающими строку кода в оригинальном исходном файле. Это нужно при выводе ошибок, если таковые имеются в вашей программе. Без указаний строк код также прекрасно работает.
2. Удаляем строки с нумерацией строк, копируем и заменяем метод (подпрограмму) в нашем \com\htc\util\contacts\BuildUtils$Customization.java файле.
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 доступ:
2. Спасибо что дочитали до этого пункта, осталось немного.
3. После перезагрузки ваш новый патченный код вступит в силу.
4. Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.
Эпилог
Да, кому-то показалось данная статья слишком специфичной, кому-то мало-понятной, а кому-то бесполезной. Я специально обошелся без углубленной детализации и иллюстраций как это все выглядит в живую и на практике. Во-первых, данный труд будет неблагодарный и только породить еще больше вопросов. Во-вторых, не хочу видеть армию пользователей на форумах, которые жалуются, что убили свой телефон.
К следующей статье я расскажу как делать Твики. Будет пример использования автоматической записи телефонных звонков родными средствами телефона. Спасибо за ваше внимание.
P.S. Если что-то не понятно или смущает, задавайте вопросы - всегда буду рад ответить и пояснить.
Покупаешь новый смартфон и ходишь радостный пока опять новый кастом не накатил. Он и работает шустро, и игрушки идут лучше, уж побыстрее стока, но тут прилетело OTA, ядро новое вышло, да и Magisk обновился уже — пора ставить апдейты и получать “бутлупы”. Да, от общего числа пользователей Android смартфонов доля тех, кто сидит на кастомах крайне мала. Однако, всё же людям приходят в голову странные мысли по типу: “А не прошить бы мне свой Xiaomi, что б летал как ракета”. По такому случаю статья, в которой рассказывается про кастомные Android прошивки от А до Я.
Кастомные прошивки и их классификация
Что же из себя представляет кастомная Android-прошивка? Это система, к созданию которой причастны сторонние разработчики, то есть любая неофициальная прошивка. В большинстве случаев отличительными чертами подобных прошивок является иная оболочка, модифицированное ядро системы, широкая кастомизация и много разных плюшек, которых нет в официальных Android прошивках, созданных компанией-производителем. Чаще всего такие прошивки работают быстрее официальных, но реже они работают стабильнее. Существует огромное множество кастомов, которые делятся на виды, изучением которых мы сейчас и займёмся.
Вот основые вариации Android-прошивок:
Официальная от производителя (стоковая)
Кастомная, собранная из исходников
А теперь про каждую поподробнее. Официальная прошивка от производителя установлена в смартфоне с завода: то есть вы покупаете телефон именно с ней. Её делал отдел компании-производителя, который отвечает за программное обеспечение своих устройств. Также, любая уважающая себя компания, предоставляет исходный код прошивки, которую они создали, те самые исходники. Далее по списку кастомная прошивка, собранная из исходников — та, которую собирали сторонние разработчики. Такая прошивка является модифицированной и может включать в себя всевозмножные улучшения и кастомизации, которых не было в официальной. Следующая у нас GSI-прошивка — отличается от двух предыдущих тем, что при её установке не затрагивается раздел Vendor, так как GSI-образ это и есть образ системы. Работают эти GSI прошивки куда медленнее и менее стабильно, чем собранные из исходников. Ну и последняя — порт прошивки с другого девайса. Это прошивка, полностью перенесённая с иного устройства и изменённая для работы на конкретном смартфоне. По большей части это самые багованные прошивки, так как система не просто не родная, она ещё и содрана с другого устройства. Но их используют: к примеру те же любители фирменных оболочек различных устройств. Существует огромное колличество портированных прошивок со смартфонов OnePlus с их оболочкой OxygenOS, которая многим приходится по душе.
Мы будем рассматривать именно те кастомы, которые собираются из исходного кода. На это есть ряд причин, а именно: такие прошивки работают быстрее остальных, они стабильнее и представляют из себя полноценную замену стоковой, так как собирались под конкретный девайс, а не имеют лишь образ System как GSI и не являются портированными. Естественно, не без учёта качества сборки. На данный момент кастомы имеют широкое распространение среди многих моделей различных брендов, также, само сообщество создателей кастомов постоянно растёт и развивается, поэтому найти стабильно работающую прошивку по свой смартфон не представляет особой трудности.
Существует классификация прошивок, показывающая, на основе какого исходного кода взята база для сборки:
AOSP — Android Open Source Project. Представляет из себя абсолютно голую систему Android, на которую в последующем "навешивают" оболочки, по типу One UI, MIUI, OxygenOS и так далее. Даже в сматфонах Google Pixel не AOSP, в них установлена собственная оболочка.
CAF — Code Aurora Forum. Проект Linux Foundation, который содержит программный код для прошивок смартфонов на базе процессоров Qualcomm. Прошивки, которые базируются на CAF-тегах могут быть не самыми стабильными, но за счёт последних версий драйверов они имеют ряд приемуществ: лучшая производительность, более высокая скорость интернет соединения, хорошая автономность и улучшенное качество звучание.
LineageOS — кастом, на котором базируются многие другие кастомы, вроде CRdroid, Resurrection Remix и им подобные. Изначально был CyanogenMod: именно он был на слуху, да и развивался постоянно. Позже переименовался в LineageOS. В какой-то момент в AOSP было внесено столько изменений разработчиками линейки, что её начали использовать как базу для других прошивок.
Зачем же нужны кастомные прошивки?
Простому пользователю — незачем. Если хочется поиздеваться над устройством, либо наоборот преобразить его с помощью новоиспечённого кастома на последней версии Android и перевернуть в нём всё, чтобы сделать так, как хочется — это ваше. Когда человек ставит кастом, он берёт ответственность за работоспособность девайса полностью на себя, и в случае, если вдруг что-то пойдёт не так, а вы не сможете починить свой смартфон, то, это уже будет ваше личное дело. Скорее всего ваш случай не попадёт под гарантийный, даже если сломалась аппаратная часть смартфона. Придётся как минимум заставлять СЦ проводить нормальную диагностику, чтобы исключить самую тупую причину поломки: кастом. Также, почти любую софтовую поломку во время прошивки можно устранить в домашних условиях, не прибегая к помощи работников сервисного центра. Так что если кто надумал шиться, знайте: кирпич это не так страшно. В любом случае в интернете есть огромное колличество гайдов "как и что в случае чего".
Рассматривая использование на повседневной основе кастомной прошивки, созданной хорошим сборщиком, можно ощутить высокую плавность и скорость работы пользовательского интерфеса в сравнении со стоковой прошивкой. Прирост производительности в играх и повышение автономности также обеспечены. Вполне возможно улучшение качества звучания, фото и видео съёмки смартфона. Если не из основного, то кастомы часто имеют последние патчи безопасности и обновления системы, которые повышают стабильность и скорость работы устройства. Также, в зависимости от прошивки появляются возможности кастомизации, которых не было в стоке.
Процесс установки прошивки и разделы накопителя
Итак, вот мы и подошли к самому главному: установка. Это универсальная инструкция для всех смартфонов, которая будет работать при установке большей части прошивок. Но, на некоторых устройствах могут быть свои особенности установки, которые нужно уточнять в источнике откуда берёте прошивку. Обращать внимание на нюансы действительно очень важно, так как если шить "как захотел", то в лучшем случае можно получить "бутлуп", а в худшем будет "кирпич". Все манипуляции должны производится на уже разблокированном загрузчике. Разблокировка осуществляется с помощью софта от производителя смартфона, либо командами Fastboot. За подробностями — в тему своего устройства.
При подготовке скачиваем всё, что необходимо для установки прошивки: нужное TWRP, последний Firmware (если имеется на ваш смартфон), сама прошивка, кастомное ядро (вдруг нужно), патчи и фиксы (при надобности), по желанию GAPPS (Google Apps), дешифратор (снятие шифрования Data) и Magisk (Root-права). После того, как всё скачалось, лучшим вариантом будет перекинуть все эти файлы на флешку, чтобы шиться с неё. Из всего выше перечисленного для установки прошивки нужно только TWRP и сама прошивка, но, чаще всего люди шьют и всё остальное, поэтому вот последовательность, которая включает в себя самую обычную установку прошивки.
Ставим TWRP на свой смартфон:
TWRP - модифицированная версия Recovery (режим восстановления), в котором мы и будем производить все манипуляции. Для этого достаточно установить драйвера для своего устройства на компьютер и прошить образ нужного TWRP в раздел "Recovery" (если не грузиться, то и в Boot) через специальную утилиту в зависимости от платформы процессора смартфона: MediaTek или Qualcomm (SPFlashTool или Minimal ADB and Fastboot). Выбирайте TWRP на вкус и цвет, главное чтобы работало. Если TWRP уже установлен, сразу начинаем со второго пункта.
Очистка разделов смартфона:
Основные разделы смартфона, которые видно в TWRP:
Dalvik / ART Cache — кэш виртуальных машин Dalvik / ART.
Cache — системный кэш.
Data — раздел с данными системы и всех установленных в ней программ.
System — сама система. Те же GSI-образы устанавливаются именно в этот раздел.
Vendor — бинарники, конфиги, библиотеки. В общем всё, что запихнул производитель в смартфон, для нормальной его работы.
Внутренняя память — она у вас на главной странице в проводнике. Созданные или скачанные вами файлы.
Micro SDCard — точка монтирования карты памяти (флеш-память).
USB OTG — точка монтирования флешки, либо харда, подключенных по OTG-кабелю.
Заходим в TWRP той комбинацией клавиш смартфона, которой заходят в режим Recovery и производим очистку смартфона, чтобы кастом шился на чистый накопитель. Для этого в TWRP ищём пункт связанный с очисткой и заходим в него. Там же мы наблюдаем разделы смартфона и галочки рядом с ними. Нам нужно поставить галки напротив разделов Dalvik / ART Cache, Cache, Data, System, Vendor (необязательно), Внутренняя память, но не ставить на Micro SDCard и USB OTG, которые указывают на SD-карту, либо OTG-накопитель, в зависимости от того, где у вас лежат файлы для прошивки. После мы просто проводим свайп для очистки разделов (вы потеряете все данные на смартфоне). Далее нам нужно отформатировать DATA-раздел. Делается это там же в меню очистки с введением подтверждения в виде слова "yes". После успешного форматирования DATA-раздела нам нужно сделать перезапуск в TWRP. Зачем? Это может быть необходимо, для правильного определения разделов самим TWRP во избежание ошибок при установке прошивки. Также, существует вариант OTA-обновления: установка прошивки как обновления уже существующей, без форматирования памяти.
Грузимся обратно в TWRP и приступаем к установке:
Выбираем накопитель на котором лежат необходимые файлы и ставим всё в такой последовательности:
Прошивка (Система, которую ставим)
Перезагрузка в TWRP (По причине, описанной выше)
Перезагрузка в TWRP
Необходимые патчи / фиксы
GAPPS (Google Services)
DFE (Отключение шифрования)
Magisk (Root права)
Перезагрузка в систему и дальнейшая её настройка на ваш вкус.
Составляющих в последовательности установки может быть и меньше. Как я уже сказал, достаточно в TWRP установить лишь прошивку и если ей ничего более не нужно, то она запустится и будет работать.
Проблемы при установке прошивки
Ошибки могут быть разные, но решаются по одному и тому же алгоритму. Если TWRP выдаёт ошибку, то:
Проверить какую прошивку вы ставите. Всякое бывает, можно и не свою скачать случайно.
Перечитать инструкцию если таковая есть, вдруг что-то пропустили.
Перекачать установочный zip с прошивкой (он может быть битый).
Если 1-2-3 не сработали, то проводим очистку разделов и форматируем Data.
Крайний случай: прошиваем стоковой прошивкой через фирменный прошивальщик.
Только при наличии программатора и умения с ним работать: шьём через него сток (может решить проблему, если не помог обычный прошивальщик)
Пробуем восстановить смартфон по индивидуальной для каждого инструкции "Восстановление из кирпича", которая ищется в теме своего устройства.
Если совсем никак, скорее всего проблема в железе. Поэтому остаётся только вариант сервисного центра.
Все проблемы, которые могут возникнуть в рабочей системе решаются установкой "Фикса от Васяна", сменой ядра, либо установкой другого кастома.
Если вы уже решили заняться этим делом, то ищите и пытайтесь пофиксить, а ещё лучше показать остальным как вы решили свою проблему, если решения до вас не было.
Выводы: нужно оно нам, или нет
Для начала придётся немного пострадать, а там уже опыт наберётся и можно будет шиться без гайдов и фиксить любую проблему самому. Получение удовольствия от использования своего смартфона станет не таким редким явлением. Захотели себе что-то особенное и лучше чем сток? Готовы уделять этому время? Форумы с прошивками вас ждут. "Кастом будет всегда лучше любого стока" — эта фраза будет иметь смысл только в том случае, если прошивка хорошо собрана, имеет ядро с различными оптимизациями и почищена от мусорных приложений. Тут дело уже не во вкусах, а в том, как на самом деле.
Иногда некоторые приложения на Android чем-то не устраивают пользователя. В качестве примера можно привести назойливую рекламу. А то бывает и так — всем хороша программа, да только перевод в ней или кривой, или вовсе отсутствует. Или, например, программа триальная, а получить полную версию возможности нет. Как же изменить ситуацию?
Введение
В этой статье мы поговорим о том, как разобрать пакет APK с приложением, рассмотрим его внутреннюю структуру, дизассемблируем и декомпилируем байт-код, а также попробуем внести в приложения несколько изменений, которые могут принести нам ту или иную выгоду.
Чтобы сделать все это самостоятельно, потребуются хотя бы начальные знания языка Java, на котором пишутся приложения для Android, и языка XML, который используется в Android повсеместно — от описания самого приложения и его прав доступа до хранения строк, которые будут выведены на экран. Также понадобится умение обращаться со специализированным консольным софтом.
Итак, что же представляет собой пакет APK, в котором распространяется абсолютно весь софт для Android?
Декомпиляция приложений
В статье мы работали только с дизассемблированным кодом приложения, однако если в большие приложения вносить более серьезные изменения, разобраться в коде smali будет гораздо сложнее. К счастью, мы можем декомпилировать код dex в Java-код, который будет хоть и не оригинальным и не компилируемым обратно, но гораздо более легким для чтения и понимания логики работы приложения. Чтобы сделать это, нам понадобятся два инструмента:
Использовать их следует так. Сначала запускаем dex2jar, указывая в качестве аргумента путь до apk-пакета:
В результате в текущем каталоге появится Java-пакет mail.jar, который уже можно открыть в jd-gui для просмотра Java-кода.
Устройство APK-пакетов и их получение
Пакет приложения Android, по сути, является обычным ZIP-файлом, для просмотра содержимого и распаковки которого никаких специальных инструментов не требуется. Достаточно иметь архиватор — 7zip для Windows или консольный unzip в Linux. Но это что касается обертки. А что внутри? Внутри же у нас в общем случае такая структура:
- META-INF/ — содержит цифровой сертификат приложения, удостоверяющий его создателя, и контрольные суммы файлов пакета;
- res/ — различные ресурсы, которые приложение использует в своей работе, например изображения, декларативное описание интерфейса, а также другие данные;
- AndroidManifest.xml — описание приложения. Сюда входит, например, список требуемых разрешений, требуемая версия Android и необходимое разрешение экрана;
- classes.dex — компилированный байт-код приложения для виртуальной машины Dalvik;
- resources.arsc — тоже ресурсы, но другого рода — в частности, строки (да-да, этот файл можно использовать для русификации!).
Перечисленные файлы и каталоги есть если не во всех, то, пожалуй, в абсолютном большинстве APK. Однако стоит упомянуть еще несколько не столь распространенных файлов/каталогов:
- assets — аналог ресурсов. Основное отличие — для доступа к ресурсу необходимо знать его идентификатор, список asset’ов же можно получать динамически, используя метод AssetManager.list() в коде приложения;
- lib — нативные Linux-библиотеки, написанные с помощью NDK (Native Development Kit).
Этот каталог используют производители игр, помещая туда движок игры, написанный на C/C++, а также создатели высокопроизводительных приложений (например, Google Chrome). С устройством разобрались. Но как же получить сам файл пакета интересующего приложения? Поскольку без рута с устройства забрать файлы APK не представляется возможным (они лежат в каталоге /data/app), а рутить не всегда целесообразно, имеется как минимум три способа получить файл приложения на компьютер:
- расширение APK Downloader для Chrome;
- приложение Real APK Leecher;
- различные файлообменники и варезники.
Какой из них использовать — дело вкуса; мы предпочитаем использовать отдельные приложения, поэтому опишем использование Real APK Leecher, тем более что написан он на Java и, соответственно, работать будет хоть в винде, хоть в никсах.
Настройка Real APK Leecher
Другие статьи в выпуске:
Просмотр и модификация
Допустим, ты нашел интересующий тебя пакет, скачал, распаковал… и при попытке просмотра какого-нибудь XML-файла с удивлением обнаружил, что файл не текстовый. Чем же его декомпилировать и как вообще работать с пакетами? Неужели необходимо ставить SDK? Нет, SDK ставить вовсе не обязательно. На самом деле для всех шагов по распаковке, модификации и упаковке пакетов APK нужны следующие инструменты:
Использовать все эти инструменты можно и по отдельности, но это неудобно, поэтому лучше воспользоваться более высокоуровневым софтом, построенным на их основе. Если ты работаешь в Linux или Mac OS X, то тут есть инструмент под названием apktool. Он позволяет распаковывать ресурсы в оригинальный вид (в том числе бинарные XML- и arsc-файлы), пересобирать пакет с измененными ресурсами, но не умеет подписывать пакеты, так что запускать утилиту signer придется вручную. Несмотря на то что утилита написана на Java, ее установка достаточно нестандартна. Сначала следует получить сам jar-файл:
Далее нам понадобится скрипт-обвязка для запуска apktool (он, кстати, доступен и для Windows), включающий в себя еще и утилиту aapt, которая понадобится для запаковки пакета:
Далее просто сваливаем содержимое обоих архивов в каталог ~/bin и добавляем его в $PATH:
Если же ты работаешь в Windows, то для нее есть превосходный инструмент под названиемVirtuous Ten Studio, который также аккумулирует в себе все эти инструменты (включая сам apktool), но вместо CLI-интерфейса предоставляет пользователю интуитивно понятный графический интерфейс, с помощью которого можно выполнять операции по распаковке, дизассемблированию и декомпиляции в несколько кликов. Инструмент этот Donation-ware, то есть иногда появляются окошки с предложением получить лицензию, но это, в конце концов, можно и потерпеть. Описывать его не имеет никакого смысла, потому что разобраться в интерфейсе можно за несколько минут. А вот apktool, вследствие его консольной природы, следует обсудить подробнее.
Импорт APK в Virtuous Ten Studio
Рассмотрим опции apktool. Если вкратце, то имеются три основные команды: d (decode), b (build) и if (install framework). Если с первыми двумя командами все понятно, то что делает третья, условный оператор? Она распаковывает указанный UI-фреймворк, который необходим в тех случаях, когда ты препарируешь какой-либо системный пакет.
Рассмотрим наиболее интересные опции первой команды:
- -s — не дизассемблировать файлы dex;
- -r — не распаковывать ресурсы;
- -b — не вставлять отладочную информацию в результаты дизассемблирования файла dex;
- --frame-path — использовать указанный UI-фреймворк вместо встроенного в apktool. Теперь рассмотрим пару опций для команды b:
- -f — форсированная сборка без проверки изменений;
- -a — указываем путь к aapt (средство для сборки APK-архива), если ты по какой-то причине хочешь использовать его из другого источника.
Пользоваться apktool очень просто, для этого достаточно указать одну из команд и путь до APK, например:
После этого в каталоге mail появятся все извлеченные и дизассемблированные файлы пакета.
Препарирование. Отключаем рекламу
Теория — это, конечно, хорошо, но зачем она нужна, если мы не знаем, что делать с распакованным пакетом? Попробуем применить теорию с пользой для себя, а именно модифицируем какую-нибудь софтину так, чтобы она не показывала нам рекламу. Для примера пусть это будет Virtual Torch — виртуальный факел. Для нас эта софтина подойдет идеально, потому что она под завязку набита раздражающей рекламой и к тому же достаточно проста, чтобы не потеряться в дебрях кода.
Поиск кода рекламы в jd-gui
Итак, с помощью одного из приведенных способов скачай приложение из маркета. Если ты решил использовать Virtuous Ten Studio, просто открой APK-файл в приложении и распакуй его, для чего создай проект (File -> New project), затем в контекстном меню проекта выбери Import File. Если же твой выбор пал на apktool, то достаточно выполнить одну команду:
После этого в каталоге com.kauf.particle.virtualtorch появится файловое дерево, похожее на описанное в предыдущем разделе, но с дополнительным каталогом smali вместо dex-файлов и файлом apktool.yml. Первый содержит дизассемблированный код исполняемого dex-файла приложения, второй — служебную информацию, необходимую apktool для сборки пакета обратно.
Первое место, куда мы должны заглянуть, — это, конечно же, AndroidManifest.xml. И здесь мы сразу встречаем следующую строку:
Нетрудно догадаться, что она отвечает за предоставление приложению полномочий на использование интернет-соединения. По сути, если мы хотим просто избавиться от рекламы, нам, скорее всего, достаточно будет запретить приложению интернет. Попытаемся это сделать. Удаляем указанную строку и пробуем собрать софтину с помощью apktool:
В каталоге com.kauf.particle.virtualtorch/build/ появится результирующий APK-файл. Однако установить его не получится, так как он не имеет цифровой подписи и контрольных сумм файлов (в нем просто нет каталога META-INF/). Мы должны подписать пакет с помощью утилиты apk-signer. Запустили. Интерфейс состоит из двух вкладок — на первой (Key Generator) создаем ключи, на второй (APK Signer) подписываем. Чтобы создать наш приватный ключ, заполняем следующие поля:
- Target File — выходной файл хранилища ключей; в нем обычно хранится одна пара ключей;
- Password и Confirm — пароль для хранилища;
- Alias — имя ключа в хранилище;
- Alias password и Confirm — пароль секретного ключа;
- Validity — срок действия (в годах). Значение по умолчанию оптимально.
Остальные поля, в общем-то, необязательны — но необходимо заполнить хотя бы одно.
Создание ключа в apk-signer
WARNING
Чтобы подписать приложение с помощью apk-signer, ты должен установить Android SDK и указать полный путь до него в настройках приложения.
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Теперь этим ключом можно подписать APK. На вкладке APK Signer выбираем только что сгенерированный файл, вводим пароль, алиас ключа и пароль к нему, затем находим файл APK и смело жмем кнопку «Sign». Если все пройдет нормально, пакет будет подписан.
Так как мы подписали пакет нашим собственным ключом, он будет конфликтовать с оригинальным приложением, а это значит, что при попытке обновить софтину через маркет мы получим ошибку.
Цифровая подпись необходима только стороннему софту, поэтому если ты занимаешься модификацией системных приложений, которые устанавливаются копированием в каталог /system/app/, то подписывать их не нужно.
Обычно авторы приложений создают специальные классы для вывода рекламы и вызывают методы этих классов во время запуска приложения или одной из его «активностей» (упрощенно говоря, экранов приложения). Попробуем найти эти классы. Идем в каталог smali, далее com (в org лежит только открытая графическая библиотека cocos2d), далее kauf (именно туда, потому что это имя разработчика и там лежит весь его код) — и вот он, каталог marketing. Внутри находим кучу файлов с расширением smali. Это классы, и наиболее примечателен из них класс Ad.smali, по названию которого нетрудно догадаться, что именно он выводит рекламу.
Мы могли бы изменить логику его работы, но гораздо проще будет тупо убрать вызовы любых его методов из самого приложения. Поэтому выходим из каталога marketing и идем в соседний каталог particle, а затем в virtualtorch. Особого внимания здесь заслуживает файл MainActivity.smali. Это стандартный для Android класс, который создается Android SDK и устанавливается в качестве точки входа в приложение (аналог функции main в Си). Открываем файл на редактирование.
Внутри находится код smali (местный ассемблер). Он довольно запутанный и трудный для чтения в силу своей низкоуровневой природы, поэтому мы не будем его изучать, а просто найдем все упоминания класса Ad в коде и закомментируем их. Вбиваем строку «Ad» в поиске и попадаем на строку 25:
Здесь происходит создание объекта. Комментируем. Продолжаем поиск и находим в строках 433, 435, 466, 468, 738, 740, 800 и 802 обращения к методам класса Ad. Комментируем. Вроде все. Сохраняем. Теперь пакет необходимо собрать обратно и проверить его работоспособность и наличие рекламы. Для чистоты эксперимента возвращаем удаленную из AndroidManifest.xml строку, собираем пакет, подписываем и устанавливаем.
Наш подопытный кролик. Видна реклама Он же, но уже без рекламы
Оп-па! Реклама пропала только во время работы приложения, но осталась в главном меню, которое мы видим, когда запускаем софтину. Так, подождите, но ведь точка входа — это класс MainActivity, а реклама пропала во время работы приложения, но осталась в главном меню, значит, точка входа другая? Чтобы выявить истинную точку входа, вновь открываем файл AndroidManifest.xml. И да, в нем есть следующие строки:
Они говорят нам (и, что важнее, андроиду) о том, что активность с именем Start должна быть запущена в ответ на генерацию интента (события) android.intent.action.MAIN из категории android.intent.category.LAUNCHER. Это событие генерируется при тапе на иконку приложения в ланчере, поэтому оно и определяет точку входа, а именно класс Start. Скорее всего, программист сначала написал приложение без главного меню, точкой входа в которое был стандартный класс MainActivity, а затем добавил новое окно (активность), содержащее меню и описанное в классе Start, и вручную сделал его точкой входа.
Открываем файл Start.smali и вновь ищем строку «Ad», находим в строках 153 и 155 упоминание класса FirstAd. Он тоже есть в исходниках и, судя по названию, как раз и отвечает за показ объявлений на главном экране. Смотрим дальше, идет создание экземпляра класса FirstAd и интента, по контексту имеющего отношение к этому экземпляру, а дальше метка cond_10, условный переход на которую осуществляется аккурат перед созданием экземпляра класса:
Скорее всего, программа каким-то случайном образом вычисляет, нужно ли показывать рекламу на главном экране, и, если нет, перескакивает сразу на cond_10. Ок, упростим ей задачу и заменим условный переход на безусловный:
Больше упоминаний FirstAd в коде нет, поэтому закрываем файл и вновь собираем наш виртуальный факел с помощью apktool. Копируем на смартфон, устанавливаем, запускаем. Вуаля, вся реклама исчезла, с чем нас всех и поздравляем.
- Перевод приложений Android;
- пример снятия триала с приложения.
Итоги
Эта статья лишь краткое введение в методы вскрытия и модификации Android-приложений. За кадром остались многие вопросы, такие как снятие защиты, разбор обфусцированного кода, перевод и замена ресурсов приложения, а также модификация приложений, написанных с использованием Android NDK. Однако, имея базовые знания, разобраться во всем этом — лишь вопрос времени.
Читайте также: