¿Determinar si un dispositivo Android está rooteado programáticamente?

Posible duplicado:
Determinar si se está ejecutando en un dispositivo rooteado

¿Cómo se determina (mediante progtwigción) si un dispositivo Android está: rooteado Ejecutando una copia descifrada de su software o rom.

Tengo información confidencial en mi base de datos, y me gustaría encriptarla cuando el teléfono está rooteado, también conocido como el usuario tiene acceso a la base de datos. ¿Cómo lo detecto?

La detección de enraizamiento es un juego de gato y ratón y es difícil hacer detección de enraizamiento que funcione en todos los dispositivos para todos los casos.

Si aún necesita alguna detección básica de rooting, verifique el siguiente código:

/** * Checks if the device is rooted. * * @return true if the device is rooted, false otherwise. */ public static boolean isRooted() { // get from build info String buildTags = android.os.Build.TAGS; if (buildTags != null && buildTags.contains("test-keys")) { return true; } // check if /system/app/Superuser.apk is present try { File file = new File("/system/app/Superuser.apk"); if (file.exists()) { return true; } } catch (Exception e1) { // ignore } // try executing commands return canExecuteCommand("/system/xbin/which su") || canExecuteCommand("/system/bin/which su") || canExecuteCommand("which su"); } // executes a command on the system private static boolean canExecuteCommand(String command) { boolean executedSuccesfully; try { Runtime.getRuntime().exec(command); executedSuccesfully = true; } catch (Exception e) { executedSuccesfully = false; } return executedSuccesfully; } 

Probablemente no siempre sea correcto. Probado en ~ 10 dispositivos en 2014.

Si la información es confidencial, probablemente solo deberías encriptarla para todos los usuarios. De lo contrario, un usuario podría instalar su aplicación sin necesidad de root, luego rootear y leer su base de datos una vez que los datos hayan sido escritos.

La guía oficial de licencias dice:

Una limitación del mecanismo de protección de copiado heredado en Android Market es que las aplicaciones que lo utilizan pueden instalarse solo en dispositivos compatibles que proporcionan un entorno de almacenamiento interno seguro. Por ejemplo, una aplicación protegida contra copia no se puede descargar de Market a un dispositivo que proporciona acceso de administrador y la aplicación no se puede instalar en la tarjeta SD de un dispositivo.

Parece que se beneficiaría de usar esa protección de cop de legado para evitar que su aplicación se instale en dispositivos rooteados.

Puede lanzar una versión separada que se puede instalar en dispositivos rooteados con una base de datos cifrada.