Android 5.0 Lollipop 如何像4.2.2一样通过su命令获取root权限

   日期:2024-12-27    作者:32je8 移动:http://mip.riyuangf.com/mobile/quote/64659.html

4.2.2(Jelly Bean)上root的方法比较简单,调用su命令就可以获取到root权限并执行一些命令。但是在Android 4.3+到5.0,Google为这种root方法设置了层层障碍
1. su命令源码中添加了uid检验,只允许shell/root用户进行调用 
2. Zygote源码中添加了添加DropCapabilitiesBoundingSet屏蔽APP了setuid的功能
3. adb源码中添加了添加should_drop_privileges屏蔽adb了setuid的功能(对于userdebug/eng版本该函数未被调用)
4. 开启了SELinux安全模块,1,2条都满足情况下也会被中断su。


针对前三项的解决方法是按照以下diff文件进行修改代码并重新编译Android系统

  • su命令源码中添加了uid检验,只允许shell/root用户进行调用 
  • Zygote源码中添加了添加DropCapabilitiesBoundingSet屏蔽APP了setuid的功能
  • adb源码中添加了添加should_drop_privileges屏蔽adb了setuid的功能(对于userdebug/eng版本该函数未被调用)

以上三项需要改动代码并重新编译Android系统。
1,2,3代码修改的diff文件


设置SELinux权限为Permissive

我是尽量把事情简单化,这次这里讨论的是SELinux,其实现原理会比较复杂,我这里只是简单记录在Android 5.0 + Linux 3.4如何将SELinux降级,这么做的原因是实现:APP可以调用su命令最终实现运行一些命令。

SELinux常用状态有两个 和 ,后者会使APP无法调用su命令,前者可以。
1. 查询当前SELinux状态

运行该命令后,会输出当前系统的SELinux权限 和 。
2. 在eng/userdebug版本 将SELinux 模式调整到Permissive mode

  • 临时方案:运行如下命令(无需重启系统,即刻见效
  • 长久方案:在启动参数中添加

root不成功主要是因为没有改全这些项,有其中一项没有改好都会造成root不成功。这里把每项没有改好会造成的问题列出来以供参考。

  1. 安装运行 HelloRoot App,这是一个协助查看是否能获取root权限的小工具。

  2. 查看HelloRoot的Application user id

其中就是HelloRoot的Application user id了,这个id在下面步骤中会用到

  1. 切换到用户下并运行命令
不正常的话会出现如下错误
这个属于u0_a50对su无可执行权限,说明 中需要改的内容没有改或者是没有改成功。
这个属于su不允许su和shell以外的用户(比如u0_a50)调用,说明 中需要改的内容没有改或者是没有改成功。

点击CheckRoot按钮,判断App是否可以root,如果Log信息如下

A. 出现这个问题是由于没有将SELinux关闭,需要按照以下方法查看

需要按照「设置SELinux权限为Permissive」进行设置。
B. 无法setuid的限制修改
和修改。


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号