apk获取设备文件节点操作权限

项目需要对驱动进行白盒测试,涉及到/dev和/sys下设备节点的操作,log信息会报权限错误,环境为android 6.0

1. app获取system权限,成为system_app

1.1 在 AndroidMainfest.xml 中显示添加权限
"http://schemas.android.com/apk/res/android"
    package="com.example.my.usbtest"
    android:sharedUserId="android.uid.system">
1.2 使用系统密钥签名app

以下的操作基于我的源码目录进行的,仅作参考
- a.进入密钥目录:cd build/target/product/security/
- b.复制密钥工具到密钥目录:cp out/host/linux-x86/framework/signapk.jar
- c.复制未签名版apk到密钥目录:cp /app-release-unsigned.apk .
- d.开始签名:java -jar signapk.jar platform.x509.pem platform.pk8 app-release-unsigned.apk output.apk
- e.安装签名后的apk:adb install output.apk
- f.测试:adb shell ps -Z,可看到自己的app属于system_app,而未签名前是untrusted_app
apk获取设备文件节点操作权限_第1张图片

2. 修改te文件,使得system_app可访问/dev节点

一般 /dev 下的节点都是通过 uevent.rc 管理的,以访问 /dev/test 为例
- a.在uevent.rc中添加:/dev/test 0666 system system
- b.在file_contexts中添加:/dev/test u:object_r:test_device:s0
- c.在 device.te 添加:type test_device, dev_type, mlstrustedobject;
- d.在 system_app.te 添加:allow system_app test_device:chr_file { rw_file_perms ioctl }; (如果你需要ioctl的话)

到这里,应该就可以使用JNI或者exec调用底层脚本对节点进行操作了,/sys与/proc同理,不再赘述,有需要的可以看下最后的参考链接


  1. Android 在 SElinux下 如何获得对一个内核节点的访问权限
  2. [Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)热门干货
  3. Android6.0系统权限那些事

你可能感兴趣的:(apk获取设备文件节点操作权限)