Intereting Posts

Контролировать доступ сторонних API к системным ресурсам Android?

Когда вы импортируете сторонние API (инъекции в зависимости от пакета, сгенерированные библиотеки, исходный код и т. Д.) В свой проект Android, вы предполагаете, что они будут вести себя так, как объявлено. В большинстве случаев код не является открытым исходным кодом, он запутан или просто скомпилирован.

Есть ли способ контролировать доступ этих API к важным системным ресурсам, таким как сеть, контакты, видео и аудио, местоположение?

Лучшим подходом было бы предоставление им proxy для системных ресурсов. Это будет иметь следующие преимущества:

  • Тесты могут выполняться путем предоставления макетных данных в прокси
  • Ваше приложение не должно было бы предоставлять все разрешения, требуемые API, если они не нужны, и прокси-сервер позволит API не прерываться из-за разрешения путем эмулирования разрешенных прав
  • Отфильтруйте возможные данные, собранные локально о пользователе и отправленные в репозиторий домашней службы API, используемые для рекламы или злонамеренных намерений

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

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

Содержание этого вопроса связано с несколькими вопросами, которые касаются особенностей этого широкого вопроса ( лог-данных поставщиков контента , сетевых запросов), которые заставили меня думать об этой проблеме при исследовании ответа на нее)

Примечание . Короткий ответ – нет, но он может быть достаточно креативным (возможно, для родного уровня хаки могут решить эту проблему – idk)

Solutions Collecting From Web of "Контролировать доступ сторонних API к системным ресурсам Android?"

Создайте прокси-класс для нужного ресурса Android, который вы хотите защитить в пакете с именем com.myproxies (например, MediaRecorder, SensorManager, Camera, java.net.HTTPURLConnection). В прокси-сервере вам необходимо реализовать все общедоступные методы класса, которые вы Насмехаются, и вам нужно реализовать логику, чтобы разрешить доступ (пересылать соответствующий метод) или отклонять. Одним из полезных шагов было бы проверить вызывающего метода .

  • Если вы планируете импортировать исходный код, код рефакторинга для изменения пакета на ваш прокси-сервер (это может помочь proguard).

  • Если вы используете библиотеку, получите Jar Jar Links , утилиту, которая упрощает переупаковку библиотек Java и встраивание их в собственный дистрибутив, а также внутреннее изменение имен пакетов на класс в вашем пакете, который будет служить прокси-сервером ,

  • Если вы используете инъекцию зависимости Maven или Gradle, вы также можете попробовать импортировать Jar Jar Links и выполнить рефакторинг пакетов во время компиляции (не очень уверен, что это можно сделать)

К сожалению, очень легко сломать API, поскольку я испытал на себе, и есть много ручного труда.