Android的root学习

Posted Feng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android的root学习相关的知识,希望对你有一定的参考价值。

参考这篇文章:https://www.zhihu.com/question/21074979

android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿。
你想在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示你输入root用户的密码,密码正确就获得root权限了。Android本身就不想让你获得Root权限,大部分手机出厂的时候根本就没有su这个程序。所以你想获得Android的root权限,第一步就是要把编译好的su文件拷贝到Android手机的/system/bin或者/system/xbin/目录下。我们先假设你可以把su放在xbin下,接下来你可以在Android手机的adb shell或者串口下输入su了。
Linux下su以后输入密码就可以root了,但Android里的su和Linux里的su是不一样的,Android里的su不是靠验证密码的,而是看你原来的权限是什么。意思就是如果你是root,那你可以通过su切换到别的用户,比如说shell,wifi,audio什么的。但如果你是root之外的其他用户,就不能切换回root了,会提示你permission denied。也就说用root运行su才有用,但我这个时候还没有root怎么办呢?这就涉及到另外个问题。
一般我们在Linux的console下输入 ls -l 会列出所有文件的权限。
比如:-rwxr-xr-x,用过Linux的人都知道r代表该文件可读,w代表可写,x代表可执行,-就代表没有该权限。第一个rwx代表文件所有者的权限,第二个rwx代表和所有者同组人的权限,第三个rwx代表其他用户对该文件的权限。但下面这个文件就比较特殊。
技术分享

rws,它的执行权限标志位是一个s,s代表当任何一个用户执行该文件的时候都拥有文件所有者的权限,这文件的所有者是root,简单点说就是不管谁执行这个文件,他执行的时候都是以root身份执行的。
也就说即使我不是root也有可能以root身份来执行程序,那么我就把一个所有者是root的su程序权限标志位置成-rwsr-xr-x,那么不管谁执行它,都是root身份执行,su就可以顺利执行成功了,执行成功之后我就是root身份了。

问题都清楚了,就是你需要把一个所有者是root的su拷贝到Android手机上,并且把su的权限标志位置成-rwsr-xr-x。能把这个事情搞定你就成功root了一个手机。
大概意思就是两行代码
cp /data/tmp/su /system/bin/ #copy su 到/system/分区
chown root:root su #su的所有者置成root
chmod 4775 /system/bin/su #把su置成-rwsr-xr-x

 
为什么su一定要放到/system/bin/或者/system/xbin/
su不能放在data分区,原因是因为data分区在mount时就指定了不能给可执行程序加s位。在adb shell里执行mount就可以看到:
 
 
 











以上是关于Android的root学习的主要内容,如果未能解决你的问题,请参考以下文章

Android学习笔记---使用adb进行root时提示devices offline

android开发 怎么把APP内部存储data\data\files里的所有文件一条一条地读出来

cocos2d-x学习笔记(android自动化打包bat脚本)

android 手机存储文件夹学习

Android 逆向Android 系统文件分析 ( Android 系统 root 环境准备 | 查看 Android 根目录信息 )

Android 逆向Android 系统文件分析 ( Android 系统 root 环境准备 | 查看 Android 根目录信息 )