Как скрыть xposed от других приложений
В 2012 году пользователь с ником rovo89 на комьюнити XDA опубликовал исходные коды и готовый к использованию фреймворк, упрощающий кастомизацию прошивок, с подробной инструкцией и примерами, предложив альтернативу традицоинному, на тот момент, способу (деодексирование→ дизассемблирование → декомпиляция → рекомпиляция → тестирование → загрузка патчей в телефон): Часть 1, Часть 2, Часть 3, Часть 4
Он предложил использовать отдельные модули, которые можно изменять фактически налету, не вмешиваясь в исходный код прошивки или отдельных ее компонентов. Но авторитетные разработчики хором ответили: "Неа… никому это не нужно"
Rovo не забросил свое детище, а продолжил развитие. Когда в 2013-ом году вышла версия KitKat, все то же сообщество именитых девелоперов ответило: "Неа, это слишком опасно… хотя. "
Тем временем Google принял решение выпускать новую версию операционной системы ежегодно. Разумеется, стало накладно кастомизировать прошивки: не успеваешь сделать одну, как появляется новая версия ОС. Так в 2014-ом выходит версия Lollipop и разработчики наконец обращают внимание на фреймфорк с мыслями: "Может все же стоит посмотреть что это такое? Выглядит многообещающим".
В 2015-ом году вышла очередная версия (Marshmallow) и большая часть сообщества, в итоге, признала разработку весьма стоящей, на порядок сокращающей время разработки кастомизаций стоковых прошивок в виде установки отдельных модулей, расширяющих функционал. "Ничего себе, это же совсем безопасно и есть библиотека готовых полезных модулей!" — воскликнули они.
Сейчас конец февраля 2017-го. Xposed под Nougat все еще не доступен, а толпы страждущих разработчиков и пользователей то и дело открывают темы под тип "Xposed не работает! Он мне нужен! Rovo, пожалуйста!"
Сегодня я расскажу об Xposed Framework.
Отказ от ответственности
Отступление
Больше трех лет назад я начал писать цикл статей про модификацию прошивок для Android. В данный момент актуальность данных статей весьма сомнительна: процесс очень трудоемок, требует много времени и инструментов, а малейшая ошибка может обернуться значительными проблемами вплоть до полной перепрошивки телефона.
Я прождал около двух лет в надежде, что кто-то все же опишет на Хабре что такое Xposed Framework и как он может упросить процесс кастомизации приложений, но подозреваю, что мало кто знаком с этим чудным творением. Для своих нужд я написал несколько десятков модулей, некоторые даже публиковал в общем репозитарии, который на данный момент содержит более 1000 готовых к эксплуатации разработок. Каждый модуль — это может быть не одна единственная кастомизация, а целый набор функций с интерфейсом настроек или дополнительного функционала. Яркий пример тому GravityBox или Sense ToolBox.
Я не буду описывать процесс установки и получение root прав, а хочу описать что из себя представляет фреймфорк и как написать простейший модуль.
Установка
Если раньше для установки сторонней прошивки требовалось производить разблокировку загрузчика телефона, то для использования Xposed пользователю необходимо всего лишь иметь root права на телефоне. Даже сейчас получение этих прав на большинстве девайсов не представляет больших сложностей: вы скачиваете приложение, а оно само делает все нужные манипуляции и через несколько минут вы становитесь обладателем телефона с уровнем прав «БОГ».
Принцип работы «на пальцах»
В системе Android есть процесс под название «Zygote». Это и есть основная исполнительная система. Любой процесс запускается как его копия. Zygote запускается через /init.rc как только загружается основное ядро системы. Запуск приложений осуществляется через скрипт /system/bin/app_process, который подгружает необходимые классы и запускает инициализацию приложения через задекларированные методы.
Именно в этом месте на сцену выходит Xposed. При установке фреймворка модифицированный app_process копируется в /system/bin. Суть модификации в том, что в переменную среду добавляется дополнительная jar библиотека, которая может исполнять специальные методы при определенных условиях и случаях. Например, мы можем вмешаться сразу, как только создается виртуальная машина Dalvik или даже перед тем как будет вызван основной метод Zygote. Являясь частью процесса Zygote, мы можем вмешиваться в работу любых методов, даже синтетических и производить любые действия в их контексте.
Практическая ценность Xposed
Предположим, необходимо изменить какой-то метод, и, например, вместо булева значения TRUE вернуть FALSE. Вместо трудоемкого и затратного традиционного метода (разбираем-собираем-тестируем приложение) вы можете «перехватить» этот метод класса и «вживить» свой Java код, который произведет необходимую операцию (изменит, в данном примере, значение) и вернет нужный нам результат. При этом, с Xposed можно: модифицировать или просто посмотреть какие данные передаются в метод, либо после исполнения метода узнать результат обработки данных и в зависимости от требований изменить их или воспользоваться ими.
Бывают случаи, когда вы не хотите, чтобы тот или иной метод вообще срабатывал, либо хотите полностью поменять логику и алгоритм. Xposed позволяет полностью заменить метод, либо не дать ему вообще сработать.
В случае с ресурсами стало вообще все просто. Вы загружаете в свой модуль свои ресурсы, хоть графические элементы, хоть цельные xml файлы и при загрузке модуля в память можете заменять их при инициализации.
А теперь главное — зачастую не приходится даже изменять работу модуля (или производить минимальные доработки) с выходом новой версии прошивки/приложения! Это логично, ведь названия методов, классов и переменных, как правило, остаются прежними.
Не правда ли, удобно?
Создание модуля
Сам модуль — это обычный apk файл, созданный в среде разработки. В нем не обязательно должно присутствовать какое-то Activity либо графические ресурсы. По сути там может быть только один файл с инструкцией, разумеется помимо обязательных файлов, и модуль может работать. Для настройки нам надо сделать три вещи:
Manifest.xml
При установке любого приложения Xposed проверяет наличие определенных заголовков в Manifest.xml. Если есть три нужные строки, то фреймворк сохраняет информацию о приложении в своих настройках и далее вы можете активировать установленный модуль (здесь и далее будут использоваться примеры кода разных модулей, в том числе и для из известных приложений).
С первой строкой все понятно.
Во второй строке указываем минимальную версию фреймворка для работы с модулем. Каждая версия заточена под определенный релиз Android и чтобы модуль случайно не был запущен на платформе, для которой он не предназначен, указывается версия.
Третья строка определяет как будет идентифицироваться ваше приложение в списке доступных или установленных модулей на вашем телефоне.
/assets/xposed_init
В корне вашего приложения необходимо создать папку assets и положить в него файл с названием xposed_init. Внутри этого файла вы просто пишите в каком Java классе описана работа вашего модуля. Я привык называть класс как XMain. В моем случае в файле присутствует строка
Java class
Сам класс должен содержать один из трех методов для работы с фреймворком. Не обязательно указывать все, можно лишь указать те, с которыми вы планируете делать модификацию приложения или приложений. Я по привычке указываю все как шаблон.
Метод initZygote исполняется тогда, когда ваш модуль загружается в память.
Весьма удобен, если в вашем приложении имеется Activity с настройками вашего модуля. Как правило, данные вашего приложения сохраняются в файл
/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME_preferences.xml . Во время загрузки вы можете единожды получить дескриптор и во время работы просто считывать с него ваши настройки. Также можно предопределить любые переменные, сделать проверки. По сути это аналог метода-конструктора.
Метод handleLoadPackage исполняется в тот момент, когда Dalvik загружает исходный код любого! приложения при запуске. Это очень важный момент. Если у вас в телефоне 10 различных модулей, то через этот метод исходники запускаемого приложения «прогонятся» во всех 10-ти случаях. Для фильтрации используется обычная проверка по названию пакета. Разумеется, если вы хотите изменить работу нескольких приложений, то ставите столько проверок сколько вам нужно.
Метод handleInitPackageResources нужен вам тогда, когда вы хотите подменить ресурсы приложения во время их загрузки в память. Здесь тоже самое как и с handleLoadPackage — вы фильтруете по названию приложения.
Важно указать наименование приложения так, как оно указано в манифесте. На этом настройка модуля в среде разработки закончена и можем приступить непосредственно к программированию.
Примеры кода
Основной код, если вы конечно не решили всего лишь изменить цвета или шрифты какого-то приложения, происходят в handleLoadPackage. Для этого мы предварительно изучаем исходный код интересующего приложения, придумываем как модифицировать код и описываем нашу логику.
Основная логика работает через findAndHookMethod метод, реже через findAndHookConstructor и findClass. Все основные методы можно подглядеть в классе XposedHelpers.
Выглядит это примерно так:
В первую очередь нам надо обернуть наши «хуки» в try/catch, так как если в вашем коде будет ошибка, без обертки основное приложение может завершить работу c ошибкой, а полный трейс может попасть разработчику, который станет в курсе, что на его приложение наложили модуль. При обертке весь трейс можно вывести в лог Xposed и понять где у нас произошла ошибка и почему.
В findAndHookMethod первый параметр — это название класса, вторая — ссылка на загрузчик класса, третья — название нужного нам метода, далее идет перечисление в виде строк какие переменные передаются в метод и в конце наш callback метод.
Вот пример как можно заполучить контекст класса и воспользоваться им
или если необходимо изменить передаваемые переменные в метод, то сделать это можно через
Помимо XC_MethodHook можно использовать XC_MethodReplacement. Название говорит само за себя. Мы полностью заменяем какой-то метод нашим собственным. Вот типичный пример когда мне захотелось избавиться от всплывающего уведомления, когда я подключаю телефон по USB к ноутбуку
В данном void методе вызывалось уведомление. Я его просто заменил и забыл что мне когда-то это мешало.
Были случаи и посложней. Я своими модулями исправлял ошибки в системных приложениях. Ждать, когда производитель исправит баг в новом ОТА приложении меня не особо прельщало, поэтому я исправлял сам.
Вот так вот я разрешал всем приложениям писать информацию на SD карточку, когда этот функционал урезали в целях безопасности на KitKat.
Доступ к переменным и методам класса осуществляется через класс XposedHelpers. Например:
Если объект является доступным импортируемым классом, то можно полученный объект сразу привести к нужному типу
и облегчить дальнейший код. Если же объект является каким-то типом внутреннего класса, который нам не доступен для импорта, в дальнейшем использование его методов и свойств также доступно через XposedHelpers.
Резюмируя вышесказанное: мы можем изменять статические и финальные переменные любого класса, в любое время и в любом месте. Проверять переменные передаваемые в методы, изменять их до выполнения, изменять результат отдельных методов, либо полностью замещать их своим кодом.
В большинстве случаев достаточно отловить нужный метод и модифицировать либо изменить его логику можно сразу, как только приложение запускается. Но существует известная проблема с лимитом количества методов в одном DEX файле, поэтому многие громоздкие приложения имеют по 3-5 дополнительных DEX файла. Здесь скрывается подводный камень. Обойти его довольно таки просто:
Что касается обфусцированных приложений, на первый взгляд нужно переписывать модуль при каждом новом релизе приложения. Выход из этого положения всегда есть, но это отдельная тема. Основной принцип — это найти класс, который не обфусцируется и бэктрейсом определить имена классов и методов.
Заключение
Я привел основные трюки и решения задач программирования, с которыми столкнулся за все время разработки различных модулей. Не вижу смысла разбирать каждый случай в деталях, так как опытным программистам достаточно воспользоваться руководствами от автора здесь и здесь.
На этом я планирую закончить цикл статей про модификацию прошивок, но тема практического применения Xposed, надеюсь, не закрыта. Есть в планах большая статья о том, как я работал водителем Uber и разработал Xposed модуль, который давал мне расширенную информацию как о предстоящей поездке, так и во время выполнения заказа, что, к моему удивлению, не предусмотрено в стандартном приложении. Получил весьма и весьма интересный опыт и сделал выводы: как о качестве самой архитектуры Uber, так и о том, какая информацию передается через приложение о пользователях и как, возможно, компания планирует монетизировать свой сервис и полученные данные в будущем.
Обычно вы можете снова установить ПЗУ или прошивку, чтобы заставить устройство работать и решить проблему с загрузочным циклом, но вот более простой способ использовать режим восстановления, который даже сохраняет ваши модули Xposed, просто отключив их, что исправляет загрузочный цикл и позволяет вам чтобы снова включить хорошие плагины.
Если вы играете с Xposed framework и его модулями, очевидно, что у вас уже есть TWRP или любое другое настраиваемое восстановление, вызывающее снимки на вашем устройстве, так как без этого нет больших возможностей получить root-доступ и установить Xposed. Мы не говорим, что это невозможно с кастомным восстановлением, но для простоты TWRP всегда присутствует там, где есть Xposed framework.
Что ж, в любом случае для этого вам нужно восстановление TWRP, поскольку он предоставляет вам файловый менеджер в режиме восстановления, что очень полезно для нас при устранении причины загрузки из-за несовместимых модулей Xposed. Также подойдет любое другое пользовательское восстановление с файловым менеджером, хотя ниже мы говорим только о TWRP.
Необходимый: Ну, сначала вам нужно установить восстановление TWRP. Если нет, то сначала установите TWRP.
Шаг 1: Теперь перезагрузите устройство в режиме восстановления, чтобы перейти к восстановлению TWRP. Оказавшись там, нажмите на расширенное меню в TWRP, а затем на Диспетчер файлов.
Шаг 2: Перейдите в эту папку: /data/data/de.robv.android. xposed.installer / conf /
Шаг 3: У вас будет файл с именем модули. список здесь. Нажмите на этот файл, а затем нажмите «Удалить», чтобы удалить этот файл с устройства.
Шаг 4: Xposed отслеживает все включенные модули в этом файле. После удаления файла все модули будут отключены после перезагрузки, и устройство перезагрузится нормально. Исправлен бутлуп, ура!
Шаг 5: Теперь перейдите на домашний экран TWRP и нажмите «Перезагрузка»> «Система», чтобы перезагрузить устройство. Вот и все.
Как только ваше устройство запустится нормально, откройте свои приложения Xposed и включите модули, которые вы хотите использовать, стараясь не включать несовместимый модуль снова. Никаких модулей обратно устанавливать не нужно, они доступны, только отключены. Очевидно, что все ваши приложения и данные тоже не повреждены.
Получайте удовольствие от Xposed и поделитесь этим советом с друзьями в социальных сетях.
Фанаты различных мобильных операционных систем частенько устраивают «стычки» на форумах, пытаясь доказать, что их выбор — самый лучший. Android — операционную систему от Google — часто обвиняли в плохой оптимизации под железо, «мусор» в магазине приложений и «прожорливости» по отношению к ресурсам аккумулятора — но никто никогда не оспаривал статус Android как свободной для модификаций и открытой для разработчиков операционной системы.
За всё время её существования сообщество сгенерировало огромную массу различных модификаций — от простого модифицированного SystemUI до полноценного проекта по созданию идеальной прошивки. Но самым известным продуктом можно назвать Xposed Framework — действительно необычную разработку под Android.
С момента своего «зарождения» ещё во времена, когда Android украшал лишь блёклый Holo, а Root можно было получить одним кликом, прошло уже много времени. Xposed встретил на своём пути немало препятствий: обновления Android, смену виртуальной машины, повышение общего уровня защиты ОС — но это не смогло сломить проект на его пути и не мешает ему до сих пор.
Принцип работы
Перед тем, как установить и использовать этот замечательный продукт, стоит понять принцип работы самого Xposed Framework и понять главное: он взаимодействует с системой на очень глубоком уровне, и его использование без должных знаний может нанести вред вашему устройству.
В операционной системе Android существует процесс под названием «Зигота» (англ. «Zygote») — если погуглить, что это такое и разобраться с кучей непонятных научных терминов, то можно предположить, что этот процесс постоянно порождает себе подобных — так и есть. «Zygote» — это своеобразное сердце виртуальной машины Android, по подобию которого создаются другие процессы в нашей любимой операционной системе, поэтому «зигота» начинает своё существование ещё во время загрузки устройства. Отвечает за это скрипт "/init.rc".
Каждый новый процесс создаётся по подобию «зиготы» и приводятся в действие благодаря «system/app_process», с помощью которого запускаются все методы и классы, предусмотренные разработчиком. И здесь в игру вступает Xposed: он заменяет стоковый файл «app_process» на свой собственный модифицированный. Здесь дополнительно подключается ещё один jar-файл, который подсоединяется к classpath, и вызывает некоторые методы или классы. И ещё до метода «main» «зиготы», что, говоря простым языком, является отправной точкой процесса, мы имеем доступ ко всему содержимому процесса.
Возможности, предоставляемые Xposed, можно получить с помощью набора XposedBridge API, который находится в открытом доступе на GitHub. К API прилагаются весьма подробные гайды, которые помогут разобраться с основными методами и классами.
Сам Xposed не несёт никакой дополнительной функции кроме своей основной — обеспечения доступа к app_process. Но так называемые модули, которые были созданы с использованием XposedBridge, могут выполнять самые разнообразные действия. Например, смена цвета часов на информационной панели. Или обход защиты банковского приложения — всё зависит от ваших пожеланий. Сегодня вы научитесь устанавливать Xposed Framework и любые интересующие вас дополнительные модули.
Могут ли люди использовать чувствительные к безопасности приложения на рутированном устройстве? Ответ да, все что вам нужно это скрыть корень.
Стоимость рутирования Android заключается в том, что вы теряете доступ к определенным приложениям, таким как платежные, мобильные кошельки, банковские и корпоративные приложения безопасности. После обнаружения вашего устройства рутируются, они больше не будут работать, чтобы защитить ваши финансовые конфиденциальные данные. В этом уроке мы расскажем вам несколько способов скрыть root для дальнейшего использования этих приложений.
Часть 1 : Как скрыть root-доступ с помощью Magisk Manager
Magisk в настоящее время является лучшей альтернативой SuperSU, созданной XDA Developer. Подобно SuperSU, Magisk может предоставлять или запрещать права доступа root для определенных приложений. Более того, он способен скрывать root и заставлять некоторые приложения полагать, что он находится на устройстве без рута. Вы также можете узнать если ваш телефон Android рутирован.
Шаг 1 : Запустите SuperSU, перейдите на вкладку «Настройки» и коснитесь Full Unroot. При появлении запроса нажмите Да. Когда вас спросят, хотите ли вы восстановить стандартный образ для восстановления, выберите «Нет». После перезагрузки устройства также удалите Xposted Framework, если он у вас есть. Убедитесь, что удалили другие вредоносные программы и отключили блокировку рекламы.
Шаг 2 Затем установите Magisk на свое устройство после того, как оно вернется в исходное состояние. Затем откройте приложение Magisk Manager и перейдите на экран настроек. Переключайтесь на Magisk Hide, BusyBox и Systemless хосты. Перейдите в раздел «Статус» и нажмите «Проверка SafetyNet» внизу экрана, после чего вы увидите, что SafetyNet пройдено.
Шаг 3 : Откройте приложение «Настройки» на панели приложений и перейдите в «Приложения»> «Магазин Google Play», нажмите «Принудительная остановка», нажмите «Хранилище» и нажмите «Очистить данные». Теперь откройте свой Play Store, перейдите в Настройки, вы должны увидеть Сертифицировано в разделе Сертификация устройства. Это означает, что вы успешно скрываете root на своем устройстве.
Часть 2 : Как скрыть root-доступ с приложением Root Cloak
Root Cloak использует различные методы, чтобы обмануть приложения или предотвратить их обнаружение того факта, что ваше устройство является root, поэтому это еще один способ скрыть root на мобильных устройствах. Согласно тестированию, Root Cloak работает с широким спектром приложений в Play Store, таких как AprivaPay.
Шаг 1 : Получите ваше рутованное устройство онлайн, откройте мобильный браузер и загрузите Cydia Substrate с официального сайта. Сейчас он недоступен в магазине Play. Если ваше устройство работает под управлением Android 4.4 или более поздней версии, загрузите SELinux Mode Changer и установите для него значение Permissive.
Шаг 2 Затем откройте свой Play Store, найдите и установите Root Cloak на вашем Android-устройстве. После этого перезапустите ваше корневое устройство и затем запустите приложение Root Cloak на главном экране.
Шаг 3 : Теперь выберите приложения, для которых вы хотите скрыть статус root в списке. Если целевого приложения нет в списке, коснитесь значка «Плюс» в правом верхнем углу и добавьте его. Затем вы можете использовать любое приложение на своем телефоне Android.
Корневой плащ не будет выкорчевывать ваше устройство; он просто обманывает приложения и не позволяет некоторым приложениям определять корневой статус вашего устройства.
Часть 3 : Как скрыть root-доступ с помощью приложения Hide My Root
Hide My Root - это простой способ контролировать, какие приложения на вашем устройстве определяют статус root и не позволяют другим людям получать такую информацию. И эта бесплатная программа доступна в магазине Google Play.
Шаг 1 : Включите рутированный смартфон или планшет, откройте Google Play Store, найдите приложение Hide My Root и установите его на свое устройство. Помните, что для загрузки приложения из Play Store необходимо подключение к Интернету. При появлении запроса нажмите «Принять» во всплывающем диалоговом окне.
Шаг 2 Затем откройте приложение «Скрыть мой корень» на главном экране. При первом открытии приложения нажмите «Принять», чтобы предоставить права доступа root.
Шаг 3 : Существует несколько способов скрыть root. Если вы хотите скрыть свой корневой статус для всех приложений, нажмите «Скрыть двоичный файл su» в главном интерфейсе, и вам необходимо предоставить доступ суперпользователя для его завершения. А опция Uninstall SU App может временно удалить привилегию суперпользователя. Вы можете нажать Переустановить приложение SU, чтобы вернуть его в любое время.
Шаг 4 : После скрытия root вы можете использовать приложения, которые недоступны в статусе root.
Часть 4 : Как скрыть root-доступ с помощью SuperSU
SUHide - это новая функция, выпущенная разработчиком SuperSU. По умолчанию SuperSU не имеет возможности скрывать root. Но теперь разработчик добавляет эту функцию для корневых пользователей. И SUHide lite это версия GUI ..
Есть некоторые предпосылки для использования SUHide-lit, чтобы скрыть статус root:
1. Во-первых, убедитесь, что на вашем устройстве есть SuperSU в режиме SBIN.
2. Ваше устройство должно работать под управлением Android Marshmallow или Nougat.
Шаг 1 : Загрузите ваше устройство в TWRP, затем выключите рутированный телефон и оставьте его в состоянии на несколько секунд.
Затем снова включите устройство, нажимая кнопки увеличения громкости + уменьшения громкости + питания, пока не войдете в режим быстрой загрузки.
Шаг 2 : Выберите Install в меню, чтобы начать перепрошивку файла конфигурации, затем вам будет представлено дерево папок внутреннего хранилища. Когда это будет сделано, вы попадете к установщику. Выберите Systemless SBIN в качестве метода установки и пусть SuperSU определит другие варианты. Затем перейдите в zip-папку SuperSU и прошейте ее.
Шаг 3 : Перезагрузите устройство, выключите и загрузитесь в TWRP, нажмите «Установить», перейдите к zH-файлу SUHide и прошейте его в режиме SBIN. Теперь откройте SUHide-lite, перейдите на вкладку «Приложения» и измените отметку рядом с каждым желаемым приложением, чтобы скрыть корневой статус.
Часть 5 : Часто задаваемые вопросы о скрытии корневого доступа
1. Что значит скрыть ваш root-доступ?
Если некоторые приложения не могут работать на телефоне с ОС Android, вам необходимо скрыть root от своего iPhone для использования этого приложения.
2. Как скрыть рут от приложений?
Вы можете использовать вышеупомянутые инструменты, такие как Magisk, чтобы скрыть права root ваших любимых приложений.
3. Как мне скрыть root от покемонов?
Чтобы скрыть root от Pokémon, очень надежное приложение, которое вы можете попробовать - Magisk. Откройте приложение Magisk Manager на телефоне Android и нажмите кнопку «Меню». Затем нажмите на настройки и включите опцию Magisk Hide. Вернитесь в Меню и нажмите на опцию Magisk Hide. Выберите приложение Pokémon, чтобы скрыть тот факт, что ваш телефон рутирован.
Заключение
Перед тем, как рутировать свой телефон Android и использовать рекомендованные приложения, чтобы скрыть root-доступ, вам предлагается резервное копирование данных Android.
Это правда, что вы можете воспользоваться множеством преимуществ с правами root-доступа, такими как установка несовместимых приложений. Но некоторые приложения чувствительны к кибербезопасности. Это может стать недоступным, когда они обнаружат, что ваше устройство рутировано. В этом уроке мы поделились решением, скрыть root. И есть несколько способов решить эту задачу. Все, что вам нужно сделать, это выбрать свой любимый путь и следовать нашим пошаговым инструкциям, чтобы скрыть root и использовать приложения по своему желанию.
Читайте также: