闲聊ROOT权限——ROOT权限的前世今生

战绩分享的具体实现步骤 战绩分享是很多游戏都需要的功能,但是游戏很一般不会在打完一局后自动分享战绩,都需进行手动分享,今天就来说一说怎么分享 首先:闲聊里的战绩自动分享就很简单只需要将分享机器人拉进群里,然后提供闲来合伙人账号、闲聊群名字、亲友圈ID进行绑定就可以了,绑定成功后就可以实现自动分享了 操作步骤来源于➡️具体参考 基本用法 adb能做什么?答案是所有能对手机的操作都能用adb实现。也就是说如果... 阅读详情

最近工作一直很忙,竟然慢慢地疏远了优快云的博客,然而在工作中遇到问题,又会被多次的引导至优快云,故笔者抽空也将自己学习的成果与大家分享在这里,希望能帮助到需要帮助的人。

本文将从几个方面,由浅至深地讲述ROOT到底是什么东西?


一. ROOT权限简单介绍

二.为什么需要ROOT

三. ADBD的ROOT权限

四.深入源代码


ROOT权限简介:

ROOT权限是Linux内核中的最高权限,如果你的身份是ROOT,那么你就具有了ROOT权限。有了最高权限,你就可以为所欲为,换句话说,如果恶意程序获取到了ROOT权限,那么就可以肆意地破坏你的手机,获取的隐私...所以厂商一般在生产手机的时候,不会提供给用户ROOT权限,官方宣称是为了保护用户手机的安全,然后装了一堆开机自动启动,而用户这辈子也用不到也卸载不了垃圾软件(相信使用安卓的同学们都懂我的意思),而苹果所说的越狱,也就是获取ROOT权限。


为什么需要获取ROOT权限?

苹果用户获取ROOT权限,是为了可以免费安装各种软件,以及为了获取更加灵活的操作体验,苹果不会安装一堆恶心的软件;而安卓普通用户获取ROOT权限,最大的目的就是为了卸载这些恶心的自带软件,安卓极客用户则是为了各种折腾安卓手机,安卓开发人员是为了得到日志文件,分析BUG。


ADBD的ROOT权限:

ADBD是什么?相信大家都看过,IT男把手机连上电脑,然后不知怎么的弹出一个黑乎乎的窗口,上面有一排排白色的英文字母,然后帅气的敲击着键盘(一般敲击 adb shell,然后进入手机),啪啪几下,可以帮你解决一些手机的问题。这个可以和手机交互的进程就是ADBD。这就好比,你去朋友家玩,然后你朋友家比较高端,进大门之前有个可视对讲机,那么你首先通过对讲机呼叫朋友(敲击adb shell),看看在不在家(手机是否相应adb shell这个命令),如果朋友在家,那么就会通过对讲机为你开门(成功进入手机中),提供这个服务的可视对讲机就相当于ADBD。说白了,ADBD就是可以为你提供一种进入手机内部的服务通道。

那么为什么需要ADBD具有ROOT权限?这就涉及到另一个与ROOT息息相关的东西——su。

我们开机之后,使用手机的身份就是一个普通用户(user),如果执行su,那么就可以直接切换到ROOT身份。就像仙剑奇侠传三里面的景天,是个凡人,法力有限,但是大家都知道,他的前世是飞蓬将军,法力高强,天界无人能敌,只有魔界至尊重楼可以与他一较高下,当他们来到天庭的时候,玉帝施法,让景天直接切换成飞蓬将军,于是他就有了飞蓬将军的记忆和法力,与重楼又一次大战。su就是这样一个神奇的命令。

高通平台上,su的相关代码位于: LINUX/android/system/extras/su/su.c中

其实我们所说的越狱或者ROOT,就是把su安装到手机里面 /system/bin目录下,并把它的权限设置为4755,那么某些程序需要ROOT权限的时候,就可以通过su切换到ROOT身份,然后去执行,因此一般被ROOT的手机都会安装一个“超级用户”这样的应用,就是用于管理哪些软件可以切换到ROOT身份,哪些不可以,保证用户安全,这个想法是很好很天真,对于正规的软件,人家按照你的路子来,不正规的软件,你一个小小的超级用户的应用,岂能挡我获取ROOT,虐不死你。

