对root权限进行检测
本节会介绍对root权限进行检测的技术思路,这些思路我们都在上文中介绍过。就是基于这些方法,研究人员制作了一个具有root权限属性的检测表,并设计了几个函数(如上所示)来检测它们。在检测表中,研究人员将上文所讲过的第二种检测方法(检测已安装文件)细化为两项检测:检测su二进制文件和检测来自busybox的命令。研究人员并没有将上文所讲过的第七中检测方法(使用shell命令检测root权限)包含在检测表中,因为该方法可以很容易被其他方法替代。研究人员使用的是开源软件实现的这些检测功能,检测表和函数的具体运行过程如下所示:
· detectTestKeys()会检测自定义镜像闪烁,它会reads /system/build.prop并检测ro.build.tags的值是否为“release-key”。如果没有,则假定设备具有root权限;
· checkForSystemProperties()检测系统属性的值,它会调用Runtime().exec(“getprop”)获取系统属性,然后检测ro.secure和ro.debuggable的值;
· checkForBinary ()会尝试查找安装的su二进制文件,它调用exist()
· 检测su二进制文件是否安装在类似/system/(x)bin, /data/local/(x)bin等中;
· checkForBusybox()会检测busybox提供的其他命令存在与否,它通过调用Runtime.exec()来执行find,tail和lsof等命令;
· checkForFilesystem()会检测文件系统属性,它会调用mount命令来检测任何只读文件系统是否具有“write”属性;
· detectRootManagementApps()会调用getPackageInfo()来获取已安装应用程序的列表,并将其与具有rooti权限相关的应用程序列表进行比较;
· detectRootProcess()会调用Runtime.exec(“ps”)获取当前正在运行的进程的列表,并使用root权限检测进程。如果这样的过程不是Zygote进程的子过程,则就假设设备是含有root权限的;
使用NetBeans动态调试Android应用程序