Controlar el acceso de las API de terceros a los recursos del sistema Android?

Al importar API de terceros (inyección de dependencia de paquetes, bibliotecas generadas, código fuente, etc.) en su proyecto de Android, asume que se comportarán según lo anunciado. La mayoría de las veces el código no es de código abierto, se obscurece o simplemente se compila.

¿Hay una manera de controlar el acceso de esta API a los recursos importantes del sistema tales como red, contactos, vídeo y audio, localización?

El mejor enfoque sería proporcionar un proxy a ellos para los recursos del sistema. Esto tendría los siguientes beneficios:

  • Las pruebas podrían realizarse proporcionando datos falsos en los proxies
  • Su aplicación no tendría que proporcionar todos los permisos que la API requiere si no son necesarios y el proxy permitiría que la API no se rompa debido al permiso emulando el permiso concedido
  • Filtrar los posibles datos recopilados localmente sobre el usuario y enviados a un repo de inicio de la API, utilizados para publicidad o intenciones maliciosas

No he podido encontrar cómo una de estas soluciones se puede implementar ya que las actividades y servicios definidos por el usuario no pueden controlar los servicios de las API de terceros o incluso evitar que realicen llamadas directas a cualquier interfaz pública de Android.

La solución no debe requerir acceso root, ya que no desea tener este control fuera de los límites de su propia aplicación.

El contenido de esta pregunta está vinculado a varias preguntas que abordan particularidades de esta amplia cuestión ( datos de registro de proveedores de contenido , las solicitudes de red – que me hizo pensar en este problema mientras que la investigación de una respuesta para ello)

Nota : La respuesta corta es no, pero uno puede ser lo suficientemente creativo (tal vez va para hacks de nivel nativo puede resolver este problema – idk)

Construya la clase de proxy para el recurso android que desee proteger en un paquete llamado com.myproxies (por ejemplo, MediaRecorder, SensorManager, Camera, java.net.HTTPURLConnection) .En el proxy que necesita para implementar todos los métodos públicos de la clase que usted Se burlan y es necesario implementar la lógica para permitir el acceso (adelante al método apropiado) o denegar. Un paso útil sería comprobar el llamador del método .

  • Si planea importar código fuente, refactorice el código para cambiar el paquete a su proxy (proguard puede ayudar con esto).

  • Si está utilizando una biblioteca, obtenga Jar Jar Links , una utilidad que facilita el reempaque de bibliotecas Java e incorporarlas a su propia distribución y cambiar los nombres de los paquetes internamente a los de una clase de su paquete que servirá como proxy .

  • Si está utilizando la inyección de dependencia del paquete de Maven o Gradle, también puede intentar importar Jar Jar Links y realizar la refactorización del paquete en tiempo de compilación (no está muy seguro de que se pueda hacer)

Desafortunadamente es muy fácil romper el API, como yo mismo experimenté, y hay mucho trabajo manual involucrado.

  • Android HttpClient no utiliza configuración de proxy del sistema
  • Ejecutar Robolectric en IDEA detrás del proxy
  • Configurar Http Proxy en Android Studio
  • Android Spring RestTemplate con proxy
  • Proxy de Genymotion con usuario / contraseña
  • Configuración de SDK de Android con ubuntu
  • ¿Cómo pueden los usuarios / desarrolladores configurar la configuración de proxy de Android para las versiones 2.x?
  • Notificaciones push de GCM que no proceden de proxy
  • ¿Cómo enrutar todo el tráfico procedente del anclaje?
  • Configuraciones del proxy del SDK de Android SDK en LINUX
  • Lista de solicitudes HTTP desde el teléfono Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.