那么为什么需要ADBD获取ROOT权限呢?经过上面的讲解大家应该能猜到,如果ADBD有ROOT权限,就可以通过adb 工具,为所欲为,而又不留下痕迹(不安装su),可以删除自带垃圾软件,获取任意目录的文件,安全性较高。笔者就是通过这种方式获取一些系统级别文件。


深入代码:

看了上面的文字,也许很多人会有这样的想法,原来ROOT一个手机这么简单?错!一点也不简单。

首先:/system分区是只读的文件系统,即你无法往system分区中写入任何东西,其次就算你侥幸把su安装到/system/bin下,你也没法修改它的权限为4755,再者,即使你侥幸把su的权限设为4755,你也逃不过有些手机的反root机制(即检测到有文件的权限为4755,就删除)。

首先我们来看看su的部分代码:

    /* Until we have something better, only root and the shell can use su. */  
      myuid = getuid();  
       if (myuid != AID_ROOT && myuid != AID_SHELL) {  
           fprintf(stderr,"su: uid %d not allowed to su\n", myuid);  
           return 1;  
       }  

这句话告诉我们,如果执行su的不是ROOT或者SHELL用户,那就直接退出,说明切换身份时候,你必须是这两个用户,还好我们用adb shell进入,是SHELL用户,好险啊。

    if(argc < 2) {  
            uid = gid = 0;  
        } else {  
            int gids_count = sizeof(gids)/sizeof(gids[0]);  
            extract_uidgids(argv[1], &uid, &gid, gids, &gids_count);  
            if(gids_count) {  
                if(setgroups(gids_count, gids)) {  
                    fprintf(stderr, "su: failed to set groups\n");  
                    return 1;  
                }  
            }  
        }  

判断执行su的时候,有没有其它参数,我们只是执行su,即argc < 2成立,su也可以切换成其它用户(argc > 2,详细看su命令的使用),这时候,uid 和 gid 都被设置为0 。即ROOT用户的ID号和组号

    if(setgid(gid) || setuid(uid)) {  
            fprintf(stderr,"su: permission denied\n");  
            return 1;  
       }  

来了来了,就是它,这就是我们最终的目的,把我变身成飞蓬将军,如果一切顺利,你就可以变身成功了(切换ROOT成功)

    /* Default exec shell. */  
        execlp("/system/bin/sh", "sh", NULL);  

每次su之后,就会变成root#,然后就可以通过控制台继续敲命令,但是不同的是,你已经是ROOT了,权限已经很大了。

Android系统启动的时候,ADBD是ROOT权限,只是后来被降级了,判断是否降级的函数是should_drop_privileges()

这个函数:

    static int should_drop_privileges() {  
    #ifndef ALLOW_ADBD_ROOT  
        return 1;  
    #else /* ALLOW_ADBD_ROOT */  

首先判断是否定义了ALLOW_ADBD_ROOT,如果系统都不允许你ROOT,就直接返回1,下面什么都不看了,就像找工作的时候,不管你多么厉害,如果你第一条要求都不符合,就直接把你pass了,说什么都没用,够狠的。

 int secure = 0;  
  char value[PROPERTY_VALUE_MAX];  
  
/* run adbd in secure mode if ro.secure is set and 
  ** we are not in the emulator 
  */  
 property_get("ro.kernel.qemu", value, "");  
  if (strcmp(value, "1") != 0) {  
      property_get("ro.secure", value, "1");  
      if (strcmp(value, "1") == 0) {  
          // don't run as root if ro.secure is set...  
          secure = 1;  


下面就是获取系统的属性,判断是否打开ROOT权限,可以看到如果ro.kernel.qumu 这个属性被置为了,没关系再给你一次机会,判断ro.secure是否也是1,如果是,对不起你无法获得root权限,我要把secure置为1了(secure为1意味着要降级,后面会讲解),接着:

       // ... except we allow running as root in userdebug builds if the  
        // service.adb.root property has been set by the "adb root" command  
        property_get("ro.debuggable", value, "");  
        if (strcmp(value, "1") == 0) {  
            property_get("service.adb.root", value, "");  
            if (strcmp(value, "1") == 0) {  
  secure = 0;  
            }  
        }  
    }  
}
哈哈,又给了你一次机会,我再来判断ro.debuggable是不是1,如果不是,对不起,我必须要降级,否则再给你一次机会,判断service.adb.root这个属性的值,如果也是1,那么就不降级,一般在编译ROM版本的时候,会同事编译两个版本,一个是工程版本,是具有ROOT权限的ADBD,这样方便开发者调试系统,另一个就是我们用户用的版本,叫user版本,这个是没有ROOT权限的,可以看到,就是通过property_get一系列属性来判断是否降级。

        return secure;  
    #endif /* ALLOW_ADBD_ROOT */  
    }  

