admin 管理员组文章数量: 1184232
2024年4月20日发(作者:java复制代码快捷键)
Android应用程序如何访问/sys和/proc等目录下的系统文件
Android下应用程序不能直接获得root权限,因此如果需要修改/sys或/proc等目录
下的文件时,有以下两种方法可以选择:
1. 通过service或虚拟设备的方法将使得应用程序获得root权限
2. 对/sys或/proc目录下的文件修改访问权限,使得它们能够被程序访问
对于方法1,可以参看我后续会写到的一篇文章《如何使Android应用程序获得root
权限》,也可以在网上搜索别的相关文章。
这里讲讲方法2。
为了理解方法2,首先要知道Android上的权限机制。Android会为每个安装在系统
上的包(apk)配一个唯一的linux userID,名称为"app_"加一个数字,比如app_43。这
样该应用程序的文件只对该用户可见,也就是说,应用程序只能访问相同uid和gid的文
件。
另外,也可以通过修改应用程序的uid。如果将
android:sharedUserId项的值改为其它apk的java package name,则该应用程序和所
指定的应用程序拥有相同的uid,可以访问对方的文件。
通过android:sharedUserId还可以将应用程序提升为system权限。
有了上面的知识,这里有三种方法来修改我们所要访问的文件:
1. 将文件改为777权限
2. 将文件改为apk的uid和gid
3. 将文件修改为system的uid,同时将apk也提升为system权限
这三种方法都需要修改所要访问系统文件的权限。要更改权限,在文件中添加
相应的命令即可。下述命令就将/dev/cpuctl/tasks修改为system的uid和gid,并且将
其权限更改为777。
chown system system /dev/cpuctl/tasks
chmod 0777 /dev/cpuctl/tasks
修改该文件需要修改,具体修改方法可以网上搜索,也可以参看
这篇文章最后的附录。或者在源代码中直接修改文件然后编译即可。
下面依次分析一下上面提到的三种修改访问文件的方法。第一种方法是最简单的,不
过安全性不好,仅仅可以作为实验使用,不推荐;第二种方法将系统文件文件的uid修改
后,拓展性不好,并且我不能确定每次分配给apk的uid是否相同。我这里试了几次,重
新安装后 apk的uid都是相同的,不过没有找到相关文章,所以不敢用。最后我这里采用
第三种方法实现。
首先修改
chown system system /sys/bus/usb/devices/testfile
这样每次启动后,系统都会执行文件将testfile的uid修改为system,这样
uid同问system的程序就能够访问该文件了。
其次将apk提升为system权限
将apk提升为system权限需要目标系统中的签名文件对apk进行签名,因此这种方
法仅适用于某个rom,不能用于所有rom。
具体的提升办法网上有很多,这里不再多说,可以参考这两篇文章:
/liujian885/archive/2010/03/22/
/mblog/532767_73183
至此,我们的目标就达成了。
附 修改的方法
在网上找到了一些修改的方法,都有点问题,我这里写一下自己的流程。
由于是首先用cpio打包,再用gzip压缩后的文件,因此在解压和压缩时都
需要经历这两个步骤。
1) mv
2) gunzip #gunzip解压得到
3)
4)
5)
缩
6)
cpio –iI #用cpio解压上一步得到的文件
修改
find. | cpio –o –H newc | gzip -9 > #cpio打包后,gzip再压
mv
版权声明:本文标题:Android应用程序如何访问sys和proc等目录下的系统文件 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713594668a642462.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论