Определить, рутовано ли устройство 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-карту устройства.

Похоже, что вы бы выиграли от использования этой устаревшей защиты от копирования, чтобы предотвратить установку вашего приложения на корневые устройства.

Вы можете выпустить отдельную версию, которая может быть установлена ​​на корневых устройствах с зашифрованной базой данных.

Другие вопросы по тегам