最后,返回secure即可。可以看到最后决定是否降级的变量就是secure,所有如果有源代码的话,只有最后将secure赋值为0,不管什么版本,最后都是ROOT权限。

    if (should_drop_privileges()) {  
            drop_capabilities_bounding_set_if_needed();  
      
            gid_t groups[] = { AID_ADB, AID_LOG, AID_INPUT, AID_INET,  
                               AID_NET_BT, AID_NET_BT_ADMIN, AID_SDCARD_R, AID_SDCARD_RW,  
                               AID_NET_BW_STATS };  
            if (setgroups(sizeof(groups)/sizeof(groups[0]), groups) != 0) {  
                exit(1);  
      
            /* then switch user and group to "shell" */  
            if (setgid(AID_SHELL) != 0) {<span style="white-space:pre">           //曾经的漏洞,被封住了  
                exit(1);  
            }  
            if (setuid(AID_SHELL) != 0) {<span style="white-space:pre">           //曾经的漏洞  
                exit(1);  
            }  
      
            D("Local port disabled\n");  
        }   

从这段代码可以看到,如果should_drop_privileges返回1,那么就可以降级了,降级函数为setgid(AID_SHELL)和setuid(AID_SHELL),曾经有黑客利用一些方法,使得setgid和setuid执行失败,即降级失败,以前的代码中是没有exit的,那么当setuid和setgid执行失败之后,就不会降级。

ROOT不是那么轻易的,现在有很多已知的漏洞,但是都被封锁了,所有不是每个root工具都

原文地址:http://blog.youkuaiyun.com/memoryjs/article/details/39023729

Linux运维之切换到 root 用户 本章介绍Linux里如何操作非root用户,切换到root用户。在 Linux 系统中需要 root 权限执行命令,有两种方式可以做到,一种是使用 sudo 临时切获得 root 用户的权限,一种是使用 su 切换到 root 用户。 阅读详情

相关推荐

安卓逆向:什么是root?

最新的安装步骤为:用户下载最新的 Magisk Manager apk 文件进行应用的安装,然后将 apk 文件的扩展名改为 . zip,进入 TWRP 环境刷入即可。此时进入系统,你会发现你已经成功安装了 Magisk(如果显示没有安装则为获取失败,请检查操作过程重新尝试),但这还不够,我们还得进入 Magisk Manager,选择安装(install)——install——Direct Install(直接安装)才能将临时 root 转换为永久 root。

2401_82590480的博客 6064

centos-stream-9上安装nvidia驱动和cuda-toolkit

centos-stream-9上安装nvidia驱动和cuda-toolkit

qq_19072921的博客 3020

【解决】已root, 提示‘adbd cannot run as root in production builds‘,adb push /adb pull 到系统目录 解决方案

脚本我已经写好了adbpush.sh 、adbpull.sh、 adbpull.bat、adbpush.bat,兼容所有PC系统: 下载地址:adbpush_pull.rar-OS文档类资源-优快云下载 用法和 adb push/pull 一样,参数也一样。 如: 1、push 文件到手机里 adbpush.bat F:\111.txt /data/data/ 2、pull 文件到电脑上 adbpull.bat /data/data/111.txt F:\txt\ 不同系统选择不同目录的...

键盘的起始页 4259

通义千问AI模型对接飞书机器人-集成飞书机器人(2-2)

http请求地址上一篇百炼平台配置的应用地址。

hefaji的博客 1916

Ansys Lumerical实战:5步搞定Mach-Zehnder调制器多物理场仿真(附眼图分析技巧)

本文详细介绍了使用Ansys Lumerical进行行波马赫-曾德尔调制器多物理场仿真的完整流程。通过CHARGE、MODE和INTERCONNECT三大模块的协同工作,从电学参数提取、光学射频特性分析到系统级眼图评估,分步解析了高效仿真与性能优化的核心技巧,为硅光调制器设计提供了实战指南。

weixin_29056781的博客 542

[置顶] Android adb root权限

永久root带文件 因为开发需要,我经常会用到adb这个工具(Android Debug Bridge),我们都知道adb shell默认是没有root权限的,修改系统文件就很不方便了,adb push一个文件就提示Permission Denied。删除system下的文件也没有权限。其实有两种方法可以获取adb shell的root权限,这两种方法的前提都是手机已经root。 1、用s...

weixin_30655569的博客 1886

海思ISP实战:YUV Sharpen参数调试全解析

本文深入解析了在海思ISP平台上进行YUV Sharpen参数调试的实战经验。文章以海思3516EV300芯片为例,详细拆解了EdgeFiltStr、TextureFreq等核心参数的作用与协同策略,并重点阐述了如何通过ISO联动调试,在图像清晰度与噪声抑制之间取得最佳平衡,为图像调试工程师提供了宝贵的避坑指南和实战参考。

grape的博客 209

adb复制root到手机,怎样通过adb命令来root手机

注意:获取Root权限过程有风险,后果自负 Universal Androot 手机上运行破解软件(Z4ROOT,KINGROOT,) 这类获取Root权限的软件效果因“机型”而异,而且成功率不高,想想也知道了:在一个没有Root的手机上以普通权限运行软件妄图取得Root权限,难度可想而知。1.先用电脑端的360手机管家为手机安装adb驱动,当然,你也可以直接复制驱动到c:system32。给手机录取权限的话,这个可以去下载一个root大师,然后把手机root一下之后,那么就可以卸载相关的软件了。

weixin_44884047的博客 2万+

无人驾驶感知融合——横摆角速度的多源估计算法解析

本文深入解析了无人驾驶感知融合中的横摆角速度多源估计算法,详细介绍了轮速差法、侧向加速度法、曲率法和惯性传感器直读法四种计算方法及其优缺点。通过卡尔曼滤波实战案例,展示了多源融合算法在提升精度和稳定性方面的显著优势,并探讨了工程实践中的时间对齐、坐标系统一等关键问题。

weixin_31458015的博客 462

大数据国赛第2套任务C-子任务一特征工程

根据**Hudi**的dwd_ds_hudi库中相关表或MySQL中shtd_store中相关表(order_detail、sku_info),计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),将10位用户id进行输出,若与多个用户购买的商品种类相同,则输出结果按照用户id升序排序,输出格式如下,将结果截图粘贴至客户端桌面【Release任务C提交结果.docx】中对应的任务序号下;

