我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android的root原理是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android的root原理是什么

本篇内容主要讲解“Android的root原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android的root原理是什么”吧!

0x00 关于root

linux和类Unix系统的最初设计都是针对多用户的操作系统,对于用户权限的管理很非常严格的,而root用户(超级用户)就是整个系统的唯一管理员,拥有等同于操作系统的所有权限。所以一旦获取到root权限,就可以对整个系统进行访问和修改。而在Android下获取root权限之后就可以自己定制系统,卸载一些预装软件,完全掌控自己的设备。

Android的root原理是什么

0x01 setUID

在讨论root的原理之前,有一个非常重要的概念,就是文件的setUID权限。linux下普通的文件权限大家都很清楚,可读,可写,可执行,下图很清楚的一个普通的可执行文件root的权限,r(可读),w(可写),x(可执行)。Android的root原理是什么

但是,要考虑一种情况,比如说,一个用户是有权修改自己的密码的,但是记录密码的文件/etc/shadow只有root用户才是可写的,那普通用户如何才能修改自己的密码呢?这一切都要归功于setUID的设置,修改密码时使用的命令passwd对应的二进制程序是/usr/bin/passwdAndroid的root原理是什么

可以看到passwd的二进制文件的权限位中不仅仅是rwx了,多了一个s权限,而这个s权限就是我们的主角,setUID权限。

由于passwd有setUID权限,所以linux系统可以临时把这个文件的所有者(root)身份角色赋给普通用户,以达到让普通用户可以修改自己密码的目的。

那如何设置setUID权限呢?

平常使用的普通文件权限位是由3、3、3共9位的二进制数字组成 ---|---|---,分别对应文件所有者,文件所有者同一用户组权限和其他用户权限。最开始的名为root的可执行文件的权限为rwxrwxr-x,所对应的二进制位就是111 111 101 ,然后每三位对应421换算成16进制,就是775。而新增的setUID权限是在前面新增了三位,分别表示setGID、setUID、stick bit权限,而我们现在只关心setUID权限。因此加上setUID权限之后,文件的权限应该由4位数字组成,例如之前的root文件加上setUID权限就是4755。而修改密码的passwd文件对应的权限位就是4755。

可以通过一个小例子来直观的感受一下,平常使用的cat命令对应的二进制文件是没有setUID权限的:

Android的root原理是什么

可以在普通用户下尝试使用cat去读取/etc/shadow文件的内容:

Android的root原理是什么

提示权限不够,再给cat加上setUID权限之后再去读取/etc/shadow的内容:

Android的root原理是什么

是可以读出来的,但是/etc/shadow中的内容都经过加密处理。

0x02 Linux 下的root

平常使用的linux发行版,需要切换到root用户时,直接使用su命令,然后输入su用户的密码就可以切换到root用户了。Android的root原理是什么

Android的root原理是什么

0x03 Android 的root

但是在未root的Android设备上是没有su的二进制文件,直接执行su命令会提示”su not found”。Android的root原理是什么

再进入已经root过的设备上查看,平常在adb shell中用的命令对应的二进制文件都是在/system/bin目录下,是存在su文件的:Android的root原理是什么

可以看到这里的su只是一个指向/system/xbin/的一个链接。Android的root原理是什么

可以看到这里的su是有setUID权限位的。

而要在系统分区 /system/xbin 中添加文件本身就是需要root权限,而且设置su文件的所有者为root用户也是需要root权限的,设置setUID权限同样也需要root权限。

这就进入到了一个死循环当中,要利用su,首先要有root权限。因此这时就需要利用到Android存在的漏洞,Android系统本身存在着很多以root权限运行的原生进程,而这些root进程中如果存在可以利用的漏洞,就可以利用进程的root身份:

  1. 拷贝su文件到/system/xbin系统分区;
  2. 设置su文件所有者为root用户;
  3. 设置su文件的setUID权限,便于自己的进程执行su命令获取root权限。

到此,相信大家对“Android的root原理是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android的root原理是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android的root原理是什么

本篇内容主要讲解“Android的root原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android的root原理是什么”吧!0x00 关于rootlinux和类Unix系统的最初设
2023-06-27

android leakcanary的原理是什么

Android LeakCanary是一个用于检测内存泄漏的开源库。它的原理主要包括以下几个步骤:1. 监测对象的引用关系:LeakCanary会监测应用中所有的对象引用关系,包括Activity、Fragment、View等。它会跟踪对象
2023-09-23

Android ANR的原理是什么

本篇内容介绍了“Android ANR的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、ANR说明和原因1.1 简介ANR全称:
2023-06-21

android glide原理是什么

