Как проверить, работает ли Android apk на корневом устройстве

#android #rooted-device

#Android #корневое устройство

Вопрос:

Команда Infosec хотела знать, было ли наше приложение исполняемым на корневых устройствах Android. Мы разработали решение для этого и теперь хотим протестировать наше приложение. Можем ли мы реплицировать корневые устройства онлайн? Если нет, кто-нибудь может предоставить другие способы тестирования нашего приложения?

Заранее спасибо!

Комментарии:

1. Примечание: Вопрос задается «как создать корневое устройство для тестирования приложения», а не «как проверить, запущено ли приложение на корневом устройстве».

Ответ №1:

Я думаю, что лучшая идея — использовать эмулятор Android с поддержкой root / rootable. Вот несколько эмуляторов Android, которые вы можете загрузить для ПК с Windows.

Ссылки на эмуляторы с возможностью рутирования

Если вы хотите использовать эмулятор, предоставляемый Android Studio, то, я думаю, вам придется создать новый эмулятор Android с API 22 (LOLLIPOP) или выше, используя Android Studio, и попробовать укоренить его с помощью приложения Kingroot. Это приложение поможет вам получить root-доступ к вашему устройству путем прямой установки на ваше устройство, как обычное приложение. Это решение должно работать так, как оно работает на обычных реальных устройствах. Я сам пробовал на реальных устройствах, но не на эмуляторе Android.

Надеюсь, это решит ваш запрос

Комментарии:

1. Поддержано: знайте, что мой ответ не по теме после просмотра вашего ответа.

2. Спасибо!. Нам нужны такие участники, как вы, которые любят сообщество больше, чем репутацию @GenoChen

Ответ №2:

Я написал несколько функций util, которые помогут мне определить, запущено ли мое приложение в корневой среде:

 private fun isDeviceRooted(): Boolean {
    return checkRootMethod1() || checkRootMethod2() || checkRootMethod3()
}

private fun checkRootMethod1(): Boolean {
    val buildTags = android.os.Build.TAGS
    return buildTags != null amp;amp; buildTags.contains("test-keys")
}

private fun checkRootMethod2(): Boolean {
    val paths = arrayOf("/system/app/Superuser.apk", "/sbin/su", "/system/bin/su", "/system/xbin/su", "/data/local/xbin/su", "/data/local/bin/su", "/system/sd/xbin/su", "/system/bin/failsafe/su", "/data/local/su", "/su/bin/su")
    for (path in paths) {
        if (File(path).exists()) return true
    }
    return false
}

private fun checkRootMethod3(): Boolean {
    var process: Process? = null
    return try {
        process = Runtime.getRuntime().exec(arrayOf("/system/xbin/which", "su"))
        val `in` = BufferedReader(InputStreamReader(process!!.inputStream))
        `in`.readLine() != null
    } catch (t: Throwable) {
        false
    } finally {
        process?.destroy()
    }
}