Определить, рутовано ли устройство Android программно?
Возможный дубликат:
Определите, работает ли на рутированном устройстве
Как определить (программно), является ли устройство Android: укорененным Запуск взломанной копии вашего программного обеспечения или диска.
У меня есть некоторая конфиденциальная информация в моей базе данных, и я хотел бы зашифровать ее, когда телефон рутирован, то есть пользователь имеет доступ к базе данных. Как мне это обнаружить?
3 ответа
Обнаружение рутинга - это игра в кошки-мышки, и трудно обнаружить корень, который будет работать на всех устройствах во всех случаях.
См. Android Root Beer https://github.com/scottyab/rootbeer для расширенного обнаружения корня, которое также использует JNI и собственный код CPP, скомпилированный в собственную библиотеку.so.
Если вам нужно простое и простое обнаружение рутирования, проверьте код ниже:
/**
* Checks if the device is rooted.
*
* @return <code>true</code> if the device is rooted, <code>false</code> 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;
}
Наверное, не всегда правильно. Протестировано на ~10 устройствах в 2014 году.
Если информация конфиденциальна, вам, вероятно, следует просто зашифровать ее для всех пользователей. В противном случае пользователь может установить ваше приложение без рута, затем получить root-права и прочитать вашу базу данных после того, как данные будут записаны.
Официальное руководство по лицензированию гласит:
Ограничение устаревшего механизма защиты от копирования в Android Market состоит в том, что приложения, использующие его, могут быть установлены только на совместимые устройства, которые обеспечивают безопасную внутреннюю среду хранения. Например, приложение, защищенное от копирования, не может быть загружено с Маркета на устройство, которое предоставляет root-доступ, и приложение не может быть установлено на SD-карту устройства.
Похоже, что вы бы выиграли от использования этой устаревшей защиты от копирования, чтобы предотвратить установку вашего приложения на корневые устройства.
Вы можете выпустить отдельную версию, которая может быть установлена на корневых устройствах с зашифрованной базой данных.