基于Android 后台监听机制的程序实现

时间:2022-08-11 10:44:49

基于Android 后台监听机制的程序实现

摘要:通过对Android监听机制的分析,实现了手机短信的拦截和监听,通话的监听,后台未授权程序安装的监听,网络流量的监控,通过实现过程和原理分析,对防范Android后台监听等敏感行为具有较为普遍的理论指导意义。

关键词:android;监听机制;后台

中图分类号:F416.6 文献标识码:A 文章编号:1007-9599 (2012) 15-0000-02

1 引言

Android是一种以Linux为基础的开放源代码操作系统[1]。Android 后台监听一般为BroadcastReceiver或者利用Service的一种无界面的后台运行程序,本文旨在通过对后台监听行为的分析与实现,来为防护Android后台监听等敏感行为提供理论指导。

2 基本原理

一般来讲,后台监听程序是基于BroadcastReceiver(广播接收器)的[2],因为在Android中,Broadcast是一种广泛应用在应用程序之间传输信息的机制[3],而后台监听程序正可以利用Broadcast来监听一些系统的广播,通过对广播的监听实现整个监听程序的功能。

在Android中,应用程序的响应性被活动管理器(ActivityManager)和窗口管理器(WindowManage)这两个系统服务所监视。当用户触发了输入事件,而在五秒内没有响应用户的输入事件,那么,Android会认为该应用无响应,便弹出ANR(ApplicationNo Response)对话框[3],因此在做耗时操作的时候,一般利用Service[3](服务)来实现,Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。

3 基于后台监听机制的敏感行为的实现

通过对监听机制的分析,可以发现,只要监听系统广播,就可以完成对于整个系统的监听,尤其是对于一些相对于手机用户比较敏感的行为。比如,短信操作,通话操作,后台程序非主动的安装和卸载,以及流量统计包括联网等。

3.1 监听对短信、通话的操作

(1)对短信的拦截。在接收短信时,通过在Receive中重写onReceive()方法来监听系统广播“android.provider.Telephony.SMS_RECEIVED”,监听到接收短信的通知后,可以在onReceive()写入自定义的方法对其进行操作,通过内容匹配、号码匹配来进行筛选短信,对一些含有敏感词的短信或者陌生号码的短信,用abortBroadcast()屏蔽掉其在消息栏的Notification(通知)[3]。实现流程图:

(2)本文实现的监听通话的操作是通过在Receive中改写onReceive()方法来监听系统广播“android.intent.action.NEW_OUTGOING_CALL”,实现方式和短信操作类似,这里不做详细讨论。

监听通话和短信操作都需要获得相应的权限。如接收短信、读取短信、发送短信、接听电话等权限。

3.2 监听程序的安装和卸载

由于Android发展迅猛,Android的安全问题越来越严峻,许多木马私自在后台安装一些恶意程序,使用智能手机的人可能都有一种经历,就是当自己调出所安装程序目录的时候,会发现很多程序根本就不是自己安装的,那么这些程序很有可能就是恶意程序。本文从后台监听方面实现了对程序安装和卸载的监听,使手机的安全性得到极大保障。

在Android中安装和卸载程序的时候会发送一个系统广播,而一些恶意木马等通过屏蔽广播等手段,使安装恶意程序对用户透明,因此Android系统的安全使用受到严重威胁。本文通过Broadcast Receiver的onReceive()方法,监听系统广播“android.intent.action.PACKAGE_ADDED”和“..PACAGE_REMOVED”,实现了对安装和卸载程序的监听,并用自己的方法调用NotificationManager,实现了一个对程序安装和卸载的监听并在界面进行显示通知。如图所示,通过图中可以发现,用户可以知道所有程序的安装和卸载的时间以及包名。

界面通知的实现代码[4]:

String service = Context.NOTIFICATION_SERVICE;

NotificationManager nm = (NotificationManager) context

.getSystemService(service);

Notification n = new Notification();

n.icon = R.drawable.ic_launcher;

n.tickerText = "监听程序检测到消息:";

n.when = System.currentTimeMillis();

PendingIntent pt = PendingIntent.getActivity(context, 0, null, 0);

n.setLatestEventInfo(context, "安装了程序:", packageName, pt);

nm.notify(1, n);

3.3 监听程序上网流量[5]

经过对正常软件和恶意软件的网络流量进行统计分析后发现:正常的软件的上行流量是远小于下行流量的,而恶意软件则恰好相反,往往上行流量要大于下行流量。因此我们可以通过后台监控上网流量,对Android系统进行保护。

Android 2.2及其以上版本提供了一个读取网络流程数据的类TrafficStats,该类有一系列静态函数,这些函数的功能可以实现本作品对软件网络流量的监控。本文中使用到的TrafficStats的静态函数如下图所示:

函数名 功能

getUidTcpRxBytes(int uid) User ID为uid的应用程序(下同)接收到的Tcp字节数

getUidTcpTxBytes(int uid) 应用程序发送的Tcp字节数

getUidUdpRxBytes(int uid) 应用程序接收的Udp字节数

getUidUpdTxBytes(int uid) 应用程序发送的Udp字节数

getUidRxPackets(int uid) 应用程序接收的数据包数(包括Tcp和Udp)

getUidTxPacktets(int uid) 应用程序发送的数据包数(包括Tcp和Udp)

getUidRxBytes(int uid) 应用程序接收的总字节数

getUidTxBytes(int uid) 应用程序发送的总字节数

为了保证对Android 2.1及其以下版本的兼容性,本文利用其他手段获取程序的数据流量。通过对TrafficStats类的源码进行分析可以发现,其实现方法是读取/proc目录下应用程序进程的net/dev文件,此文件记录了具体的网络流量数据。因此,对于较低版本的Android系统,我们采用直接读取/proc//net/dev文件的方式获取应用程序的网络流量特征。

4 结束语

本文主要实现了4种敏感行为的后台监听,对于木马的一些恶意操作做了相应猜想,对于防护木马以及对抗其他恶意程序方面提供了理论基础,对于在Android基础上的智能手机有一定的实践指导意义。

参考文献:

[1]靳岩,姚尚朗著.Android开发入门与实战[M].人民邮电出版社,2009.

[2]赖超等.基于Android平台的手机后台监听技术[J].电脑知识与技术,2010,06,33.

[3]李刚著.疯狂android讲义(第一版)[M].电子工业出版社,2011

[4]郭宏志著.Android应用开发详解[M].电子工业出版社,2010

[5]邵玉如,孙润康等.Android手机安全检测与取证分析系统[J].(全国大学生信息安全大赛参赛文档(未公开))

上一篇:技工学校《计算机应用基础》教学中的问题与对... 下一篇:关于计算机软件工程项目管理的研究