-
Notifications
You must be signed in to change notification settings - Fork 43
一键root原理
cheyiliu edited this page Dec 4, 2014
·
11 revisions
- 修改rom的方法,直接把su命令和su命令管理器程序给刷到rom里;
- 一种和修改rom类似,先刷recovery,再用recovery安装升级包,这个升级包里,包含了su命令和su命令管理器程序。这种方法唯一的坏处是会破坏原始recovery,有些机器会有记录,导致不能保修(虽然还是有方法清除这个纪录,但麻烦);
- 最后一种很牛x,就是live root,360一键root就是一个典型例子。连上usb线,windows机器里的360一键root运行一会,就通过usb把su和root权限管理器给安装到/system/{bin,app}下了。这是何等的简单粗暴。一个普通应用程序做到了只有root权限才能做到的事情。
- live root,其原理是利用系统的漏洞提权,在*inux系统里,有了root权限,就可以对整个系统为所欲为了。 普通程序想获得root权限,不是那么容易的,需要漏洞。
- 利用漏洞暂时获取root权限
- 使/system/bin/ 目录可写,并拷贝su到/system/bin/
- 将授权管理的标准Android软件包(Superuser.apk)复制到手机并安装
-
http://www.hacker.com.cn/uploadfile/2013/0412/20130412050602807.pdf
- rageagainstthecage漏洞原理分析 http://luckytcl.blog.163.com/blog/static/14258648320121142359512/
- 未验证,TODO
下面以SuperOneClick为例介绍这个过程。
只提目录中的三个重要文件 1. rageagainstthecage 2. su 3. Superuser.apk
步骤一 运行rageagainstthecage
1) 将文件放在/data/local/tmp下,其他目录无法执行。命令如下:
F:/Own/Phone/Samsung/Tools/SuperOneClick>adb push rageagainstthecage /data/local/tmp
2) 使用adb shell,修改rageagainstthecage文件权限
F:/Own/Phone/Samsung/Tools/SuperOneClick>adb shell
$ cd /data/local/tmp
cd /data/local/tmp
$ chmod 777 rageagainstthecage
3) 使用adb shell,运行rageagainstthecage
$ ./rageagainstthecage
执行此步骤后再次使用adb shell,会发现提示符为#,已经在电脑Shell上获取了Root权限
步骤二 将/system修改为可读写,把su复制到/system/bin/
1)上步骤一成功出现的#号提示符下,修改/system
# mount -o remount rw /system
#
2)另开一个命令行窗口,复制su至/system/bin
F:/Own/Phone/Samsung/Tools/SuperOneClick>adb push su /system/bin
su这个文件的功能,便是实现:普通用户至root超级用户的权限切换!
步骤三:将授权管理的标准Android软件包(Superuser.apk)复制到手机并安装
这个过程很简单,不再赘述,就是adb push与adb install。授权管理其实
就是管理哪些程序能够使用su。也就意味着对超级用户权限的使用进行管理。
总结一下上述过程
在提取Root权限过程中,只有两个重要的文件:
rageagainstthecage
su
rageagainstthecage负责直接破解获取Root权限,然后才能修改/system/。
su如果只放在/data/local/tmp目录下,是没有权限运行的。
所以需要把su放在/system/bin目录下。以供以后的手机应用程序使用。
- 未验证
以下是其操作过程:
adb remount
adb push su /system/bin/su
adb shell chown 0.0 /system/bin/su
adb shell chmod 06755 /system/bin/su
adb push busybox /system/bin/busybox
adb shell chown 0.0 /system/bin/busybox
adb shell chmod 0755 /system/bin/busybox
adb push Superuser.apk /system/app/Superuser.apk
adb shell chown 0.0 /system/app/Superuser.apk
adb shell chmod 0644 /system/app/Superuser.apk
adb push RootExplorer.apk /system/app/RootExplorer.apk
adb shell chown 0.0 /system/app/RootExplorer.apk
adb shell chmod 0644 /system/app/RootExplorer.apk
adb shell rm /data/local.prop
adb shell rm /data/local/tmp
adb shell mv /data/local/tmp.bak /data/local/tmp
adb reboot
- /android-4.3.1-r2/system/extras/su/su.c
-
类似linux 上sudo + 命令
Process process = Runtime.getRuntime().exec("su"); PrintStream outputStream = null; try { outputStream = new PrintStream(new BufferedOutputStream( process.getOutputStream(), 8192)); outputStream.println(TextUtils.join(" ", args));//args some other command outputStream.flush(); } finally { if (outputStream != null) { outputStream.close(); } }
-
more example
- 360一键root
- z4root
- 百度一键root
- http://zh.wikipedia.org/zh-cn/Root_%28Android%E7%B3%BB%E7%BB%9F%29
- http://www.hacker.com.cn/uploadfile/2013/0412/20130412050602807.pdf
- http://blog.csdn.net/liwei_cmg/article/details/6313944
- http://luckytcl.blog.163.com/blog/static/14258648320121142359512/
- http://bbs.360safe.com/forum.php?mod=viewthread&tid=41587&extra=page%3D2
- http://bbs.360safe.com/thread-41617-1-1.html
- http://www.360rootw.com/root/yuanli/
- http://www.xyliu.info/2013/08/360-live-root/
- http://www.tttabc.com/android/rootYuanLi.htm
Just build something.