Root的原理介绍

谷歌的android系统管理员用户就叫做root,该帐户拥有整个系统至高无上的权利,它可以访问和修改你手机几乎所有的文件,只有root才具备最高级别的管理权限。

我们root手机的过程也就是获得手机最高使用权限的过程。同时为了防止不良软件也取得root用户的权限,当我们在root的过程中,还会给系统装一个程序,用来作为运行提示,由用户来决定,是否给予最高权限。这个程序的名字叫做Superuser.apk。当某些程序执行su指令想取得系统最高权限的时候,Superuser就会自动启动,拦截该动作并作出询问,当用户认为该程序可以安全使用的时候,那么我们就选择允许,否则,可以禁止该程序继续取得最高权限。

Root的过程其实就是su文件放到/system/bin/   Superuser.apk 放到system/app下面,

还需要设置/system/bin/su可以让任意用户可运行,有set uid和set gid的权限

即要在android机器上运行命令:adb shell chmod 4755 /system/bin/su。而通常,厂商是不会允许我们随便这么去做的,我们就需要利用操作系统的各种漏洞,来完成这个过程。

Root的方法

从Root的原理我们了解到,root过程分三步:

[plain] view plaincopy
  1. a.        adb push su /system/bin
  2. b.        adb push SuperUser.apk /system/app
  3. c.       adb shell chmod 4755 /system/bin/su

若系统是eng版的,做到以上三步,那么我们Root就大功告成,但实际是不行的。为什么呢?原因有三:

1、user版的/system 路径是只读权限,不能简单写入

2、 chmod需要Root权才能运行(死循环了)

3、有些系统在启动时会自动将su的4755权限设成755,甚至直接删除su

那么针对这种情况,我们怎么办呢?非常简单:烧一个eng版本的boot.img就行了

可以用展讯的烧录工具,或者用fastboot模式从sd卡烧一个boot.img文件即可

至此,我们Root就成功了,可以用R.E(Root Explorer)在根目录创建和删除文件。



三、 深入理解Root机制

其流程是:

[plain] view plaincopy
  1. 1.       Su 被用户调用
  2. 2.       Su 创建了一个socket监听
  3. 3.       Su 向Superuser发送了一个广播,说是有一个程序要请求root
  4. 4.       Su 等待socket 数据接收。有超时处理。
  5. 5.       Superuser 界面收到广播后,弹出一个对话框,询问用户
  6. 6.       Superuser 向传来的数据中的socket写回用户应答结果。
  7. 7.       Su 根据socket得到的结果处理应该不应该继续执行
  8. 8.       完成提权管理

superuser.apk这个程序是root成功后,专门用来管理root权限使用的,防止被恶意程序滥用。

源码地址: http://superuser.googlecode.com/svn/trunk

我们有两点疑问:

1.  superuser是怎么知道谁想用root权限?

2.  superuser是如何把用户的选择告诉su程序的?

superuser和su程序是如何通讯的,他们俩位于不通的时空,一个在java虚拟中,一个在linux的真实进程中。

superuser共有两个activity: SuperuserActivity和 SuperuserRequestActivity

其中SuperuserActivity主要是用来管理白名单的,就是记住哪个程序已经被允许使用root权限了,省的每次用时都问用户。

SuperuserRequestActivity 就是用来询问用户目前有个程序想使用root权限,是否允许,是否一直允许,即放入白名单。

这个白名单比较关键,是一个sqlite数据库文件,位置:

/data/data/com.koushikdutta.superuser/databases/superuser.sqlite

上文说过,root的本质就是往 /system/bin/下放一个su文件,不检查调用者权限的su文件。普通程序可以调用该su来运行root权限的命令

superuser.apk中就自带了一个这样的su程序。一开始superuser会检测/system/bin/su是否存在:

有进程使用root权限,superuser是怎么知道的呢,关键是句:

