收录于话题









3.2 Notifications
通知在Android系统中应用极为广泛,用于在状态栏中对用户进行提示,几乎为每个App所使用,是安卓开发者最常使用PendingIntent的地方,如下为发送通知的示例代码

通过 setContentIntent 方法对通知设置了一个contentIntent PendingIntent,使用户在点击通知的正文时,触发PendingIntent,跳转到AlertDetails。除了contentIntent外,通知中还可以设置其他按钮,通过actionIntent进行设置,下面的通知示例表明了通知中的各种PendingIntent。另外,通知还可能包括另外一个deleteIntent PendingIntent,在被用户删除通知时触发。

图: 通知示例
对于通知中PendingIntent的获取,安卓系统提供了通知监听服务NotificationListenerService,
任何三方App都可以实现该服务对通知进行监听。


3.3 MediaBrowserService
媒体浏览器服务MediaBrowserService与音乐播放有关,可以让其他App发现、浏览媒体内容并控制播放。媒体浏览服务中也可能使用PendingIntent来作为回调。那么其他App可以实现媒体浏览器MediaBrowser来连接MediaBrowserService,进而获取PendingIntent。
MediaBrowser与MediaBrowserService的实现架构如图所示。MediaBrowser作为客户端,实现了UI、媒体控制和媒体浏览的功能,连接MediaBrowserService,获得媒体内容层次结构的表示,如播放列表、媒体库等等,并获得有关播放状态的回调信息。

图:MediaBrowserService架构概览


通过实现AppWidgetHost,访问AppWidgetProvider中的AppWidgets,获取RemoteView,进而有可能获取RemoteView中的PendingIntent。
RemoteViews可以通过AppWidgetServiceImpl中的下列AIDL接口拿到

但是拿到RemoteViews以后再获取PendingIntent却颇费周折,因为RemoteViews并未提供公开API来获取其中的PendingIntent。但经过分析,我们发现可以通过反射,按照如下顺序逐次获取隐藏的成员变量mPendingIntent。

感谢OPPO安全与子午实验室对议题发表的大力支持!感谢前同事陈文波和香港中文大学吴道远两位同作者对本议题的贡献!
下篇我们将继续探讨第二个关键问题:如果这些PendigIntent不安全,如何利用才能造成安全危害?敬请关注!
4、参考
作者简介
heeeeen 安全架构师
毕业于北京航空航天大学,擅长Android框架与APP漏洞挖掘,多次获得Google安全致谢
丨OPPO技术开放日第六期丨OPPO安全解析“应用与数据安全防护”背后的技术
丨潜藏在手机中的新威胁:免安装应用安全指北
丨Android代码安全开发指导
最新评论
Thanks for your blog, nice to read. Do not stop.
1
1
你图片显示不了
你的网站怎么注册啊