#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()
}
}