Служба проверки намерений, что это за программа для Android

Обновлено: 15.02.2025

Система намерений Android — это гибкий механизм, позволяющий приложениям обрабатывать контент и запросы. Несколько приложений могут объявлять совпадающие шаблоны URI в своих фильтрах намерений. Когда пользователь щелкает веб-ссылку, не имеющую обработчика запуска по умолчанию, платформа может отобразить диалоговое окно, в котором пользователь может выбрать приложение из списка приложений, для которых объявлены соответствующие фильтры намерений.

В предварительной версии Android M Developer Preview появилась поддержка ссылок на приложения, которая улучшает существующую обработку ссылок, позволяя разработчикам приложений связать приложение с принадлежащим им веб-доменом. Когда разработчики создают эту связь, платформа может автоматически определить приложение по умолчанию, используемое для обработки конкретной веб-ссылки, и не запрашивать пользователей.

Объявить ассоциацию с веб-сайтом

Владельцы веб-сайтов должны объявить ассоциации с приложениями, чтобы установить связь с приложением. Владелец сайта объявляет об отношении к приложению, размещая файл JSON с именем statement.json в известном месте домена:

Этот файл JSON указывает приложение Android, которое следует использовать в качестве обработчика по умолчанию для URL-адресов в этом домене. Он идентифицирует приложение на основе следующих полей:

  • package_name : имя пакета, объявленное в манифесте приложения.
  • sha256_cert_fingerprints : отпечаток SHA256 сертификата подписи вашего приложения. Вы можете использовать ключевой инструмент Java для создания отпечатка пальца с помощью следующей команды:

В следующем списке файлов показан пример содержимого и формата файла statement.json:

Запросить подтверждение ссылки на приложение

Приложение может запросить у платформы автоматическую проверку любых ссылок на приложения, определенных именами хостов в элементах данных его фильтров намерений, по файлам Statements.json, размещенным в соответствующих веб-доменах. Чтобы запросить проверку ссылки на приложение, добавьте атрибут android:autoVerify к каждому требуемому фильтру намерений в манифесте, как показано в следующем фрагменте кода манифеста:

Если атрибут android:autoVerify присутствует в манифесте приложения, платформа пытается проверить ссылки на приложение, когда оно установлено. Если платформа не может успешно проверить ссылки на приложения, приложение не устанавливается в качестве предпочтительного приложения для обработки веб-ссылок. В следующий раз, когда пользователь откроет одну из ссылок, платформа вернется к представлению пользователю диалогового окна.

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

Управление настройками ссылки на приложение

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

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

Как тестировщик мобильных приложений, я столкнулся с множеством различных уязвимостей. Во время одного из моих мобильных мероприятий я смог добиться обхода аутентификации, просто вызвав каждый открытый компонент Activity приложения Android. Цель этого поста — выделить этот тип уязвимости, который все еще существует в каждом приложении для Android. Хотя этот тип проблем не является широко распространенным, понимание того, как использовался этот метод, может помочь вам понять, как некоторые приложения Android могут упускать важную информацию, которая потенциально может привести к компрометации или взлому.

Компоненты Android

Каждое приложение для Android состоит из трех основных компонентов:

  • Действия. Действия – это компоненты пользовательского интерфейса, которые пользователь видит и с которыми взаимодействует при использовании приложения.
  • Службы. Службы — это фоновые процессы, которые обрабатывают базовые операции в приложении.
  • Приемники широковещательной рассылки. Приемники широковещательной рассылки — это компоненты, которые прослушивают системные сообщения или широковещательные объявления.

Намерения Android

Обычно действия вызываются с помощью намерений. Intent — это объект обмена сообщениями, используемый приложением для связи с различными компонентами. Эти компоненты могут быть действиями, службами или широковещательными приемниками. Фильтры намерений обычно определяются в файле AndroidManifest.xml в приложении. Существует два типа фильтров намерений:

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

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

Рисунок 1. AndroidManifest.xml

Во-первых, вот краткая информация об этом конкретном приложении. Мобильное приложение — это внутренний мессенджер, разработанный специально для общения внутри компании. Он предназначен для связи сотрудников по всей организации с функциями обмена сообщениями один на один, группового чата и голосовых вызовов. На изображении ниже показан экран входа в приложение. Теперь мы попытаемся вызвать одно из действий, показанных в AndroidManifest.xml на рис. 1, отправив намерение в действие, и посмотрим, что произойдет.

Мы сделаем это, используя корневую оболочку ADB, подключенную к устройству, на котором запущено приложение, а затем выполним приведенную ниже команду. Это выполнит указанную вами активность. Например, при просмотре перечисленных действий MyChatRoomActivity — это пользовательский интерфейс, предназначенный для пользователей, прошедших проверку подлинности. Итак, мы собираемся использовать MyChatRoomActivity, чтобы узнать, можем ли мы получить к нему доступ напрямую без входа в систему.

adb shell
su
generic_x86:/ $ am start -n com.app.uc/com.app.uc.ui.MyChatRoomActivity
Запуск: Intent < cmp=com.app .uc/.ui.MyChatRoomActivity >

