1,环境:android4.2.2
2,目的:用自己的标识来切换到adb root权限。
3,步骤:
1) 在文件system\core\adb\adb.c 的should_drop_privileges中函数添加如下代码:
property_get("service.adb.joe.root", value, "");
if (strcmp(value, "1") == 0) {
secure = 0;
}
2) init.rc文件中添加:
文件前:
setprop service.adb.joe.root 0
文件最后:
on property:service.adb.joe.root=1
restart adbd
3)Property_service.c (\system\core\init) property_perms添加一行:
{ "service.adb.joe.root", AID_SHELL, 0 },
4)Services.c (\system\core\adb) 添加一个新的函数:
void restart_joe_adb_service(int fd, void *cookie)
{
char buf[100];
char value[PROPERTY_VALUE_MAX];
if (getuid() == 0) {
snprintf(buf, sizeof(buf), "adbd is already running as root\n");
writex(fd, buf, strlen(buf));
adb_close(fd);
} else {
property_set("service.adb.joe.root", "1");
snprintf(buf, sizeof(buf), "restarting adbd as root(force)\n");
writex(fd, buf, strlen(buf));
adb_close(fd);
}
}
service_to_fd函数中添加调用:
} else if(!strncmp(name, "joe_root:", 8)) {
ret = create_service_thread(restart_joe_adb_service, NULL);
5,切换
adb shell
此时进入的用户为shell,在命令行输入:setprop service.adb.joe.root 1
按回车后会自动退出ADB连接,因为此时机器上的adbd服务被重启了,所以断开了连接,再重新连进入后就是root权限的用户了。