zoukankan      html  css  js  c++  java
  • Android的root学习

    Android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿。在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示输入root用户的密码,密码正确就获得root权限了。

    Android系统中,要想办法把编译好的su文件拷贝到Android手机的/system/bin或者/system/xbin/目录下,并且设置好权限才可以。Linux下su以后输入密码就可以root了,但Android里的su和Linux里的su是不一样的,Android里的su不是靠验证密码的,而是看你原来的权限是什么。意思就是如果你是root,那你可以通过su切换到别的用户,比如说shell,wifi,audio什么的。但如果你是root之外的其他用户,就不能切换回root了,会提示你permission denied。也就说用root运行su才有用。

    文件的权限:rws,它的执行权限标志位是一个s,s代表当任何一个用户执行该文件的时候都拥有文件所有者的权限,这文件的所有者是root,简单点说就是不管谁执行这个文件,他执行的时候都是以root身份执行的。
    也就说即使我不是root也有可能以root身份来执行程序,那么我就把一个所有者是root的su程序权限标志位置成-rwsr-xr-x,那么不管谁执行它,都是root身份执行,su就可以顺利执行成功了,执行成功之后我就是root身份了。

    问题都清楚了,就是你需要把一个所有者是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

     
    为什么su一定要放到/system/bin/or xbin等系统目录下?
    su不能放在data分区,研究了一下发现,原因是因为data分区在mount时就指定了不能给可执行程序加s位。
    在adb shell里执行mount,找到data分区的挂载,就可以看到是nosuid:
     
     
    可以重新挂载data分区达到目的:
    1、可以先把su文件放在data分区,设置好权限:
    adb shell
    cd data
    chmod 4777 su
    2、此时,不能自由的在root和shell之间切换(system/bin or xbin等系统目录可以)
    3、需要重新挂载一次data分区:
    命令模式,类似这样:mount -o rw,remount -t ext4 /system
    根据实际情况改为:mount -o rw,seclabel,suid,nodev,noatime,background_gc=on,discard,user_xattr,inline_xattr,acl,inline_data,inline_dentry,extent_cache,inline_encrypt,active_logs=6,remount -t f2fs /data
    此时执行相同的命令,不会再被拒绝,可以自由的在root和shell之间切换:
     
     
     
    参考文章:https://www.zhihu.com/question/21074979
     
  • 相关阅读:
    Hive-0.12.0 配置Mysql的Metasotre
    cdecl、stdcall、fastcall、thiscall函数调用约定区别 (转)
    汇编函数 哪些寄存器在使用时需要保护和恢复现场
    如何用C++ 写Python模块扩展(二)
    如何用C++ 写Python模块扩展(一)
    python装饰器装饰原理探秘
    Linux 命令
    iOS为所需要的视图添加模糊效果--UIVisualEffectView
    UIAlertView ----警告视图
    Virtual Box 下Ubuntu桥接网络设置
  • 原文地址:https://www.cnblogs.com/cqufengchao/p/6747167.html
Copyright © 2011-2022 走看看