После выполнения команды из корневой оболочки ADB MyChatRoomActivity привел нас к панели чата «Мои группы» приложения без предоставления каких-либо учетных данных (см. рис. 3. Поскольку этот прямой обход аутентификации происходит путем вызов одной команды, что означает, что действия приложения не проверяют действительный сеанс пользователя.

Намерение — это объект обмена сообщениями, который сообщает, какое действие необходимо выполнить. Наиболее важным использованием намерения является запуск действия. Намерение облегчает взаимодействие между компонентами.

Примечание. Компоненты приложения являются основными строительными блоками приложения.

Фундаментальный вариант использования намерений

Начало действия

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

Пример:

Котлин

Вы можете добавить дополнительную информацию с помощью putExtra().

Запуск службы

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

Доставка трансляции

Рассылка — это сообщение, которое может получить любое приложение. В Android система передает различные системные события, такие как начало зарядки устройства, отключение или включение режима полета и т. д.

Тип намерения

  1. Явное намерение: Явное намерение может выполнять определенное действие приложения, которое задается кодом, например изменение активности. В явном намерении пользователь знает обо всем, например, после нажатия кнопки, какое действие начнется, а Явные намерения используются для связи внутри приложение
  2. Неявное намерение. Неявные намерения не называют конкретный компонент, как явное намерение, вместо этого объявляется общее действие, которое необходимо выполнить, что позволяет обрабатывать компонент из другого приложения.

Например: когда вы нажимаете кнопку "Поделиться" в любом приложении, вы видите Gmail, Bluetooth и другие параметры приложения для обмена.

Фильтр намерений

  • Неявное намерение использует фильтр намерений для обслуживания запроса пользователя.
  • Фильтр намерений определяет типы намерений, на которые может ответить действие, служба или широковещательный приемник.
  • Фильтры намерений объявляются в файле манифеста Android.
  • Фильтр намерений должен содержать

Пример:

1.

Синтаксис:

  • ACTION_VIEW: используйте это действие с помощью startActivity(), когда у вас есть информация, которую действие может показать пользователю, например отображение изображения в приложении галереи или адреса для просмотра в приложении карты.
  • ACTION_SEND: вы должны использовать это намерение с startActivity(), когда у вас есть некоторые данные, которыми пользователь может поделиться через другое приложение, например приложение электронной почты или приложение для обмена в социальных сетях.

2.

Синтаксис:

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

  • CATEGORY_BROWSABLE: целевое действие позволяет веб-браузеру запускать себя для отображения данных, на которые ссылается ссылка.

3.

Синтаксис:

Добавляет спецификацию данных в фильтр намерений. Спецификация может быть просто типом данных, просто URI или одновременно типом данных и URI.

Примечание. Унифицированный идентификатор ресурса (URI) — это строка символов, используемая для идентификации ресурса. URI идентифицирует ресурс либо по местоположению, либо по имени, либо по тому и другому.

Реализация Intent Filter с демонстрационным приложением

Шаг 1. Создайте новый проект

Чтобы создать новый проект в Android Studio, см. раздел Как создать/запустить новый проект в Android Studio. Обратите внимание, что в качестве языка программирования выберите Kotlin.

Шаг 2. Добавьте зависимости в файл build.gradle(Module:app)

Добавьте следующую зависимость в файл build.gradle(Module:app). Мы добавляем эти две зависимости, чтобы избежать использования findViewById() в нашем файле MainActivity.kt. Попробуйте это, в противном случае используйте обычный способ, например findViewById().

применить плагин: ‘kotlin-android’

применить плагин: ‘kotlin-android-extensions’

Фильтр намерений — это выражение в файле манифеста приложения, указывающее тип намерений, которые компонент хотел бы получать. Например, объявив фильтр намерений для действия, вы позволяете другим приложениям напрямую запускать ваше действие с определенным намерением.

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

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

Какова цель класса IntentFilter?

Фильтр намерений — это экземпляр класса IntentFilter. Фильтры намерений полезны при использовании неявных намерений. Они не будут обрабатываться в коде Java, мы должны настроить их в AndroidManifest.

Что такое приложение для проверки фильтра намерений?

Фильтры намерений Android позволяют приложениям получать неявные намерения от других приложений Android. Намерение — это объект сообщения, обычно содержащий данные, отправленный другим приложением для запуска нового приложения для обработки данных.

Зачем использовать дополнительное поле в фильтре намерений?

xml мы добавили следующие дополнительные поля фильтров Intent. действие — мы используем это свойство, чтобы определить, что действие может выполнять действие SEND. категория — мы включили категорию ПО УМОЛЧАНИЮ для этого действия, чтобы иметь возможность получать неявные намерения. data — тип данных, которые может отправить действие.

Какие типы намерений существуют в Android?

Android поддерживает два типа намерений: явные и неявные. Когда приложение определяет свой целевой компонент в намерении, это явное намерение.

Для чего используется фильтр намерений в Android?

Фильтр намерений — это выражение в файле манифеста приложения, указывающее тип намерений, которые компонент хотел бы получать. Например, объявив фильтр намерений для действия, вы позволяете другим приложениям напрямую запускать ваше действие с определенным намерением.

Что такое макет в Android?

Макеты Часть Android Jetpack. Макет определяет структуру пользовательского интерфейса в вашем приложении, например в действии. Все элементы макета построены с использованием иерархии объектов View и ViewGroup. Представление обычно рисует то, что пользователь может видеть и с чем может взаимодействовать.

Что такое фрагмент в Android?

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

Что такое контент-провайдер в Android?

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

Какие существуют два типа намерений?

В Android доступны два намерения: неявные намерения и явные намерения. Отправка намерения = новое намерение (MainActivity.

Что такое файл манифеста в Android?

Файл манифеста описывает важную информацию о вашем приложении для инструментов сборки Android, операционной системы Android и Google Play.Среди прочего, в файле манифеста требуется объявить следующее: … Разрешения, необходимые приложению для доступа к защищенным частям системы или другим приложениям.

Что такое намерение в Android с примером?

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

Что такое действия в Android?

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

Что такое широковещательный приемник в Android?

Определение. Широковещательный приемник (receiver) — это компонент Android, который позволяет вам регистрироваться на системные или прикладные события. Все зарегистрированные получатели события получают уведомление от среды выполнения Android, когда это событие происходит.

Что такое активность и намерение в Android?

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

Читайте также: