¿Auditorar los permisos de la aplicación fácilmente en un solo lugar?

¿Hay alguna forma de enumerar todas las aplicaciones instaladas en su teléfono y los permisos que requieren en una sola página, o exportar la lista para que pueda ser auditada fácilmente?

Respuestas (5)

Utilice aplicaciones de mercado como Permission Watchdog o Permissions . Además, hay varios otros.

Desafortunadamente, la aplicación Market tiene un error (¿o una función prevista?) cuando no se enumeran todos los permisos al instalar la aplicación. Esto puede ser un problema de compatibilidad con el software diseñado para versiones anteriores de Android... code.google.com/p/android/issues/detail?id=9365
quizás incluir un comentario en su respuesta sería más simple.
@Nikolaenko, aparentemente es a propósito y cambió ahora: android.stackexchange.com/questions/605/…
@BlackShift, ¿qué quiere decir con "cambiado ahora"? Cambiado por el desarrollador de Android. ¿equipo?
@Nikolaenko, creo que no estaba claro porque no me queda claro. Estoy ejecutando cyanogenmod 6, android 2.2, y casi todas las aplicaciones solicitan los permisos que su enlace afirma que se otorgan implícitamente. Así que no sé quién cambió esto (cyanogen o android team).

Otra aplicación que terminé usando en lugar de Permisos es Permisos RL . Prefiero la interfaz. En cuanto a cuál funciona mejor, no lo sé.

aSpotCat también es una buena aplicación para la auditoría de permisos.

Permission Friendly Apps enumerará las aplicaciones instaladas por orden de los requisitos de permisos más exigentes a los menos exigentes. (Sin embargo, en realidad no rastrea ni audita ni ajusta su comportamiento).

Dado que no se menciona ninguna versión de Android en la pregunta, propongo una respuesta basada en la línea de comandos relevante para la versión de Android 4.2.1 y superior. Idealmente, esta es una solución independiente del sistema operativo, es decir, sistema operativo en PC.

dependencias

  • Requiere para configurarse en la PC.
  • Requiere el binario busybox . Si el dispositivo está rooteado, instale la aplicación Busybox . De lo contrario, descargue el binario de busybox de la fuente oficial , cambie el nombre del binario a busybox , configure el permiso ejecutable compatible con Linux en ese binario para todos y muévalo al dispositivo usando

    adb push LOCAL_FILE /data/local/tmp/   # LOCAL_FILE is the file path where busybox binary is located in PC
    
  • Requiere aapt binario. Si está ejecutando un CM o su ROM derivada, ignore este requisito. De lo contrario, para Android 4.x, puede considerar descargar el binario desde aquí , cambiar el nombre del binario a aapt , establecer un permiso ejecutable compatible con Linux en ese binario para todos y moverlo al dispositivo usando

    adb push LOCAL_FILE /data/local/tmp/   # LOCAL_FILE is the file path where busybox binary is located in PC . 
    

    Para usuarios de Android 5.x, pida ayuda a Google.

Aquí está mi pequeño guión que hace la magia:

#!/sistema/bin/sh

# Compruebe si el binario de busybox existe en /data/local/tmp/ o /system/xbin. Establezca la ruta del binario detectado en la variable busybox o salga si el archivo no existe o el permiso ejecutable no está configurado
[[ -x /data/local/tmp/busybox]] && busybox=/data/local/tmp/busybox || { [[ -x /sistema/xbin/caja ocupada ]] && caja ocupada=/sistema/xbin/caja ocupada || { printf "busybox binario no encontrado o permiso ejecutable no establecido. Saliendo\n" && exit; }; }
# Compruebe si el binario aapt existe en /data/local/tmp o /system/bin o /system/xbin. Establezca la ruta del binario detectado en la variable aapt o salga si el archivo no existe o el permiso ejecutable no está establecido
[[ -x /datos/local/tmp/aapt ]] && aapt=/datos/local/tmp/aapt || { [[ -x /sistema/bin/aapt ]] && aapt=/sistema/bin/aapt || { [[ -x /sistema/xbin/aapt ]] && aapt=/sistema/xbin/aapt || { printf "aapt binario no encontrado o permiso ejecutable no establecido. Saliendo\n" && exit; }; }; }

# Liste el nombre del paquete de todas las aplicaciones instaladas y guárdelas en el archivo packages.txt en /sdcard
paquetes lista pm | $busybox sed 's/^paquete://g' | $busybox sort -o /sdcard/packages.txt

# Para cada nombre de paquete en la salida que acabamos de guardar, obtenga la etiqueta de la aplicación usando $ruta y $etiqueta, imprima una línea y finalmente enumere los permisos otorgados a la aplicación
mientras lee la línea; hacer
    ruta=$(pm ruta $línea | $busybox sed 's/^paquete://g');
    label=$($aapt d credencialización $ruta | $busybox grep 'aplicación: label=' | $busybox cut -d "'" -f2);  
    $busybox printf "Permisos para la aplicación $etiqueta con nombre de paquete $línea\n";
    paquete dumpsys $línea | $busybox sed -e '1,/permisos concedidos:/d' -e '/^\s*$/,$d' | ordenación de $busybox;
    $busybox printf "\n";
hecho < /sdcard/packages.txt

Salida de demostración:

Permisos para la aplicación DisableService con nombre de paquete cn.wq.disableservice
      android.permiso.READ_EXTERNAL_STORAGE
      android.permiso.WRITE_EXTERNAL_STORAGE

Permisos para la aplicación Indecent Xposure con el nombre de paquete co.vanir.indecentxposure
      android.permiso.RECEIVE_BOOT_COMPLETED

Permisos para etiquetas de aplicaciones con el nombre de paquete com.android.apps.tag
      android.permiso.CALL_PHONE
      android.permiso.NFC
      android.permiso.LEER_CONTACTOS
      android.permiso.WAKE_LOCK
      android.permiso.WRITE_SECURE_SETTINGS
...
...
Permisos para el proveedor de temas de aplicaciones con el nombre de paquete org.cyanogenmod.themes.provider
      android.permiso.ACCESO_NOTIFICACIONES
      android.permiso.ACCESS_THEME_MANAGER
      android.permiso.INTERNET
      android.permiso.READ_THEMES
      android.permiso.WRITE_SECURE_SETTINGS
      android.permiso.WRITE_SETTINGS
      android.permiso.WRITE_THEMES

Guarde el script en la PC en un archivo llamado perm_script.shy muévalo a /sdcard usando

adb push LOCAL_FILE /sdcard/   # LOCAL_FILE is the  path where you saved that file into PC

Ejecutar ese archivo

adb shell sh /sdcard/perm_script.sh > OUTPUT_FILE   # OUTPUT_FILE is the path where you want to save the final output

Cuanto mayores sean las aplicaciones instaladas en el sistema, mayor será el tiempo para que el comando complete la ejecución. En mi dispositivo, tomó alrededor de tres minutos.

Relacionado: ¿Existe una forma nativa de encontrar todas las aplicaciones instaladas que tienen acceso a una función del teléfono?