为Android应用程序读取/dev下设备而提权(一)
倘若应用程序需要对/dev/xxx进行读写操作,就需要提升其权限。提权方法不唯一,需要根据具体需求情况而选择。归根结底,终究都落到chmod 777 /dev/xxx 上,不同的是,chmod操作被执行在何时何地,在此做个分析总结。
内核启动后会执行/system/init,传说中的系统1号进程,init程序起初的任务是初始化,包括各种mkdir来构建文件系统,得到硬件信息建立设备节点,安装SIGCHLD信号来回收僵尸进程的资源,解析init.rc启动脚本等等,然后init程序变身为property_service来管理系统的权限。我们可以下手的地方有两处: device_init和init.rc 。
device_init在/system/core/init/device.c中,详细分析如下:
内核启动后会执行/system/init,传说中的系统1号进程,init程序起初的任务是初始化,包括各种mkdir来构建文件系统,得到硬件信息建立设备节点,安装SIGCHLD信号来回收僵尸进程的资源,解析init.rc启动脚本等等,然后init程序变身为property_service来管理系统的权限。我们可以下手的地方有两处: device_init和init.rc 。
✿ init.rc
这个方案是大家用的比较多的,在其中添加chmod操作很简单不多说。✿ device.c
这个方案用的比较少,先了解下device.c。device_init在/system/core/init/device.c中,详细分析如下:
//分别遍历/sys/class /sys/block /sys/devices
device_init()
{
coldboot(fd,"/sys/class");
coldboot(fd,"/sys/block");
coldboot(fd,"/sys/devices");
}
//后面有个递归 /sys下是内核生成的设备,这就相当于udev的作用
do_coldboot()
{
if(fd>= 0) {
write(fd,"add\n", 4);
close(fd);
h