通知欄清理與查詢

    由於Android市場管理的不健全,很多APP都通過向通知欄投廣告的方式誘導用戶點擊,廣告多了,很是煩心。

    因此好多安全軟件提供了去通知欄廣告的功能,甚至Android4.2以後提供了disable某個appnotification功能,來淨化通知欄。可見通知欄的控制對於用戶來說至關重要。

 

    安卓安全小分隊 在研究這一功能時,希望提出一些建設性的意見供大家參考。

一、組織結構

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系統變得不安全。就像打開了潘多拉盒子,在得到便利的同時,系統也更加容易受到攻擊。

    所以我們還是重申我們的主張,手機安全還是要從系統入手,只要系統本身能夠提供安全軟件的功能,或者有針對性地將系統接口給安全軟件使用,那麼,安卓系統在安全上的“水土不服”就能夠解決了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章