android 6 root权限,Android应用程序获得root权限(6页)-原创力文档

问题

我遇到的问题是我想在 Java应用程序中动态 mount一

个 NFS 的系统,但是执行 mount 命令必须要要 root 权限才

Android Java root

可以。一般情况下,在 的 层是不能获得

权限的。

思路

我在博文《Android 程序的安全系统》中提到两种思路:

1、实现一个 init 实现一个 Service,来帮助 Android 应用程

序执行 root 权限的命令。

2、实现一个虚拟设备,这个设备帮助 Android 应用程序执

行 root 权限的命令。

本文将会选择第一种来解决 Android 应用程序 mount

NFS 文件系统的问题。

Init.rc Service

Init.rc Service

IInniitt..rrcc SSeerrvviiccee

在 Android 系统 init.rc 中定义很多 Service,具体定义格

式可以参考《Android Platform Developer’s Guide》中的

“Android Init Language”。Init.rc 中定义的 Service 将会被

Init 进程创建,这样将可以获得 root 权限。

现在问题是 Android 应用程序怎样启动让 init 进程知道

我们想运行那个进程呢?答案是设置系统属性“ctl.start”,

把“ctl.start”设置为你要运行的 Service,假设为“xxx”,

Android 系统将会帮你运行“ctl.start”系统属性中指定的

Service。那么运行结果 init 进程将会将会写入命名为

“init.svc.+Service ” “init.svc.xxx”

名称 的属性中,也就是 属

性,应用程序可以参考查阅这个值来确定 Service 执行的情

况。想更深入了解 Android property 系统可以参考博文《翻(

译)Android 属性系统》。

Android property

Android property

AAnnddrrooiidd pprrooppeerrttyy 权限

难道 Android 属性“ctl.start”是所有进程都可以设置的

吗?那世界不就乱套了,谁都可以可以执行 init.rc中Service

了,查看 property_service.c 中的源码,设置 Android 系统

属性的函数为 handle_property_set_fd:

1: void handle_property_set_fd(int fd)

2: {

3:

4: switch(msg.cmd) {

5: case PROP_MSG_SETPROP:

6: msg.name[PROP_NAME_MAX-1] = 0;

7: msg.value[PROP_VALUE_MAX-1] = 0;

8:

9: if(memcmp(msg.name,"ctl.",4) == 0) {

10: if (check_control_perms(msg.value, cr.uid, cr.gid)) {

11: handle_control_message((char*) msg.name + 4, (char*)

msg.value);

12: } else {

13: ERROR("sys_prop: Unable to %s service ctl [%s] uid:

%d pid:%d\n",

14: msg.name + 4, msg.value, cr.uid, cr.pid);

15: }

16:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值