转自CSDN《程序员杂志》 作者:火点,Orlando
任何一款独立的操作系统都离不开输入输出环节,并且输入输出的安全与否关于到使用这个操作系统的用户隐私安全,Android系统也不例外,而且用户对手机的使用频率远远大于PC,这使得它的输入输出安全越发重要。本文抛砖引玉,对Android输入输出系统安全深入浅出的分析。
输入输出子系统的重任
简单的说,用户与手机的所有交互都是输入输出子系统承载的,用户通过各种输入设备向系统传达指令,如触摸屏,物理按键,各种sensor等等,然后结果输入子系统传递到某个具体应用完成用户想要的操作,然后通过输出子系统呈现给用户结果。由此可见,如果输入输入被攻破,用户的隐私数据将被轻松窃取,造成极大损失,如输入的银行卡号,密码,身份信息,隐私聊天记录,照片,视频等等,都有可能被窃取。那时,手机真的就变成手雷了。
那么,Android输入输出子系统到底安全吗?且看下面的分析。
输入子系统的漫漫长路
Android输入子系统工作内容主要包括以下几点:
1. InputReader线程从按键,触摸屏等输入设备获取原始输入信息
开机后,Android中最重要的系统进程system_server中的InputManagerService在初始化中会创建两个线程用来处理输入事件,一个是InputReaderThread,一个是InputDispatcherThread。InputReaderThread在死循环中一直从EventHub中读取系统的输入事件,然后发送到InputDispatcher类中的一个队列里,用于InputDispatcher对其进行分发。
2. InputDispatcher线程处理InputDispatcher队列中的事件。
在InputReaderThread使用了epoll机制,当有新的输入事件线程被唤醒,把转换好的消息发送到相应的窗口去,通过InputChannel把事件发送给具体的app进程。
3. App进程收到事件后,最终通过一个view tree结构的根Décor View分发到最终会处理这个事件的Child View。