码迷,mamicode.com
首页 > 移动开发 > 详细

Notification的改进与cancel方法 --看Android系统的系统安全优化

时间:2014-08-15 12:52:08      阅读:351      评论:0      收藏:0      [点我收藏+]

标签:android   style   http   java   使用   os   io   数据   

由于Android市场管理的不健全,很多APP都通过向通知栏投广告的方式诱导用户点击,广告多了,很是烦心。

因此好多安全软件提供了去通知栏广告的功能,甚至
Android4.2以后提供了disable某个appnotification功能,来净化通知栏。可见通知栏的控制对于用户来说至关重要。
bubuko.com,布布扣

安卓安全小分队在研究这一功能时,希望提出一些建设性的意见供大家参考。
一、组织结构
1. NotificationManagerService
NotificationManagerService 是通知栏的大总管,负责处理所有APP发送来的通知消息。其功能非常简单,查看NotificationManagerService.java的代码可以得知。
NMS做的工作大致可分为:
a. 查询/设置某个APP的发通知能力(可禁用某APP发送通知,4.2版本后推出);
b. 接受APP发送的通知;
c. 记录notification数据;
d. 发送应该显示的通知到通知栏(StatusBar
e. 删除某条通知;
2. NotificationRecord
如果大家认为Notification类是NMS用来存储Notification的信息的数据结构那就大错特错了,在NMS内部是用NotificationRecord来存储的,其中包括了Notification类。

除了
Notification类以外NMS还记录了关于此条通知的其他信息,包括packageName, tag, id, score等。因此如果某个安全软件需要查询系统中存在的Notification,光去查Notification类本身是不够的,应该去查询NotificationRecord才能正确找到需要删除的通知。可是这个类是定义在NMS 内部的,而且属性为private,安全软件想要获取是异常辛苦的。
二、cancel方法
NMScancel方法有两种。
1. cancelNotificationWithTag((String pkg,String tag, int id)。通过Tagid组合来删除特定的通知。
2. cancelAllNotifications(String pkg)。删除某个package下的所有notification
这两种方法都没有对外暴露,普通的APP只能通过NotificationManagercancel方法来cancel自己发出去的通知(NotificationManager最终还是会调用到NMS里的那两个cancel方法的)。如果安全软件要动别人的通知,那就需要额外做些努力了,我们了解到的,可以在root之后通过反射来调用。
三、我们的想法
有需求就会有实现,在4.0时代,通知栏还不支持禁用某个APP的推送通知功能。但是可能是在众多用户的呼吁下,在4.2时代,google添加了setNotificationsEnabledForPackage(String pkg, boolean enabled)函数,使用户可以禁用掉自己厌烦的广告信息。此函数的调用是在“设置”里,如前图所示,去掉Show Notification的勾APP就不会再推送消息了。
同理,笔者认为,对于安全软件商来说,在系统中开放若干查询和删除notification的接口,对于用户和安全软件来说都大有益处,和系统对“设置”开放了setNotificationsEnabledForPackage接口的初衷一样。我们的理念是,避免手机被root,对于安全软件,只要开放合适的权限和提供必要的接口,满足安全需要就够了。这样,一来可以避免手机被root后各种无良软件绑架手机,肆意破坏;一来也给优秀的正规的安全软件以方便之门,让他们以人性化、界面友好的方式为我们提供安全保障服务。
就查询notification的功能来说,我们可以将NMS记录的notification信息整理到一起,对外暴露接口以方便查询。在查询接口中对调用者的签名进行验证,以保证只有合格的安全软件才可以使用。
同理对于cancel方法,我们也可以用同样原理,在检查了签名后直接调用NMS的两个cancel方法。
Android系统本身应该是属于安全型的系统,用户主动或被动的root了自己的手机,就违背了Android的初衷,导致了各种后遗症的产生。放开了Android系统对软件的监管,使Android系统变得不安全。就像打开了潘多拉盒子,在得到便利的同时,系统也更加容易受到攻击。
所以我们还是重申我们的主张,手机安全还是要从系统入手,只要系统本身能够提供安全软件的功能,或者有针对性地将系统接口给安全软件使用,那么,安卓系统在安全上的“水土不服”就能够解决了

转载自 http://bbs.51cto.com/thread-1035850-1.html

Notification的改进与cancel方法 --看Android系统的系统安全优化,布布扣,bubuko.com

Notification的改进与cancel方法 --看Android系统的系统安全优化

标签:android   style   http   java   使用   os   io   数据   

原文地址:http://blog.csdn.net/eoeandroida/article/details/38582967

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!