android权限代码分析(二)

此处可以看到system_process 里面启动的所有线程,关于system_process 具体启动过程,百
度下。
下来我们来看进程的用户和组
通过ps | grep system_server 过滤出来system_server 的进程信息。
查看进程id 为174

我们查看cat /proc/174/status 这个里面是这个进程的一些状态信息。


我们关注三行:

Uid:    1000    1000    1000    1000

Gid:    1000    1000    1000    1000

Groups: 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1018 3001 3002 3003 30

06 3007

这里我们便看到了系统进程的权限配置信息。这里的数字具体代表意义,可以在

android\system\core\include\private\android_filesystem_config.h

里面看到,这里做了个删减,列出个大概

#define AID_ROOT             0  /* traditional unix root user */

#define AID_SYSTEM        1000  /* system server */

#define AID_RADIO         1001  /* telephony subsystem, RIL */

#define AID_BLUETOOTH     1002  /* bluetooth subsystem */

#define AID_GRAPHICS      1003  /* graphics devices */

#define AID_INPUT         1004  /* input devices */

#define AID_AUDIO         1005  /* audio devices */

#define AID_CAMERA        1006  /* camera devices */

#define AID_LOG           1007  /* log devices */

#define AID_COMPASS       1008  /* compass device */

#define AID_MOUNT         1009  /* mountd socket */

#define AID_WIFI          1010  /* wifi subsystem */

。。。。。

/* The 3000 series are intended for use as supplemental group id's only.

 * They indicate special Android capabilities that the kernel is aware of. */

#define AID_NET_BT_ADMIN  3001  /* bluetooth: create any socket */

#define AID_NET_BT        3002  /* bluetooth: create sco, rfcomm or l2cap sockets */

#define AID_INET          3003  /* can create AF_INET and AF_INET6 sockets */

#define AID_NET_RAW       3004  /* can create raw INET sockets */

#define AID_NET_ADMIN     3005  /* can configure interfaces and routing tables. */

#define AID_NET_BW_STATS  3006  /* read bandwidth statistics */

#define AID_NET_BW_ACCT   3007  /* change bandwidth statistics accounting */

#define AID_MISC          9998  /* access to misc storage */

#define AID_NOBODY        9999

#define AID_APP          10000 /* first app user */


3:为了控制访问的安全,加入安全机制。

3.1:系统级权限配置文档(1)

alps\frameworks\base\data\etc\platform.xml 存放着一些权限配置,我们可以看到类似

    <permission ame="android.permission.READ_EXTERNAL_STORAGE" >

        <group gid="sdcard_r" />

    </permission>

  <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

       <group gid="sdcard_rw" />

   </permission>

的权限配置。

这里的配置为读取外部存储卡的权限 以及写入外部存储卡的权限。

<permission name="android.permission.READ_EXTERNAL_STORAGE" >

里面的

<group gid="sdcard_r" 这里的意义为:如果apk申请读外部存储卡,则会在创建apk时,给此进程增加一个组,组名为sdcard_r,使用的接口为setgid();

然后我们来连接上adb,查看下权限:

这里我们可以看到读权限是对所有用户开启的,不需要配置读权限也是可以的。主要配置的为写存储卡,则必须配置权限,否则对于other用户来说,只有读和执行,没有写权限。关于sdcard挂载,具体查看android\system\vold 目录

3.2:系统级权限配置文档(2)

android\frameworks\base\core\res里面的AndroidManifest.xml,这个里面可以看到更多的系统权限配置表。我们这里随便拿出两个是normal等级的权限:

可以看到,应用在AndroidManifest.xml配置这两个权限,则可以顺利的得到读取网络和wifi的状态信息。这个权限normal只是一个提醒作用,因为我们直接配置就可以无阻碍的使用,其目的只是提示用户使用了此权限而已。

我们来看下这个配置里面的详细信息:

    <permission android:name="android.permission.CALL_PHONE"

        android:permissionGroup="android.permission-group.COST_MONEY"

        android:protectionLevel="dangerous"

        android:label="@string/permlab_callPhone"

        android:description="@string/permdesc_callPhone" />

这里面的内容:

android:name 权限名称。

android:permissionGroup 权限组,这个是在安装应用时显示在哪个组下的。

android:protectionLevel 保护等级

 android:label 权限图标

android:description 权限详细描述

3.3:apk安装之后申请的权限存放位置

 /data/system/packages.xml 里面。我们使用

adb pull /data/system/packages.xml "D:\1.xml" ,打开1.xml,里面可以看到


这里这个<item name="com.lxm.test" package="com.example.test1" />

是我在自己的test1的apk里面写的自定义权限。

权限名字为com.lxm.test,权限所在包为:com.example.test1。 此权限为普通保护,因此不需要protection=“1”类似语句。

查看其它的权限,后面的 protection="1"保护等级。这里 如果为1  dangerous

为2 signature  为3  signatureOrSystem

关于normal dangerous signature signatureOrSystem 保护等级的区别,下面继续来讲解。


这里为

Packagename="com.example.test1"  包名codePath="/data/app/com.example.test1-1.apk" 安装路径

nativeLibraryPath="/data/data/com.example.test1/lib" apk如果包含库,在此位置查找

userId="10058" apk的userId



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员入门进阶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值