Glide是一种用于加载和显示图片的Android开源库。它使用了一种流畅且高效的方式来加载、缓存和显示图片,具有较低的内存占用和较高的性能。Glide的工作原理如下:1. 请求管理:Glide接收到一个图片加载请求后,将其添加到请求队列中
2023-09-22

Android中Lint的原理是什么

这篇文章将为大家详细讲解有关Android中Lint的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Lint 的工作过程lint 工具的代码扫描工作流:应用源文件:源文件包含组成
2023-06-14

Android中Lifecycle的原理是什么

本文小编为大家详细介绍“Android中Lifecycle的原理是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android中Lifecycle的原理是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
2023-06-29

Android中ViewPager的原理是什么

ViewPager是Android中的一个布局容器控件,主要用于实现页面切换效果。它的原理是通过管理多个Fragment或View的显示与隐藏,实现页面的滑动切换。具体原理如下:1. ViewPager通过PagerAdapter来管理多个
2023-09-25

android Handler机制的原理是什么

Android中的Handler机制是用来实现线程之间的通信的一种机制。它的原理是基于消息队列和消息循环。每个线程都有自己的消息队列,当一个线程需要与其他线程进行通信时,它可以创建一个Handler对象,并将消息发送到其他线程的消息队列中。
2023-09-20

android线程池的原理是什么

Android线程池的原理是通过管理和调度线程来实现并发执行任务的机制。线程池主要由线程池管理器、工作队列和线程池的线程组成。线程池管理器:线程池管理器负责创建、销毁和管理线程池。它根据任务的类型和优先级来决定将任务分配给线程池中的线程执行
2023-09-23

Android中的Coroutine协程原理是什么

这篇文章主要介绍了Android中的Coroutine协程原理是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言协程是一个并发方案。也是一种思想。传统意义上的协程是单线
2023-06-29

android虚拟机原理是什么

Android虚拟机的原理是将Android操作系统安装在主机操作系统上,通过虚拟化技术实现在主机上运行Android应用程序。具体来说,Android虚拟机的实现可以分为两个层次:硬件层次和软件层次。在硬件层次上,Android虚拟机利用
2023-10-12

android binder机制原理是什么

Android Binder机制是Android系统中用于进程间通信(IPC)的核心机制,它基于进程间通信的原理,实现了高效、安全、稳定的进程间通信。Android Binder机制的原理主要包括以下几个方面:1. Binder驱动:Bin
2023-09-20

Android中AsyncTask的工作原理是什么

这篇文章给大家分享的是有关Android中AsyncTask的工作原理是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述实际上,AsyncTask内部是封装了Thread和Handler。虽然AsyncTa
2023-06-15

Android中的SurfaceFlinger工作原理是什么

这篇文章将为大家详细讲解有关Android中的SurfaceFlinger工作原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。概念SurfaceFlinger是一个系统服务,如:au
2023-06-22

android handler的机制和原理是什么

Android中的Handler机制是用于在不同线程之间进行消息传递和任务调度的一种机制。它的原理是基于消息队列和Looper。1. 消息队列(MessageQueue):每个线程都有一个消息队列,用于存放待处理的消息。Handler通过向
2023-08-24

Android Adapter机制和原理是什么

Android Adapter机制是一种将数据与视图之间进行绑定的机制,用于在Android应用中将数据呈现给用户。Adapter负责将数据源(如数组、列表、数据库等)转化为视图(如列表项、网格项等),并将其展示在界面上。Android的A
2023-09-26

android硬件加速原理是什么

Android硬件加速是指利用设备硬件来加快图形渲染和图像处理的过程,从而提高应用程序的性能和用户体验。Android硬件加速的原理可以简单概括为以下几点:1. GPU加速:Android系统利用设备上的图形处理器(GPU)来执行图形渲染操
2023-10-11

Android中Binder机制原理是什么

Binder机制是Android系统中的一种进程间通信(IPC)机制,用于实现不同进程间的数据交互和方法调用。Binder机制的原理如下:1. Binder驱动:Binder驱动是Android系统中的一个内核模块,负责管理Binder的注
2023-09-14

android定时器的工作原理是什么

Android定时器的工作原理是通过使用Java中的Timer或者Handler类来实现的。1. Timer类:Timer类是Java中用于定时任务调度的工具类,它可以按照指定的时间间隔执行任务。在Android中,可以使用Timer类的s
2023-08-29

android组件化开发的原理是什么

Android组件化开发的原理是将一个大型的应用程序拆分成多个独立的组件,每个组件包含自己的功能模块和界面,然后通过定义清晰的接口和通信方式,将这些组件进行解耦和集成。这样做的目的是提高开发效率、降低维护成本、增加代码重用性和模块化程度。
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录