zoukankan      html  css  js  c++  java
  • 【Android 进阶】临时卸载root和恢复root功能

    【前言】为什么有这个需求?

    Q:首先,谈谈为啥想要root呢?

    A:有root才能有控制权,也才能折腾很多东西,比如:删删流氓软件,用用代理、软件自动安装等;

    Q:然后,那么为何又需要删除root呢?

    A:有时候有些工具在已经root的机器上是不能执行的啦, 但是这些功能对我们也有很大的吸引力,比如:手机打卡呀 等等牛逼的功能;如果你也想要使用这些功能,同时又想要偶尔root一下的话, 那么恭喜你,可以通过如下的方式来搞定;

    一 准备篇

    1.1 要已有root权限

    至于如何获取root,这是最基本的了,百度一下很多工具都有一键root的功能;此处略过一万字;

    1.2 用到的终端工具

    推荐使用Better Terminal Emulator Pro,免费又好用;

    参考地址如下(百度手机助手搜索一下就行了):

    1.3 必备的知识

    1.3.1 关于mount

      默认启动后的系统分区都是只读的,所以就算你的手机已经root了,通过终端操作的时候,看到的也是只读的,不能修改,那么就需要重新挂载一次,主要是要挂载成可读写,核心脚本如下:

    mount -o remount,rw /emmc@android /system

    1.3.2 关于可执行权限

      简单来说在linux角度一个程序的各种权限是通过权限位来设置的,核心思想是:读权限值为4、写权限值为2、执行权限值为1,需要什么样的权限,那么就设置合适的权限值就行了,比如你要可读可写可执行,那么就是4+2+1=7;

      权限分组,linux一个文件权限分了3个部分,分别是: 拥有者的权限 拥有小组的权限 其他人的权限, 三个部分依次用3个8进制的数组和起来,所以一般权限位设置的时候看起来像 777、755 这样子的,就是所有人可读可写可执行 和 拥有者可读可写可执行、拥有该文件的小组的所有人可读可执行、其他人可读可执行;

      此处额外设置一下suid和guid,故整个权限位变成了 6755, 前面的6让普通用户执行su的时候感觉是root在执行一样;

    chmod 6755 /system/xbin/su

    详细的可以参考: http://blog.chinaunix.net/uid-26642180-id-3378119.html

    也可以搜索一下: suid guid 关键字

    二 行动篇

    2.1 查看分区情况

    打开超级终端,输入mount命令,查看当前是哪个分区挂载到了 /system这个目录,我的系统是挂载了 /emmc@android 到 /system下,参考下图:

    如需使用,请输入mount查看您的磁盘分区路径;

    2.2 查看需找su路径

    一般su所在路径是:

    /system/xbin/su
    /system/bin/su

    后续假设都在通用的 /system/xbin/su 路径下;

    2.3 准备写脚本

    2.3.1 备份原来的su程序broot.sh

    #!/system/bin/sh
    /system/xbin/su -c "mount -o remount,rw /emmc@android /system"
    /system/xbin/su -c "cp /system/xbin/su /system/su"
    /system/xbin/su -c "mount -o remount,ro /emmc@android /system"

    这个脚本一般执行一次就可以了,也可以通过Root Explorer来实现备份!

    2.3.2 获取root的程序groot.sh

    #!/system/bin/sh
    /system/su -c "mount -o remount,rw /emmc@android /system"
    /system/su -c "cp /system/su /system/xbin/su"
    /system/su -c "chmod 6755 /system/xbin/su"
    /system/su -c "mount -o remount,ro /emmc@android /system"

    实现原理是,利用上面备份好的su,来执行以下几步:

    • 重新挂载system分区为可读可写;
    • 拷贝备份的su到xbin目录下
    • 设置合适的权限;
    • 重新挂载分区为只读模式;

    2.3.3 删除root的程序droot.sh

    特别注意,必须先参考2.3.1的脚本备份su到/system/su目录下,然后才能执行这个程序,不然没了root后果自负哦;

    #!/system/bin/sh
    /system/su -c "mount -o remount,rw /emmc@android /system"
    /system/su -c "mv /system/xbin/su /system/xbin/su.bak"
    /system/su -c "mount -o remount,ro /emmc@android /system"

    实现原理是,利用上面备份好的su,来执行以下几步:

    • 重新挂载system分区为可读可写;
    • 将xbin下的su重命名为su.bak;
    • 重新挂载分区为只读模式;

    三 坐享其成

    3.1 下载工具

    基本脚本都写好了,到这里来下载吧 :)

    http://yunpan.cn/cfwmQui82UXZt (提取码:c7a3)

    3.2 执行实例

    执行步骤详解如下:

    sh broot.sh # 备份su
    
    ls -al /system/su # 检查备份结果
    
    sh droot.sh # 删除su,移除root权限,特别要小心!!!保证前面备份成功啊!!!
    
    su # 检查是否成功移除,出现not found表示移除成功了;
    
    su groot.sh # 恢复su,恢复了root权限,恭喜 :)
    
    su # 检查是否恢复成功,执行不报错,前面提示符编程 '#'表示成功;
    
    exit # 退出root模式

    有图有真相!!!

    【测试机型】 红米Note联通版, HM NOTE 1W;

    欢迎大家交流 :)

  • 相关阅读:
    'Undefined symbols for architecture i386,clang: error: linker command failed with exit code 1
    The codesign tool requires there only be one 解决办法
    XCode iOS project only shows “My Mac 64bit” but not simulator or device
    Provisioning profile XXXX can't be found 的解决办法
    UIView 中的控件事件穿透 Passthrough 的实现
    Xcode4.5出现时的OC新语法
    xcode 快捷键(持续更新)
    打越狱包
    php缓存与加速分析与汇总
    浏览器的判断
  • 原文地址:https://www.cnblogs.com/QuLory/p/4152349.html
Copyright © 2011-2022 走看看