Cómo evitar que otras aplicaciones definan el mismo nombre de permiso

Mi aplicación define un permiso con android: protectionLevel = "signature".

<permission android:name="my.app.permission.EXAMPLE" android:protectionLevel="signature" /> 

Mi intención es hacer módulos de aplicación que pueden ser lanzados sólo por mi aplicación firmada. Estos módulos de aplicación tienen android: permiso en sus actividades. Esto funciona bien. Pero … Una aplicación de terceros puede utilizar el mismo nombre de permiso y cambió el nivel de protección a normal, como este

 <permission android:name="my.app.permission.EXAMPLE" android:protectionLevel="normal" /> 

Si mi aplicación está instalada en primer lugar, puedo evitar que otras aplicaciones anulen el permiso. Sin embargo, si uno desinstala mi aplicación y luego instala su aplicación, redefine el permiso.

¿Es posible evitar que otra aplicación utilice el mismo nombre de permiso, por ejemplo, dando al permiso una identificación única como paquete de aplicación?

Aunque el manifiesto está encriptado, cualquiera puede leer el nombre de permiso en log cat cuando intenta iniciar la actividad que requiere este permiso (se genera una excepción con el nombre de permiso requerido).

No hay aplicación, sólo convención. Al igual que el resto del mundo Java, se basa libremente en la infraestructura de registro de nombres de dominio. La idea es que prefijas tu nombre de permiso con tu nombre de dominio de Internet público (por ejemplo, com.myawesomecompany.myapp.MYPERMISSION ) que posees.

La singularidad de los nombres de dominio es aplicada por la comunidad de registradores, naturalmente.

Sí, el sistema está abierto para el abuso.

EDIT: si está protegiendo un canal basado en broadcast, puede agregar un chequeo de dos vías si lo desea. Llame a Context.sendBroadcast () con el nombre de permiso como segundo parámetro.

EDIT2: Siento que estás pensando demasiado en esto mientras cierras los ojos en la imagen de seguridad de la aplicación Android más grande. Lo cual no es impresionante. Abusar de la infraestructura de privilegios no es como uno hackea una aplicación de Android. Si me propuso interceptar sus intenciones, no estaré reuniendo un receptor intencional falso (actividad, servicio). En su lugar, me conectar con un depurador para el receptor original en su aplicación, la firma y todo.

Con las herramientas disponibles públicamente, se tarda minutos en poner togther un proyecto de Eclipse para un determinado APK. Cargarlo en Eclipse, conectarse a un proceso en ejecución, establecer puntos de interrupción en las API del sistema relevante (Android es de código abierto, recuerda), voila. Con un poco de esfuerzo adicional, puede obtener descompilados fuentes Java para un APK y depurar en términos de sus métodos, en contraposición a los sistemas.

Si desea evitar que otras aplicaciones cambien su nivel de permiso, puede utilizar permisos de predefine del sistema que tengan nivel "firma". Ninguna otra aplicación regular puede definir el permiso antes del sistema.

El uso del permiso del sistema para proteger su recurso no significa que su aplicación tenga que firmar con la clave de la plataforma.

ejemplo:

 <service android:name="xxx.xxx.xxx.exservice" android:permission="android.permission.BROADCAST_PACKAGE_REMOVED" > 

El único problema es que AppStore mostraría qué permiso utilizará si debajo del código aparece en la aplicación manifest.xml

 <uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" /> 

En este ejemplo, puede acceder a su recurso por la misma clave de signo, pero definitivamente no puede emitir paquete quitar.

  • Android NDK limitaciones?
  • Error de permiso de acceso directo a la pantalla de inicio de Android
  • ¿Android seguirá utilizando GPS para extraer la ubicación cuando se solicite sólo COARSE_LOCATION?
  • ¿Cómo se puede comprobar el permiso en tiempo de ejecución sin lanzar SecurityException?
  • Conceder a la aplicación Android el permiso de android.permission.INTERNET mientras se depura en el dispositivo
  • Privilegios elevados en la aplicación para Android
  • StartBluetoothSco () lanza la excepción de seguridad (BROADCAST_STICKY) en ICS
  • Compartir archivos temporales entre aplicaciones sin tarjeta SD
  • Android utiliza el problema de permiso al instalar aplicaciones en orden incorrecto
  • Obtener: No se permite iniciar el servicio Intención ... sin permiso Proceso de servicio es malo
  • Android.permission.CALL_PHONE para tabletas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.