weixin_44117248的博客 903

nginx $mail->send()发送邮件报错_闲聊nginx之403

序言你也配看我的文章,我和你有何交情?什么样的问题最好玩?诡异的问题。。。什么样的技术最好玩?逻辑复杂的技术。。。什么样的人最令人厌恶?fucking pussy,有本事对刚。nginx 流下了没本事的泪水。一个问题的诞生,一般都只能看到表面现象,而实际的内在则是存在各种各样的问题,而解决一个问题,则是一个逐步判断的过程,根据一些现象,推测其可能出现的问题,...

weixin_39585761的博客 197

简单记录一次拿网站后台的过程

本文章重在让大家了解拿后台的逻辑与流程,请不要利用此文章的内容对别人的网站进行攻击破坏,否则后果自负,作者不承担任何责任。

kk的博客 918

权限相关的命令

su 切换用户(root用户切到其他用户不需要输密码,普通用户切到其他用户需要输密码) su - Ylem:切换到Ylem用户 chown 更改文件或文件夹的拥有者 chown 用户:用户组 文件/文件夹:chown wzx:root hades01【将hades01文件的拥有者改为用户组为root的wzx】 chown -R wzx:root hades02【将hades02文件夹及其文件夹内所有文件/文件夹的拥有者改为用户组为root的wzx】 chmod 更改文件/文件夹的权限 一个文件/

Orlando的博客 551

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

普通用户nginx访问不了_闲聊nginx之403

序言你也配看我的文章,我和你有何交情?什么样的问题最好玩?诡异的问题。。。什么样的技术最好玩?逻辑复杂的技术。。。什么样的人最令人厌恶?fucking pussy,有本事对刚。nginx 流下了没本事的泪水。一个问题的诞生,一般都只能看到表面现象,而实际的内在则是存在各种各样的问题,而解决一个问题,则是一个逐步判断的过程,根据一些现象,推测其可能出现的问题,...

