android 测试机 怎么root,Android 应用安全 - 检测设备是否Root

前言

当用户设备已经被Root之后,在此设备上使用的APP将会有巨大安全隐患,因为Root设备可以获取到最高权限从而有安全风险,特别是会议,金融,银行类APP需要额外注意

1.检测用户是否可以执行以下命令

su

busybox

2.检测用户是否已经安装下列已知的Root安装包

com.noshufou.android.su

com.noshufou.android.su.elite

eu.chainfire.supersu

com.koushikdutta.superuser

com.thirdparty.superuser

com.yellowes.su

3.检测用户是否已经安装下列已知的Root权限控制安装

com.devadvance.rootcloak

com.devadvance.rootcloakplus

de.robv.android.xposed.installer

com.saurik.substrate

com.zachspong.temprootremovejb

com.amphoras.hidemyroot

com.amphoras.hidemyrootadfree

com.formyhm.hiderootPremium

com.formyhm.hideroot

4.检测系统是否为测试版本

Build.TAGS

4.示例代码

private val knownRootPackages = listOf(

"com.noshufou.android.su",

"com.noshufou.android.su.elite",

"eu.chainfire.supersu",

"com.koushikdutta.superuser",

"com.thirdparty.superuser",

"com.yellowes.su"

)

private val knownRootCloakers = listOf(

"com.devadvance.rootcloak",

"com.devadvance.rootcloakplus",

"de.robv.android.xposed.installer",

"com.saurik.substrate",

"com.zachspong.temprootremovejb",

"com.amphoras.hidemyroot",

"com.amphoras.hidemyrootadfree",

"com.formyhm.hiderootPremium",

"com.formyhm.hideroot"

)

fun isRooted(context: Context): Boolean {

return when {

checkTags() || checkRootSu() || checkRootSu1() || canExecuteCommand("su") ||

canExecuteCommand("busybox") || isPackageInstalled(

knownRootPackages,

context

) || isPackageInstalled(knownRootCloakers, context) -> true

else -> false

}

}

private fun checkTags(): Boolean {

val buildTags = Build.TAGS

return buildTags != null && buildTags.contains("test-keys")

}

private fun checkRootSu(): 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 checkRootSu1(): 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()

}

}

private fun canExecuteCommand(command: String): Boolean {

try {

Runtime.getRuntime().exec(command)

return true

} catch (e: Exception) {

return false

}

}

private fun isPackageInstalled(pkgList: List, context: Context): Boolean {

return pkgList.any {

try {

context.packageManager.getPackageInfo(it, 0)

true

} catch (e: Exception) {

false

}

}

}

5.注意

Root检查判断尽量靠前,避免在检查之前就已经被侵入,配合应用加壳技术使用更能达到理想效果

欢迎关注Mike的简书

Android 知识整理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值