我在another answer中读到,在AndroID上,su二进制文件通过使用cap_setuID等文件系统功能来避免需要setuID.但后来我试着检查一下,令我惊讶的是,我发现在我的支持Magisk的AndroID 8.0系统上没有设置任何功能.
这是我检查的方式:
>通过SimpleSSHD登录
> scp从Debian arm64包中获取以下二进制文件libcap2,libcap2-bin和libc6:
> getcap
> libc.so.6
> libcap.so.2.25
> libcap.so.2
> ld-2.27.so
>手机上有以下终端会话:
$su# whoamiroot# exit$type susu is /sbin/su$ls -lh /sbin/sulrwxrwxrwx 1 root root 12 2018-08-12 22:40 /sbin/su -> /sbin/magisk$ls -lh /sbin/magisk-rwxr-xr-x 1 root root 94 2018-08-12 22:40 /sbin/magisk$sed 's@^@> @' /sbin/magisk> #!/system/bin/sh> unset LD_liBRARY_PATH> unset LD_PRELOAD> exec /sbin/magisk.bin "${0##*/}" "$@"$ls -lh /sbin/magisk.bin-rwxr-xr-x 1 root root 71K 2018-08-12 22:40 /sbin/magisk.bin$file /sbin/magisk.bin/sbin/magisk.bin: ELF shared object, 32-bit LSB arm, dynamic (/system/bin/linker), stripped$LD_liBRARY_PATH=. ./ld-2.27.so ./getcap -v /sbin/magisk.bin/sbin/magisk.bin
如您所见,/ sbin / magisk.bin二进制文件中既没有setuID位也没有任何功能.发生什么了?它是如何工作的?
解决方法:
看来/sbin/magisk.bin非root用户启动不会自己生成root shell.相反,它将其请求传递给magiskd,它以root身份执行.并且在检查权限后,magiskd执行请求的命令. (有趣的是,magiskd是相同的二进制文件 – /sbin/magisk.bin,但是作为root运行init).
您可以按如下方式检查:
$echo $699$su# echo $PPID2606# exit$su# echo $PPID2606# ps -A|egrep '^[^ ]+ +2606'root 2606 1 16044 2068 __skb_recv_datagram eb4d2fe0 S magiskd
请注意,在上面的输出中,在我们退出超级用户shell并重新输入之后,父PID仍然保持不变(此会话中为2606),但不等于原始非root shell的PID(此会话中为27699) ).此外,magiskd的父PID是1,即init,这是另一个确认它不是我们从非root shell开始的.
总结以上是内存溢出为你收集整理的root – 如果没有setuid和功能,Android上的Magisk如何工作?全部内容,希望文章能够帮你解决root – 如果没有setuid和功能,Android上的Magisk如何工作?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)