最近在研究Android逆向,其中就涉及到对Android进行Root的操作,Root方式有多种,本篇文章就来简单总结一下。

这是一篇科普向文章,没有代码层的分析。

Android Root核心原理

Android内核其实就是Linux,所以Android要获得Root权限,其实等同于内核的Linux系统要获得Root权限。

使用过Linux的人都比较清楚,我们可以通过sudo或su获得Root权限,不同之处在于sudo是暂时获得Root权限,而su是一直获得Root权限。

因为Root权限具有危险性,比如用户可以删除任意文件,如果不小心将Android核心代码文件删除,那么手机就无法正常使用了,为了避免这种情况,Android手机默认是不会提供进入Root权限的功能的,即缺少su程序。

如果你想让Android获得Root权限,那么你首先需要编译好su程序文件,然后拷贝到PATH(环境变量)中,并给予su文件执行权限。

Android手机的PATH有:

/sbin
/vendor/bin
/system/sbin
/system/bin
/system/xbin

进行Root时,通常将su程序文件放在/system/xbin目录中,这样你在通过adb shell连接Android手机后,就可以通过su命令进入Root权限了。

原理是这个原理,但实际操作起来,会出现一个逻辑死结。我们将su文件拷贝到Android PATH中需要Root权限,而我们当前没有Root权限,拷贝su文件到PATH的目的便是获得Root权限,所以陷入两难的逻辑死结中。

一键Root

要获得Root权限,就需要突破这个逻辑死结。

在几年前,市面上有很多一键Root的软件,当时,让Android手机获得Root最简单的方式便是从应用商城下载好这些一键Root软件,然后通过该软件可以轻松让Android获得Root权限。

这类一键Root软件会利用Android系统的漏洞,从而获得某个具有Root权限的进程,然后利用该进程实现将su文件拷贝到/system/xbin目录并给予su文件执行权限的过程,但随着Android的发展,很多漏洞已经被堵上,这类一键Root软件就没有用武之地了。

此外很多一键Root软件与流氓软件无异,因为有了最高权限,可以对你的Android手机做各种流氓操作,你却无可奈何。

刷Recovery

现在要获取Android的Root,更常用的方式是刷入第三方的Recovery,然后再借助Recovery刷入获取Root的程序。

什么是Recovery?

一部Android手机,通常会有2个系统,一个是Android系统本身,这也是用户开机默认会使用的系统,另一个便是Recovery系统,该系统的主要功能便是操作Android系统,比如Android系统出现无法开启的故障,此时就需要Recovery系统,大多数手机厂商都会让用户通过长按开机键+音量键的方式进入Recovery系统,如下图:

进入Recovery后,你便可以对Android系统本身进行自由管理了,此时我们会通过Recovery来将su文件刷入,从而获得Root后的Android系统。

如果你使用的不是Google亲儿子(如:Nexus),而是使用国内厂商的手机,如小米、华为之类的,你还需要突破BootLoader锁带来的限制。

BootLoader是你按下手机开机时,最先启动的程序,它的主要作用便是拉起整个Android系统和Recovery系统,但国内厂商会对BootLoader上锁,从而让手机只能运行该厂商验证过的Android系统和Recovery,而厂商自己的Recovery通常进行过阉割,无法让Android获得Root权限。

对于国内厂商的玩家,获得Root的第一步是解锁BootLoader,解锁分官方解锁和强制解锁,比如你使用小米手机,你想刷机,可以去小米论坛申请官方解锁,但有些手机不支持官方解锁,此时只能自己搜索解决方案,进行强制解锁了。

目前最常用的第三方Recovery叫做 TWRP (TeamWin Recovery Project ), 它是由国外 android 爱好者开发的一款工具,你需要根据自己的Android型号去找对应版本的TWRP。

注意,我们刷入了第三方Recovery后并不表示已经完成Root了,我们只是需要一个功能更加强大的Recovery来帮助我们刷入可以获取Root的程序。