[plain] view plaincopy
  1. sprintf(sysCmd, "am start -a android.intent.action.MAIN
  2. -n com.koushikdutta.superuser/com.koushikdutta.superuser.SuperuserRequestActivity
  3. --ei uid %d --ei pid %d > /dev/null", g_puid, ppid);
  4. if (system(sysCmd))
  5. return executionFailure("am.");

原理是am命令,am的用法:、、、

四、 资源文件的获取

从上文的源码地址获取源代码,替换系统的system/extras/su/下面的su.c和Android.mk文件,使用编译命令 ./mk td28 u adr system/extras/su/编译成功后会生成out/target/product/hsdroid/system/xbin/su文件,而Superuser.apk就是普通的apk文件,都在源码地址里面可以下载,下载后倒入到eclipse即可直接运行。

五、 总结

在阅读完本文后,可以站在专业的角度了解root的真正原理,

安卓root本质操作相关推荐

  1. 2017年Q1安卓ROOT类恶意病毒发展趋势研究报告

    摘要 1.移动互联网黑产持续性攻击的核武器,用户设备沦陷的最后防线 Android平台作为目前最流行的流量平台,由于它的开源使得大量的厂商加入其阵营,作为当前最大的流量来源,安卓平台是黑产分子眼中的香 ...

  2. 通俗易懂!一文看懂手机Root的操作与防护

    Root,对于任何手机发烧友.玩机客.从事移动设备研发的人员来说,并不陌生,它代表绝大部分移动设备的使用者能够掌握到的最高权限. 从技术层次来讲,用户拥有了修改系统文件的权限,甚至可以控制账户.增加或 ...

  3. android 手机资源获取失败,安卓root权限获取失败原因及解决办法

    Android手机Root失败的原因 1.PC系统 很多PC端的Root工具需要通过Windows XP模式进行刷机操作,而Win7或者Win 8的用户需要在使用类似工具的时候设置"管理员模 ...

  4. android root权限注册,安卓root权限获取的方法【图文教程】

    手机在我们的生活中得到了普及,主要是因为手机的功能不断强大.我们不仅可以使用手机通讯,也可以利用手机上网等.手机之所以有这么强大的功能,是因为现在的手机都安装了一个系统.这个系统可以供我们得到更好的用 ...

  5. oracle用户数据库导错,root 用户操作 ORACLE 数据库导致悲剧

    接到同事请求,说客户的linux redhat 5.8平台部署的11.2.0.3 RAC 节点2挂掉了,报磁盘IO异常,数据库hang住 Fri Jun 14 12:01:22 2013 Thread ...

  6. oracle重启root,案例:Oracle报错ORA-15025 ORA-27041 root用户操作rac导致节点宕机

    天萃荷净 运维DBA反映Oracle RAC环境中节点宕机,alert发现报错ORA-15025 ORA-27041,分析原因为使用root用户操作rac导致节点宕机 接到同事请求,说客户的linux ...

  7. linux剪切的数据丢失,【紧急求助】在ubuntu的root下操作失误导致数据丢失

    [ 在 funicorn (欧洲杯赛程 http://1su.net/bPw) 的大作中提到: ] : 标  题: Re: [紧急求助]在ubuntu的root下操作失误导致数据丢失 : 发信站: 水 ...

  8. docker基础:使用非root用户操作docker

    这篇文章用于介绍使用非root用户操作docker. 场景 根据企业的安全策略,有一些情况下无法获取root用户的直接使用方式,通过docker或者sudo的方式使用docker变成了这种情况下的选择 ...

  9. android readonly file system,安卓ROOT权限下“Read-only file sytem”解决办法

    今天用安卓模拟器:BlueStacks,打开apk终端模拟器:Terminal,在shell操作命令的时候提示"Read-only file sytem": 第一种方法: 在 An ...

最新文章

  1. 查找无序数组中第K大的数
  2. 高并发系列:架构优化之从BAT实际案例看消息中间件的妙用
  3. (论坛答疑点滴)为什么设置了DropDownList的AutoPostBack=True还是不能触发SelectedIndexChanged事件?...
  4. zabbix邮件监控配置
  5. Windows系统下如何在cmd命令窗口中切换Python2.7和Python3.6
  6. 返回一个1到54之间的随机数
  7. (43)FPGA面试题JTAG接口信号及功能
  8. c语言吸收最后一个空格,新人提问:如何将输出时每行最后一个空格删除
  9. 6splus计算机按键应用,苹果6s plus快捷键功能介绍
  10. 递归 解决汉诺塔问题(栈应用)
  11. 两道动态规划的作业题
  12. 阿里云云计算 26 SLB的配置
  13. ORACLE常用函数汇总
  14. Ethernet和802.3的区别
  15. portknocking(端口试探)简介
  16. 【教学类-30-02】10以内加法题不重复(一页两份)(包括6以内、7以内、8以内、9以内、10以内加法题 只抽取25个)
  17. NAS硬盘存储服务器维修,NAS存储服务器用NAS硬盘的原因有哪些?NAS存储硬盘该如何选择?...
  18. Access数据库教程_如何进行C#连接Access数据库的细节操作?
  19. Spring Cloud Eureka服务治理
  20. HP 5200 打印機 打印1張,出來十幾張一樣的

热门文章

  1. Linux电脑睡眠后黑屏打不开,电脑睡眠后黑屏打不开 电脑睡眠后黑屏打不开的原因...
  2. mysql表分区数量限制_详解MySQL分区表的局限和限制的代码实例
  3. 人脸表情识别系统(VGG_16和Xception模型)配置GPU加速,Fer2013数据集和CK+数据集,tensorboard
  4. (最详细教程)中国知网caj格式论文如何转化为word,pdf,txt
  5. python自然语言处理入门-新手上路
  6. Postman -中文版-安装教程
  7. 微信对账单--每日定时任务获取昨日微信支付账单
  8. Go语言的流程结构简单介绍
  9. windows下 MikTex的安装和初步使用
  10. 开源财务会计软件(搬运)