search 登录 注册
arrow_back返回列表
ID:98594
light_modestarstarstar
Lv.1 韶华一笑间
edit_note帖子 21
stars积分 8,130
event加入 2012-03-10
安卓交流

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

schedule发表于 2013-05-01 14:11:00 visibility查看 437 chat_bubble回复 3
#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“);

全部回复 (3)

ID:76284
light_modedark_modestarstar
Lv.5 甘首五朝臣
2013-05-01 14:56:00 沙发
这帖不错,该顶
ID:126641
light_modestar
Lv.1 韶华一笑间
2013-05-01 22:22:00 板凳
安卓我最行!
ID:87830
light_modedark_mode
Lv.3 畅意三江水
2013-05-27 00:39:00 地板
安卓问题、内信53331
登录 后才能回复