安卓Hacking Part 8:Root的检测和绕过
作者:admin | 时间:2017-3-24 09:37:46 | 分类:黑客技术 隐藏侧边栏展开侧边栏
在本期的文章中,我们将讨论安卓开发者们使用的一项技术——检查当前app运行的安卓设备是否已经root。对于应用程序来说,检查当前设备是否已经root是有很多好处的。很多是否我们需要root权限来安装一些工具,但这样可能造成安全隐患。
出于安全原因,很多应用程序不允许在已经root的设备上运行,我曾经见过一些手机银行app会自动检查设备是否已经root,并会在已经root的设备上停止运行。本期文章我会给大家讲解开发者们检查设备是否已经root的几种常用方法和一些绕过技术。
常见检测设备是否已经root的技术
下面从几种被应用程序广泛使用的检测技术开始说起。
如果设备已经root,会增加一些新的文件,所以可以通过检测这些文件是否存在来判断,还有一些开发者通过检查能否执行只有root权限下才能运行的命令来判断,当然还有一些其他的手段,下面一一道来。
1. Superuser.apk是一个被广泛使用的用来root安卓设备的软件,所以可以检查这个app是否存在。
2. 还可以搜索一些特殊的package,比如下图所展示的
上面的图片展示了一个叫做“eu.chainfire.supersu”的package,我曾经见过一些应用程序检测它。
3. 有一些应用程序只能在root的设备上运行,所以检查他们是否存在也是一个不错的方法。比如众所周知的Busybox:
4. 运行“su”和“id”,然后查看uid来检查。
上面是一些开发者们常用的方法来判断设备是否已经root,当然还有一些别的方法没有提到,以后我们会讲。
绕过root检测——demo
在这一章节,我们来讲讲如何绕过root检查,下载下面的软件
http://yunpan.cn/cfrXty5f7DDYT (提取码:fd17)
然后点击Is my device rooted按钮会检测设备是否已经root,我的设备目前已经root了,如下图:
下面我们开始。
理解程序的原理
我们首先要知道这个app是如何检测设备是否已经root的。先看下面的代码:
可以看出他简单的检查了/system/app/目录下是否存在Superuser.apk,如果存在,显示“Device Rooted(设备已经越狱)”。我有n种姿势可以绕过:
1. 首先我们通过su和id来再次确认设备是否root
2. 看看/system/app/目录下是否存在Superuser.apk
3. 我们修改一下应用的名字试试,改成Superuser0.apk吧。
啊哦,报错了,他是一个只读文件。
4. 那我们就把他改成可读写文件!
5. 改下名字
6. 下面再检查一下:
显示“Device Not Rooted(设备没有root)”
当然上面只是一个很简单的例子,对于那些初级的开发者还是有一些效果的,当然对于一些比较牛x的开发者,可能就没那么简单了,他们会用各种复杂的方法来检查。比如他们会通过下面的方法检查
Runtime.getRuntime().exec(“su”);
这样子的话我们也要改变一下,比如修改su命令来绕过。
总结
开发者阻止程序在root的设备上运行从安全的角度来说是一个不错的主意。但是大多时候这一检测可以被轻易的绕过,这就要求开发者们去寻找更复杂更高级的方法来检测,只有这样才能更好地防御攻击。
本文转载自 360安全播报