search 登录 注册
arrow_back返回列表
ID:76284
light_modedark_modestarstar
Lv.5 甘首五朝臣
edit_note帖子 256
stars积分 259,690
event加入 2011-10-05
安卓交流

安卓高级教程之获取root原理解析系列四

schedule发表于 2013-05-10 16:40:00 visibility查看 464 chat_bubble回复 10
#1 楼主
上文说过,root的本质就是往 /system/bin/ 下放一个su文件,不检查调用者权限的su文件。普通程序可以调用该su来运行root权限的命令。superuser.apk中就自带了一个这样的su程序。一开始superuser会检测/system/bin/su是否存在:
File su = new File(“/system/bin/su“);
// 检测su文件是否存在,如果不存在则直接返回
if (!su.exists()) {
Toast toast = Toast.makeText(this, “Unable to find /system/bin/su.“, Toast.LENGTH_LONG);
toast.show();
return;
}
//如果大小一样,则认为su文件正确,直接返回了事。
if (su.length() == suStream.available())
{
suStream.close();
return; //
}
// 如果检测到/system/bin/su 文件存在,但是不对头,则把自带的su先写到“/data/data/com.koushikdutta.superuser/su“
//再写到/system/bin/su。
byte[] bytes = new byte[suStream.available()];
DataInputStream dis = new DataInputStream(suStream);
dis.readFully(bytes);
FileOutputStream suOutStream = new FileOutputStream(“/data/data/com.koushikdutta.superuser/su“);
suOutStream.write(bytes);
suOutStream.close();
Process process = Runtime.getRuntime().*(“su“);

全部回复 (10)

ID:49233
light_modedark_modestar
Lv.4 莫问四书意
2013-05-10 21:40:00 沙发
这帖不错,该顶
ID:120420
dark_modedark_modedark_modestarstar
Lv.1 韶华一笑间
2013-05-12 08:34:00 板凳
看帖回帖是美德!
ID:110923
light_modestarstar
Lv.1 韶华一笑间
2013-05-12 10:14:00 地板
安卓我最行!任溶溶
ID:73990
dark_modedark_modedark_mode
Lv.1 韶华一笑间
2013-05-19 15:55:00 #5
安卓的世界,我的世界
ID:76479
light_modedark_modestarstarstar
Lv.1 韶华一笑间
2013-08-29 15:29:00 #6
rootw
ID:129085
light_modestarstar
Lv.1 韶华一笑间
2013-09-29 13:35:00 #7
1555555
ID:135825
light_modestarstar
Lv.1 韶华一笑间
2013-11-16 14:26:00 #8
额呃呃呃
ID:133289
dark_modedark_modedark_modestar
Lv.1 韶华一笑间
2013-12-25 22:52:00 #9
刚刚好复古代
BX
ID:158634
dark_modestar
Lv.1 韶华一笑间
2013-12-25 23:19:00 #10
看看
登录 后才能回复