SuperSU与Magisk

SuperSU与Magisk都是知名的Root管理程序,两者都可以通过TWRP将其刷入,然后让Android获得Root权限,但两者有较大的不同。

SuperSU

SuperSU由Chainfire开发,在几年前是当之无愧的Android获取Root的最佳方式,但互联网中对SuperSU的讨论止步于2017年末,其原因是SuperSU被国内公司收购,SuperSU从此由开源模式转为闭源模式,开源版本的SuperSU依旧留在Github,其支持的最新Android版本为7.0,即Android8.0以后,你要使用,就需要使用闭源版本,但没人愿意使用陌生公司的闭源版本。

SuperSU实现Root的方式也是将SuperSU自己准备好的su程序文件放到Android中,只是其借助Recovery来刷入su,此外,也会将SuperSU应用也刷入到系统中。

如果Android中的任何应用都可以不加限制的使用Root权限,那么手机将没有安全性可言,所以SuperSU应用的目的就是对需要使用Root的应用进入管理,如果一个应用需要使用Root,会调用su程序,而该su程序是SuperSU应用处理好的su程序,在下放权限前,会通知SuperSU应用,从而实现对应用获取Root的管理。

在Android 6.0时,Google在Android系统中新增了SafetyNet程序,该程序的主要功能便是监测系统API,如果发现系统API遭到修改或系统完备性检测失败,则会告知使用了该功能的应用,而SuperSU这种更改系统文件并新增文件到Android系统分区的做法会被SafetyNet程序检测出来,从而导致很多通过SuperSU实现Root的用户无法使用Google Play、Netflix等使用了SafetyNet功能的应用,也无法获得任何OTA更新(Over The Air Updates,无线下载更新)。

