首页 > > > Android root破解原理(二)

Android系统本质就是一个Linux 系统,Linux系统的强大在于多用户管理,对于不同的用户给不同的权限,Linux系统里面有一个超级用户,叫做su,如果你能获取su用户执行的命令,那你就获得了超级用户权限。
超级用户可以干什么?
回答,超级用户可以在你的手机里干任何事情,他可以直接rm -rf *
举个例子
普通用户user模式下,ls命令都执行不了

如果我切换到超级用户su就可以执行ls命令

还有其他功能,比如安装软件,读取短信等
你想在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示你输入root用户的密码,密码正确就获得root权限了。Android本身就不想让你获得Root权限,大部分手机出厂的时候根本就没有su这个程序,直接把su可执行程序删除掉,所以你想获得Android的root权限,第一步就是要把编译好的su文件拷贝到Android手机的/system/bin或者/system/xbin/目录下。我们先假设你可以把su放在xbin下,接下来你可以在Android手机的adb shell或者串口下输入su了。
Linux下su以后输入密码就可以root了,但Android里的su和Linux里的su是不一样的,Android里的su不是靠验证密码的,而是看你原来的权限是什么。意思就是如果你是root,那你可以通过su切换到别的用户,比如说shell,wifi,audio什么的。但如果你是root之外的其他用户,就不能切换回root了,会提示你permission denied。
所以Android root 无非做了两个操作
1、给android手机的system/bin/目录增加 su命令
2、安装一个super.apk用来给其他应用授权权限
问题都清楚了,就是你需要把一个所有者是root的su拷贝到Android手机上,并且把su的权限标志位置成-rwsr-xr-x。能把这个事情搞定你就成功root了一个手机。
cp /data/tmp/su /system/bin/ #copy su 到/system/分区
chown root:root su #su的所有者置成root
chmod 4775 /system/bin/su #把su置成-rwsr-xr-x然而,执行上面的每一行代码都需要root权限才能成功。
意思就是说,你只有有root权限的情况下才能执行上面两行代码,而这两行代码就是为了让你获得root权限的,这是一个逻辑闭环,那么如何打破这个逻辑闭环呢?
一个办法就是找一个本身已经有root权限的进程来启动我上面的两行代码,那我这两行代码一启动就是root权限,就可以顺利执行了。但是已经有root权限的进程都是出厂时候就装到手机上的,代码写死了,你没法控制它执行你自己的代码啊。这个时候就需要你找漏洞了,比如用来破解Android2.3 root权限的zergRush漏洞就是利用一个拥有root权限的进程栈溢出漏洞。
很多破解的方法都是从adb入手,因为adb刚出生的时候就是root权限
因为下面两行代码让他变成了shell用户
drop_privileges函数就是改变权限的,关键代码如下
if (should_drop_privileges()) { //should_drop_privileges返回值决定权限
drop_capabilities_bounding_set_if_needed();
minijail_change_gid(jail.get(), AID_SHELL);
minijail_change_uid(jail.get(), AID_SHELL);
// minijail_enter() will abort if any priv-dropping step fails.
minijail_enter(jail.get());
D("Local port disabled");
} else {最初的破解方式就是让adb代码里面从root用户降级到shell用户失败,间接让adb保持root权限,随着android升级后,这部分做了优化,最初的代码是
/* then switch user and group to "shell" */
setgid(AID_SHELL);
setuid(AID_SHELL);代码之前都是root权限,只有执行这两句之后才变成shell权限的。
这样我们就可以引出root破解过程中获得root权限的方法了,那就是让以上面setgid和setuid函数执行失败,也就是降级失败,那就继续在root权限下面运行了。
这其实利用了一个RageAgainstTheCage漏洞,具体分析请参考《 Android adb setuid提权漏洞的分析》。
这时重新用adb连接设备,则adb将会运行在root权限下面了。
su这个执行打包在boot.img里面,如果获取手机厂商的烧录工具和源码,编译一个boot.img重新烧录是最直接的,如果开发人员如破解者合作,破解手机的机密不是不可能。
原文作者:;如有侵权,请联系管理员删除。