摘要:通過(guò)對(duì)Android監(jiān)聽(tīng)機(jī)制的分析,實(shí)現(xiàn)了手機(jī)短信的攔截和監(jiān)聽(tīng),通話的監(jiān)聽(tīng),后臺(tái)未授權(quán)程序安裝的監(jiān)聽(tīng),網(wǎng)絡(luò)流量的監(jiān)控,通過(guò)實(shí)現(xiàn)過(guò)程和原理分析,對(duì)防范Android后臺(tái)監(jiān)聽(tīng)等敏感行為具有較為普遍的理論指導(dǎo)意義。
關(guān)鍵詞:android;監(jiān)聽(tīng)機(jī)制;后臺(tái)
中圖分類號(hào):F416.6 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 15-0000-02
1 引言
Android是一種以Linux為基礎(chǔ)的開(kāi)放源代碼操作系統(tǒng)[1]。Android 后臺(tái)監(jiān)聽(tīng)一般為BroadcastReceiver或者利用Service的一種無(wú)界面的后臺(tái)運(yùn)行程序,本文旨在通過(guò)對(duì)后臺(tái)監(jiān)聽(tīng)行為的分析與實(shí)現(xiàn),來(lái)為防護(hù)Android后臺(tái)監(jiān)聽(tīng)等敏感行為提供理論指導(dǎo)。
2 基本原理
一般來(lái)講,后臺(tái)監(jiān)聽(tīng)程序是基于BroadcastReceiver(廣播接收器)的[2],因?yàn)樵贏ndroid中,Broadcast是一種廣泛應(yīng)用在應(yīng)用程序之間傳輸信息的機(jī)制[3],而后臺(tái)監(jiān)聽(tīng)程序正可以利用Broadcast來(lái)監(jiān)聽(tīng)一些系統(tǒng)的廣播,通過(guò)對(duì)廣播的監(jiān)聽(tīng)實(shí)現(xiàn)整個(gè)監(jiān)聽(tīng)程序的功能。
在Android中,應(yīng)用程序的響應(yīng)性被活動(dòng)管理器(ActivityManager)和窗口管理器(WindowManage)這兩個(gè)系統(tǒng)服務(wù)所監(jiān)視。當(dāng)用戶觸發(fā)了輸入事件,而在五秒內(nèi)沒(méi)有響應(yīng)用戶的輸入事件,那么,Android會(huì)認(rèn)為該應(yīng)用無(wú)響應(yīng),便彈出ANR(ApplicationNo Response)對(duì)話框[3],因此在做耗時(shí)操作的時(shí)候,一般利用Service[3](服務(wù))來(lái)實(shí)現(xiàn),Service(服務(wù))是一個(gè)沒(méi)有用戶界面的在后臺(tái)運(yùn)行執(zhí)行耗時(shí)操作的應(yīng)用組件。
3 基于后臺(tái)監(jiān)聽(tīng)機(jī)制的敏感行為的實(shí)現(xiàn)
通過(guò)對(duì)監(jiān)聽(tīng)機(jī)制的分析,可以發(fā)現(xiàn),只要監(jiān)聽(tīng)系統(tǒng)廣播,就可以完成對(duì)于整個(gè)系統(tǒng)的監(jiān)聽(tīng),尤其是對(duì)于一些相對(duì)于手機(jī)用戶比較敏感的行為。比如,短信操作,通話操作,后臺(tái)程序非主動(dòng)的安裝和卸載,以及流量統(tǒng)計(jì)包括聯(lián)網(wǎng)等。
3.1 監(jiān)聽(tīng)對(duì)短信、通話的操作
(1)對(duì)短信的攔截。在接收短信時(shí),通過(guò)在Receive中重寫onReceive()方法來(lái)監(jiān)聽(tīng)系統(tǒng)廣播“android.provider.Telephony.SMS_RECEIVED”,監(jiān)聽(tīng)到接收短信的通知后,可以在onReceive()寫入自定義的方法對(duì)其進(jìn)行操作,通過(guò)內(nèi)容匹配、號(hào)碼匹配來(lái)進(jìn)行篩選短信,對(duì)一些含有敏感詞的短信或者陌生號(hào)碼的短信,用abortBroadcast()屏蔽掉其在消息欄的Notification(通知)[3]。實(shí)現(xiàn)流程圖:
(2)本文實(shí)現(xiàn)的監(jiān)聽(tīng)通話的操作是通過(guò)在Receive中改寫onReceive()方法來(lái)監(jiān)聽(tīng)系統(tǒng)廣播“android.intent.action.NEW_OUTGOING_CALL”,實(shí)現(xiàn)方式和短信操作類似,這里不做詳細(xì)討論。
監(jiān)聽(tīng)通話和短信操作都需要獲得相應(yīng)的權(quán)限。如接收短信、讀取短信、發(fā)送短信、接聽(tīng)電話等權(quán)限。
3.2 監(jiān)聽(tīng)程序的安裝和卸載
由于Android發(fā)展迅猛,Android的安全問(wèn)題越來(lái)越嚴(yán)峻,許多木馬私自在后臺(tái)安裝一些惡意程序,使用智能手機(jī)的人可能都有一種經(jīng)歷,就是當(dāng)自己調(diào)出所安裝程序目錄的時(shí)候,會(huì)發(fā)現(xiàn)很多程序根本就不是自己安裝的,那么這些程序很有可能就是惡意程序。本文從后臺(tái)監(jiān)聽(tīng)方面實(shí)現(xiàn)了對(duì)程序安裝和卸載的監(jiān)聽(tīng),使手機(jī)的安全性得到極大保障。
在Android中安裝和卸載程序的時(shí)候會(huì)發(fā)送一個(gè)系統(tǒng)廣播,而一些惡意木馬等通過(guò)屏蔽廣播等手段,使安裝惡意程序?qū)τ脩敉该?,因此Android系統(tǒng)的安全使用受到嚴(yán)重威脅。本文通過(guò)Broadcast Receiver的onReceive()方法,監(jiān)聽(tīng)系統(tǒng)廣播“android.intent.action.PACKAGE_ADDED”和“..PACAGE_REMOVED”,實(shí)現(xiàn)了對(duì)安裝和卸載程序的監(jiān)聽(tīng),并用自己的方法調(diào)用NotificationManager,實(shí)現(xiàn)了一個(gè)對(duì)程序安裝和卸載的監(jiān)聽(tīng)并在界面進(jìn)行顯示通知。如圖所示,通過(guò)圖中可以發(fā)現(xiàn),用戶可以知道所有程序的安裝和卸載的時(shí)間以及包名。
界面通知的實(shí)現(xiàn)代碼[4]:
String service = Context.NOTIFICATION_SERVICE;
NotificationManager nm = (NotificationManager) context
.getSystemService(service);
Notification n = new Notification();
n.icon = R.drawable.ic_launcher;
n.tickerText = \"監(jiān)聽(tīng)程序檢測(cè)到消息:\";
n.when = System.currentTimeMillis();
PendingIntent pt = PendingIntent.getActivity(context, 0, 1, 0);
n.setLatestEventInfo(context, \"安裝了程序:\", packageName, pt);
nm.notify(1, n);
3.3 監(jiān)聽(tīng)程序上網(wǎng)流量[5]
經(jīng)過(guò)對(duì)正常軟件和惡意軟件的網(wǎng)絡(luò)流量進(jìn)行統(tǒng)計(jì)分析后發(fā)現(xiàn):正常的軟件的上行流量是遠(yuǎn)小于下行流量的,而惡意軟件則恰好相反,往往上行流量要大于下行流量。因此我們可以通過(guò)后臺(tái)監(jiān)控上網(wǎng)流量,對(duì)Android系統(tǒng)進(jìn)行保護(hù)。
Android 2.2及其以上版本提供了一個(gè)讀取網(wǎng)絡(luò)流程數(shù)據(jù)的類TrafficStats,該類有一系列靜態(tài)函數(shù),這些函數(shù)的功能可以實(shí)現(xiàn)本作品對(duì)軟件網(wǎng)絡(luò)流量的監(jiān)控。本文中使用到的TrafficStats的靜態(tài)函數(shù)如下圖所示:
函數(shù)名功能
getUidTcpRxBytes(int uid)User ID為uid的應(yīng)用程序(下同)接收到的Tcp字節(jié)數(shù)
getUidTcpTxBytes(int uid)應(yīng)用程序發(fā)送的Tcp字節(jié)數(shù)
getUidUdpRxBytes(int uid)應(yīng)用程序接收的Udp字節(jié)數(shù)
getUidUpdTxBytes(int uid)應(yīng)用程序發(fā)送的Udp字節(jié)數(shù)
getUidRxPackets(int uid)應(yīng)用程序接收的數(shù)據(jù)包數(shù)(包括Tcp和Udp)
getUidTxPacktets(int uid)應(yīng)用程序發(fā)送的數(shù)據(jù)包數(shù)(包括Tcp和Udp)
getUidRxBytes(int uid)應(yīng)用程序接收的總字節(jié)數(shù)
getUidTxBytes(int uid)應(yīng)用程序發(fā)送的總字節(jié)數(shù)
為了保證對(duì)Android 2.1及其以下版本的兼容性,本文利用其他手段獲取程序的數(shù)據(jù)流量。通過(guò)對(duì)TrafficStats類的源碼進(jìn)行分析可以發(fā)現(xiàn),其實(shí)現(xiàn)方法是讀取/proc目錄下應(yīng)用程序進(jìn)程的net/dev文件,此文件記錄了具體的網(wǎng)絡(luò)流量數(shù)據(jù)。因此,對(duì)于較低版本的Android系統(tǒng),我們采用直接讀取/proc/
4 結(jié)束語(yǔ)
本文主要實(shí)現(xiàn)了4種敏感行為的后臺(tái)監(jiān)聽(tīng),對(duì)于木馬的一些惡意操作做了相應(yīng)猜想,對(duì)于防護(hù)木馬以及對(duì)抗其他惡意程序方面提供了理論基礎(chǔ),對(duì)于在Android基礎(chǔ)上的智能手機(jī)有一定的實(shí)踐指導(dǎo)意義。
參考文獻(xiàn):
[1]靳巖,姚尚朗著.Android開(kāi)發(fā)入門與實(shí)戰(zhàn)[M].人民郵電出版社,2009.
[2]賴超等.基于Android平臺(tái)的手機(jī)后臺(tái)監(jiān)聽(tīng)技術(shù)[J].電腦知識(shí)與技術(shù),2010,06,33.
[3]李剛著.瘋狂android講義(第一版)[M].電子工業(yè)出版社,2011
[4]郭宏志著.Android應(yīng)用開(kāi)發(fā)詳解[M].電子工業(yè)出版社,2010
[5]邵玉如,孫潤(rùn)康等.Android手機(jī)安全檢測(cè)與取證分析系統(tǒng)[J].(全國(guó)大學(xué)生信息安全大賽參賽文檔(未公開(kāi)))