关于SuperSU获取Root的更多细节可以看一下Chainfire写的How-To SU(http://su.chainfire.eu/)。

Magisk

SuperSU被收购且开源版只能支持到Android 7.0,Magisk扛起大旗。

Magisk实现Root的方式也是将自己的su程序利用Recovery刷入Android中实现Root。

Magisk的特点在于它会挂载一个与系统文件相互隔离的文件系统来加载自己的内容,Magisk的改动都发生在这个独立的文件系统中,不会影响到Android系统本身的文件,从而避免被检测。

与SuperSU类似,Magisk不止提供Root的功能,还提供管理应用获取Root的功能,从而避免任意应用乱用Root。

我们可以将Magisk看成一个文件系统,该文件系统通过巧妙的设计实现了各种功能且不对系统文件进行直接修改。

因为Magisk也有自己的模块系统,所以很多人会拿Xposed与Magisk做对比(Xposed与获取Root没有啥关系)。

Xposed的原理是通过劫持Android系统的Zygote进程来加载自己的功能(Zygote进程是App启动时要fork的进程),显然,Xposed需要对文件系统进行相应的修改,容易被检测出来,其与Magisk的直观差别如下图:

关于Magisk获取Root的更多细节可以看Magisk官方文档:Magisk Internal Details(https://topjohnwu.github.io/Magisk/details.html)

参考

  • Android adb setuid提权漏洞的分析

  • Android Root原理分析及防Root新思路

  • Magisk Manager 详解

  • 什么是SafetyNet?如何通过SafetyNet验证?

浅析Android Root相关推荐

  1. Android 系统(56)---深入浅析Android坐标系统

    深入浅析Android坐标系统 1 背景 去年有很多人私信告诉我让说说自定义控件,其实通观网络上的很多博客都在讲各种自定义控件,但是大多数都是授之以鱼,却很少有较为系统性授之于渔的文章,同时由于自己也 ...

  2. android get width单位是什么意思,浅析Android中getWidth()和getMeasuredWidth()的区别

    结论:getMeasuredWidth()获取的是view原始的大小,也就是这个view在XML文件中配置或者是代码中设置的大小.getWidth()获取的是这个view最终显示的大小,这个大小有可能 ...

  3. android 动画 alpha,浅析Android 动画之AlphaAnimation应用操作

    作为程序员不管是为了什么,或多或少都会模仿其他人的一些手法来达到效果,程序员都必须要做出各种绚丽的动画画面来吸引大家,下面是爱站技术频道小编浅析 动画之AlphaAnimation应用操作,一起来了解 ...

  4. 浅析Android字体加载原理

    浅析Android字体加载原理 前言 之前在处理系统字体问题的时候,可借鉴的资料很少,遇到了很多坑,不得不了解Android字体加载原理,现抽空写一篇总结,来加深自己对这块的理解. 内容 概述 And ...

  5. Android root检测方法小结

    出于安全原因,我们的应用程序不建议在已经root的设备上运行,所以需要检测是否设备已经root,以提示用户若继续使用会存在风险. 那么root了会有什么风险呢,为什么不root就没有风险,又怎么来检查 ...

  6. 浅析Android地理定位(GPS)

    浅析Android地理定位(GPS) 定位权限 介绍一下定位相关的一些API LocationManager 位置提供器 requestLocationUpdates Geocoder Criteri ...

  7. android培训讲师介绍,安卓培训讲师浅析android项目重点知识

    原标题:安卓培训讲师浅析android项目重点知识 在应用程序之前,必须创建一个相应的Android项目.如果你使用Eclipse开发的话,那就是创建一个Eclipse项目.这个项目用来保存所有源代码 ...

  8. Android root检测方法总结

    一 为什么要进行root检测? 出于安全原因,我们的应用程序不建议在已经root的设备上运行,所以需要检测是否设备已经root,以提示用户若继续使用会存在风险. 二 root了会有什么风险? 在Lin ...

  9. android root权限破解分析

    破解android的root权限的本质是:在系统中加入一个任何用户都可能用于登陆的su命令.或者说替换掉系统中的su程序,因为系统中的默认su程序需要验证实际用户权限,只有root和 shell用户才 ...

最新文章

  1. 四种软件架构演进史,会一种就很牛逼了!
  2. SQL Relay 0.47 发布,SQL 中间层
  3. Dynamics 365-关于Solution的那些事(一)
  4. Design verification经验总结
  5. macos安装盘第三方工具制作_简单制作OSXYosemite10.10正式版U盘USB启动安装盘方法教程(全新安装Mac系统)下载|异次元软件世界...
  6. 数据之路 - Python爬虫 - PyQuery库
  7. 创建一个简单的Flash动画
  8. 51 单片机 程序编写
  9. 企业微信发送信息异常的临时处理方案
  10. 当国际贸易撞上AI,会产生怎样的化学反应?
  11. keras merged model
  12. 微处理器flash及ram内容详解
  13. python 91图片站爬虫
  14. html页面跳转闪屏,闪屏页.html
  15. 松弛法求解给定边界条件的泊松方程
  16. BK3432和BK3431Q芯片开发问题
  17. css 去掉button/input点击时出现的边框
  18. MOOC课程信息D3.js动态可视化
  19. Android APP专项电耗监控工具使用说明
  20. 小米6android版本多少,小米6有几个版本 小米6各版本区别对比

热门文章

  1. 台灯AAA好还是AA好?分享国AA优秀的护眼台灯款式
  2. 技巧:win10的另一种美化字体的方式,使用noMeiryoUI
  3. cip协议服务器,CIP(通用工业协议)_百度百科
  4. 禅道集成极狐gitlab #JIHULAB101
  5. Android POI 百度地图——周边检索
  6. 2016恒生电子秋招笔试两道算法题
  7. Ubuntu播放midi文件
  8. 使用AnyProxy自动爬取微信公众号数据-包括阅读数和点赞数
  9. 美国计算机访学,美国博世研究与技术中心招聘计算机科学与统计学方向博士后和访问学者...
  10. 数控是用计算机来计算的吗,数控机床的完美控制—帮助页面和计算器