登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 120|回复: 5

Android 驱动程序Demo及流程,android屏幕适配demo

[复制链接]

187

主题

187

帖子

1406

安币

手工艺人

发表于 2017-11-14 10:19:43 | 显示全部楼层 |阅读模式

        很久前就想了解驱动程序的想法,这里现做一个简单的开始,从demo做起,看到Android驱动程序的基本运行流程,这对漏洞分析、检测和挖掘都是必要的。同样,本篇基本也是自己学习过程的记录,无干货。本篇大多数内容来自Linux设备驱动之Ioctl控制。

一、用户层

        不管是漏洞检测,还是poc中,我们见到最多的函数就是ioctl()函数,这个函数就是用户层调用内核程序的接口。

[Java] 查看源文件 复制代码
    printf("<--- Call MEMDEV_IOCGETDATA --->/n");    cmd = MEMDEV_IOCGETDATA;    if (ioctl(fd, cmd, &amp;arg) < 0)        {            printf("Call cmd MEMDEV_IOCGETDATA fail/n");            return -1;    }    printf("<--- In User Space MEMDEV_IOCGETDATA Get Data is %d --->/n/n",arg);        close(fd);    return 0;    }

        可以看到,程序调用了3次ioctl()函数,分别传递了3个cmd值,所以,我们后面可以看到,在驱动程序对应的ioctl函数里应该至少有这3个值对应的case。

        据此,可以看到在用户层调用ioctl()函数十分简单,大致流程其实就是参数构造过程,fd参数构造很简单,直接获取open()对应的设备文件即可获得句柄。剩下第二个第三个参数的构造,实际上比较麻烦。首先,我学习这个不是为了开发,而是和漏洞相关的工作。那么,这里就有几个问题:

        1) 我们需要调用的驱动功能可能没有源码,那么如何构造源码参数2?
        2)即使存在源码,我们如果要做批量的fuzz,如何比较通用的构造参数2?

        参数3是个指针,可能指向一个结构体,那么参数3构造同样存在上面的两个问题,而且更加不好解决。即使是写漏洞检测代码或者漏洞poc,找到这些结构体依赖也是一件体力活。

二、驱动层

        在用户层调用了ioctl函数之后,内核里面对应的ioctl函数会被调用,我们暂时不去关心这中间的调用链。我们把重点放在内核层的ioctl函数以及驱动程序的执行流程上。


        

1

主题

8254

帖子

-2526

安币

限制会员

发表于 2017-11-15 02:00:51 | 显示全部楼层
感谢分享,楼主V5~

21

主题

8525

帖子

-2129

安币

限制会员

发表于 2017-11-15 13:59:06 | 显示全部楼层
感觉楼主很用心,辛苦啦~

3

主题

8555

帖子

-2482

安币

限制会员

QQ达人

发表于 2017-11-16 02:12:48 | 显示全部楼层
帮帮顶顶!!

9

主题

8485

帖子

-1897

安币

限制会员

QQ达人

发表于 2017-11-16 17:21:23 | 显示全部楼层
帮帮顶顶!!

2

主题

8446

帖子

-2563

安币

限制会员

发表于 2017-11-17 17:21:08 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表