前言

当用户设备已经被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 知识整理

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

  1. 2015 android测试机,安卓版Android道道通H1A-21AW-K懒人包 2015年最新夏季版 全分辨率...

    测试机 器: 华为麦芒B199\安卓4.4.2\1280*720 安装于外置卡 下载地址和安装步骤: 游客,如果您要查看本帖隐藏内容请回复 道道道2015夏季版上市啦,小伙伴们快来看看最新版的道道通地 ...

  2. android中如何通过代码检测是否有root权限?

    2019独角兽企业重金招聘Python工程师标准>>> Android android中如何通过代码检测是否有root权限? while 3 票 1892 评论 (0) • 分享 • ...

  3. android设备如何root,如何ROOT安卓设备并授权向日葵客户端(电脑端)

    大家都知道,向日葵Android客户端想要正常被远控的话,需要具备两个前提条件: 一:手机需获取ROOT权限: 二:允许向日葵客户端获取ROOT权限. 当设备已经ROOT但向日葵未获得ROOT权限时: ...

  4. android 跳过检查,绕过安卓应用检测项

    针对Xposed检测 针对Frida检测 针对ROOT环境检测 const commonPaths = [ "/data/local/bin/su", "/data/lo ...

  5. Android 玩机指南详细汇总(刷机、root、Xposed等)

    点击上方"程序员大咖",选择"置顶公众号" 关键时刻,第一时间送达! 目录 Android 系统简介 Android 系统版本 Android API 等级 基 ...

  6. Android稳定性系列-01-使用 Address Sanitizer检测原生代码中的内存错误

    前言 想必大家曾经被各种Native Crash折磨过,本地测试没啥问题,一到线上或者自动化测试就出现各种SIGSEGV.SIGABRT.SIGILL.SIGBUS.SIGFPE异常,而且堆栈还是崩溃 ...

  7. 研究Xposed相关二:如何root android模拟器(android4.3.1)

    从上一篇文章 研究Xposed相关一:Xposed框架的安装 了解了Xposed框架的安装过程,但是Xposed的使用有一个基础前提,那就是设备的Root权限已经获取的状态下:那这一篇文章就来讲述下如 ...

  8. Android双机(网络和USB)调试及其完美ROOT

    本文主要讲如下两个内容. 1.  如何让一部Android手机带两台PC进行调试. 2.  如何完美Root Android手机. 我曾经遇到过这样的问题,Mac OS X上测试Android的系统程 ...

  9. android 版本权限差别,android apk 的root 权限和USB adb 权限的区别

    USB adb 权限是指,当adb 连接手机时,手机中的守护进程adbd 的权限为root 权限,从而它的子进程也具有root 权限,通常如果adb shell 看到是: Android 4.0 以后 ...

最新文章

  1. 掌握图神经网络GNN基本,看这篇文章就够了
  2. Orecle基本概述(2)
  3. 微信小程序想要最短服务路径
  4. 计算机网络专业教学模式,计算机网络技术专业教学模式改革探索
  5. nacos使用_使用Nacos的CMDB实现微服务的就近访问!
  6. 打印机一直显示正在打印中_中国和桌面3D打印机正在引领3D打印市场
  7. 在EditPlus中配置PHP调试
  8. 读书笔记∣元数据:用数据的数据管理你的世界 Ch.5-8
  9. vue分享卡住_vue init webpack卡住无反应??
  10. Java集合Collection之实现原理解读(LinkedList)
  11. 解析rtcm32报文工具_rtcm数据格式技术分享
  12. 柠檬班python自动化百度云_带三开头的名字女孩名字大全
  13. HOJ 1568 Fibonacci(对数,数列通项公式)
  14. 巨量引擎最大转化投放实战案例深度解析!
  15. linux图形化界面进不去的问题(startx命令报错bash:startx command not found) 经验之谈
  16. kodi remote android,使用Android和iOS在Win10系统中设置Kodi Remote方法
  17. element-plus中el-dialog导致props报错问题解决
  18. Android获取一周每一天的日期
  19. java model类_Java Model类代码示例
  20. 《嵌入式 – GD32开发实战指南》第14章 内部温度传感器

热门文章

  1. 跟尤雨溪一起解读Vue3源码笔记- Vue Mastery
  2. 合伙人股份怎么分配_如何选择合伙人以及分配股份问题?
  3. 华为为何不上市?任正非:猪养太肥懒得哼声
  4. 什么是ip代理?如何选择ip代理?ip代理哪家好?
  5. 陶敏修《高阶Perl》访谈录(来自The Perl Review)
  6. 04 JDK环境安装
  7. Python中使用pickle库进行数据的序列化存储
  8. 微信小程序开发笔记—记事本
  9. 【自动驾驶】自动驾驶涉及的知识概览
  10. FCA-FineBI认证考试(2022-09-28)