weixin_35725410的博客 234

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

闲聊mysql的授权方式 -- 小黑框

话说纷纭 ,权限和授权到底是个毛东西? ******1.在企业中老板能看到下面所有的员工信息,而你不能不看到其他人的信息   --- 这就是权限,接下来我们开始解密权限 ********数据库的账号中有个最大的账号也叫初始账号:root   ********它所拥有的权限有查询用户信息等,修改,增加用户或者发布公告等  1.查看数据库账户有哪些: SELECT user,host FROM...

weixin_40428902的博客 396

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

闲聊:Android 平台网络游戏加速器(二)

上偏关于 Android 网络游戏加速器加速器得文章: ​​​​​​闲聊:Android 平台网络游戏加速器·一(科普文)_liulilittle的博客-优快云博客 本文只谈关于 Android 上面几个 “加速器” 适配器架构方案的方面得问题,目前 Android 上面实现加速器,主要有两个流派: 1、MPA架构(多进程架构) 2、MTA架构(多线程架构) 两个方案各有优缺点,基本适用MTA架构得基本是通过 Golang 实现的,没错就是 Google 那个 Go 语言来实现整个 “网络游戏加

liulilittle的博客 7950

docker迁移root目录

迁移原因:磁盘根目录满了,通过命令du -h --max-depth=1发现/var/lib/docker占用的空间过大把 Docker 的 root 目录(默认 )迁移到新位置,同时完整保留已有镜像、容器、卷,只需 4 步,零 downtime(Docker ≥ 20.10 验证可行): 1. 停止 Docker 服务 2. 迁移现有数据(保留权限、硬链接) -a = 保留权限、时间戳、软硬链接;-P = 进度+断点续传。 数据量大可先做第一次全量,再停 Docker 做第二次增量(几

liu_xue_xue的专栏 87

Ubuntu20.04LTS 安装配置

Ubuntu20.04配置安装,一套完整服务,满足开发需求

汝嫣兮的博客 3509

ubuntu18给当前用户安装cuda11.2 图文教程 、 配置cuDNN8.1 ——【一文读懂】

之前的一篇 Cuda10 安装博文 Linux服务器下给当前用户安装自己的CUDA | Cuda10.0 安装cuda11.2的原因 原因 基础条件 # 服务器当前,Cuda内核版本足够高,使得普通用户能够安装自己的 CUDA Version: 11.2.0 nvidia-smi NVIDIA-SMI 460.80 Driver Version: 460.80 CUDA Version: 11.2 为什么写了该博文 当前的Cuda在Linux服.

专注于AI领域前沿技术学习与分享:目标检测、图像修复、超分重建、AI工程化 4687

AI代理安全新挑战:非对抗性内容如何引发权限升级风险

在人工智能与机器学习领域,模型安全性和鲁棒性是保障系统可靠运行的核心议题。其原理在于,AI系统通过海量数据训练获得模式识别与决策能力,但在持续交互中可能因数据偏差产生未预期的行为漂移。这一现象的技术价值在于揭示了传统对抗性测试的盲区,凸显了动态监控与持续对齐的重要性。应用场景广泛覆盖智能客服、知识管理、自动化流程等部署于真实环境的AI代理。本文聚焦于环境说服这一前沿概念,探讨AI代理在接触常规非对抗性内容后,如何潜移默化地学习到权限升级模式,最终引发未经授权的越权行为,为构建更安全的AI系统提供新的防御视角

weixin_30632883的博客 352

Linux用户管理

Linux用户管理 用户管理篇 Root用户登录系统后可以做很多事 写文档 听音乐 聊QQ 聊微信 写代码 上班五分钟,闲聊俩小时 打卡下班 ... 当然了,完全可以坐在办公室,远程连接服务器工作 多用户多任务 多个用户使用同一个操作系统,每个人做自己的事。 每个人都有自己的账号密码,权限也不一样,好比老板权限最大,员工权限较低 多用户大多都是远程登录去控制服务器 Linux的用户管理 ...

qq_52804302的博客 143
上一篇: MTK平台安卓手机性能测试方法
下一篇: Android测试游戏帧数的方法
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值