为什么不能简单地复制su二进制文件(请提供技术回复)


18

我已经扎根了几个三星设备和潜在的“目标”,可以这么说,似乎是要获取su二进制文件/system/xbin并安装Superuser.apk

我的问题是,为什么必须跳过所有这些箍以扎根手机(安装自定义恢复和闪存预植的ROM或利用当前安装)?难道不能只是下载预编译的su,将其移至SD卡,然后通过adb运行它吗?使ROM“预植”的原因是它在各自的系统路径中具有Superuser和su二进制文件。我不明白为什么它如此重要以至于它被淘汰了/system/xbin

Answers:


24

su二进制文件需要同时设置执行和setuid许可权位。首先需要执行该文件,其次是使用文件所有者的权限(设置用户ID或setuid来自动运行)。在这种情况下,所有者为root。在此处了解更多信息

外部存储上的文件没有设置可执行文件和setuid权限位,没有根权限就无法授予该文件。还要注意,SD卡已安装了'noexec'标志,以防止通常执行以引导:

shell@android:/sdcard $ ./su
/system/bin/sh: ./su: can't execute: Permission denied
126|shell@android:/sdcard $ chmod 4755 su
Unable to chmod su: Operation not permitted
10|shell@android:/sdcard $ mount | grep /mnt/sdcard
/dev/block/mmcblk0p1 /mnt/sdcard vfat [...],noexec,[...]

从根本上讲,这就是为什么您不能只复制su到SD卡上然后运行它来授予自己root用户的原因。


因此,这是唯一防止生根的事实,因为/ sdcard无法执行,因此您无法chmod?一旦su在适当的位置,可以对其进行更改,这就是您的黄金。我认为将存在一层安全措施,以防止某人简单地运行su。在服务器和debian机器上,我不能仅以普通用户身份运行su,提示输入密码。我猜想这种假设是,如果可以安装su,他们可以覆盖影子文件来更改密码?
user974896

3
@ user974896:那么有没有其他地方的非系统用户将它,它可以被执行,而Android甚至没有passwdshadow文件反正。从字面上看,您确实需要root才能放置su在可执行位置,这就是为什么rooting方法要么涉及特权升级漏洞利用,要么进入自定义恢复(所有赌注基本都未启用)的原因。
eldarerathis 2012年

是。这就是答案。
Android Quesito,2012年

3
@ user974896:除了将/ sdcard挂载到noexec之外,仅当在可执行文件中设置suid权限时,才可以调用setuid系统调用,而chown和chmod系统调用将仅允许root设置文件的setuid位。由root拥有(实际上,只有root才能创建可以以root特权运行的可执行文件)。任何人都可以调用su,但是除非在超级用户的数据库中(或在传统的Linux中,在passwd / shadow数据库中)允许调用者进行调用,否则该调用将不会成功。只有超级用户应用程序(和特权进程)才能修改超级用户的数据库。
Lie Ryan

3
@ user974896:这不仅是Android中每个dalvik应用程序都以其自己的用户身份运行的常规安全系统,还意味着只有Superuser白名单中的应用程序可以在没有提示的情况下升级为root用户的应用程序,其他所有人都会被拒绝(如果在黑名单中),否则将导致超级用户提示用户许可。
Lie Ryan

5

生根涉及利用依赖于android版本的弱点,因此“ 跳过所有障碍以使手机生根

它是鸡和蛋!

为了利用root用户,您需要在手机上使用不安全的adb守护程序(即重新挂载的功能/system),而为了使用不安全的adb,则需要root用户!并且,您需要一个未锁定的引导程序。

看一下在github上找到的一种称为zergRush的漏洞;所关注的函数在通过连接到它所拥有的管道而试图“破坏” 守护程序的堆栈框架的情况下被调用,并通过覆盖指向已复制的堆栈指针的堆栈来使其崩溃然后从运行的shell版本。do_fault()voldboomsh/data/local/tmp

阅读源代码之后,您现在将了解,为什么复制su二进制文件不足以使手机“扎根”,以及为什么必须跳过箍圈。而且,由于SD卡在文件系统级别上的可执行位被阻止,因此不要去那里-出于明显的原因!:)


感谢您的链接,我将在以后阅读它们。因此,即使sdcard在出厂时已被777修改,我仍然无法通过简单地下载并执行来成为root用户?
user974896 2012年

1
正确!不行!chmod没什么大不了的,因为出厂时安装的ROM具有保护lá的功能,所以您需要root才能实现-ding SDcard的权限!:)
t0mm13b 2012年

1
那么,让su在/ system / xbin中如此特别的原因是什么?如果输入adb shell(或以普通用户身份运行应用程序),则您是非特权用户。为什么在/ system / xbin中执行su而不是在理论上的chmod 777 / sdcard中运行su会使您变得根?
user974896

/system/xbin是busybox实用程序进入的目录,并且...在已扎根的手机中,发出此命令echo $PATH将产生/ sbin:/ vendor / bin:/ system / sbin:/ system / bin:/ system / xbin <-注意!它在路上!为了在那有那个,你需要生根,因此需要很多鸡和蛋的情况...:D
t0mm13b 2012年

是的,我知道默认情况下就是这样。我的意思是在那里运行它的特别之处。假设工厂出厂的ROM的目录已更改为777,为什么在/ sdcard /,/ data /或任何非root用户必需的目录中执行./su都不起作用。运行./su的事实是,非root用户可以在其中执行此操作的目录是不可执行的,或者存在更大的局面。
user974896 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.