自家的 System App(比如 Home Launcher)里面通过 Runtime.getRuntime().exec("$command\n")来调用这个二进制文件时,无法正常执行(没有写入文件的实际操作),但是在 adb shell 下是可以正常执行的。
SELinux 的权限问题已经解决,执行时无报错了。
备注: 此二进制文件的功能是把一个文件写入覆盖到某个分区,从某个文件拷贝数据,然后写入到此分区所在的设备块上。
1
codehz 2022-07-06 21:58:13 +08:00
(虽然正常思路是做一个特权系统服务,然后通过 binder 向应用提供功能(
因为即使是特权应用也是拿不到 shell 级别的权限的( 非得野路子的话,就把系统 root 了吧,放个自定义 su ,自动给特定 uid 开 shell |
2
zinwalin OP @codehz 公司卖的平板,正式版本是去年 su 的,安全考虑,我试着把相应类型的 device 加入相关的.te 文件里。
|
3
scys 2022-07-07 01:10:39 +08:00
SELinux 是关闭,还是你写了规则?
如果规则的话,看看有没有给与执行权限,并且路径必须准确。 而这个二进制的需求,你都已经是 System 权限了,为啥不用 Java 实现? |
4
yuedashi 2022-07-07 08:08:18 +08:00
虽然你说没 selinux 权限报错了,我还是建议先 adb shell setenforce 0 .
|
5
zinwalin OP @scys 二进制有可执行的权限,shell 下可以执行,二进制代码涉及到打开 /dev/block/mmcblk0p1 设备,但是失败了。
|
7
zinwalin OP @yuedashi
我在 system_app.te 里加了这三行 allow system_app system_file:file { open read execute_no_trans }; // 解决二进制文件 execute_no_trans 问题 allow system_app sdcard_block_device:chr_file rwx_file_perms; allow system_app sdcard_block_device:chr_file { open read write ioctl }; |
8
zinwalin OP @scys
我在 system_app.te 里加了这三行 allow system_app system_file:file { open read execute_no_trans }; // 解决二进制文件 execute_no_trans 问题 allow system_app sdcard_block_device:chr_file rwx_file_perms; allow system_app sdcard_block_device:chr_file { open read write ioctl }; |
9
tsann 2022-07-14 08:53:53 +08:00 1
可以让 init 来执行这个二进制文件,随着 Android 系统权限的收紧在 App 里执行特殊权限的命令越来越麻烦
1.在 init.target.rc 里定义一个 service ,比如: service write_xxx system/bin/write_xxx 再定义一个触发条件: on property:sys.write_start=1 start write_xxx setprop sys.write_start 0 2. 在 App 或系统服务代码里执行 SystemProperties.set ("splash.write_start","1"); 就会触发 start write_xxx 的执行 |
10
tsann 2022-07-14 08:54:35 +08:00
然后等待 sys.write_start 是否为 0 ,来判断 write_xxx 是否完成
|
12
tsann 2022-07-14 14:27:09 +08:00
sys.write_start 不用其它地方声明,但可能要调试一下,在 system/core/init/里可能有对这个 action 做限制,像 Android9 里有个 kExportedActionableProperties 数组用来定义可以触发 action 的 Properties
|