一、 基本信息
病毒名称:Trojan/Android.Pjapps
病毒类型:木马
样本MD5:927716756DD139381938D5E9FCB030CB
样本长度: 3866,004 字节
感染系统:Android 1.5及以上
二、 概述
该样本是Pjapps变种,植入到手机QQ软件中,它向手机浏览器的书签中添加多个网址,并将用户个人信息发送至指定网址。具体而言,开机后或手机信号强度发生变化时,该木马启动,将“泡椒网”、“泡椒池塘”、“G3网址大全”等网址添加到手机默认浏览器的书签之中;获取并记录被感染手机的IMEI、IMSI、所属移动厂商短信中心号码、本机号码等信息到指定文件;将其中一部分隐私信息发送到指定网址;对运营商的短信中心号码发送的信息进行拦截,使用户无法发觉。
三、 样本特征
1. 敏感权限
android.permission.RECEIVE_WAP_PUSH 允许应用程序接收和处理 WAP 信息。恶意应用程序可借此监视您的信息,或者将信息删除而不向您显示。
android.permission.READ_CONTACTS 允许应用程序读取您手机上存储的所有联系人(地址)数据。恶意应用程序可借此将您的数据发送给其他人。
android.permission.READ_SMS 允许应用程序读取您的手机或 SIM 卡中存储的短信。恶意应用程序可借此读取您的机密信息。
android.permission.ACCESS_CACHE_FILESYSTEM 允许应用程序读取和写入缓存文件系统。
android.permission.ACCESS_DOWNLOAD_MANAGER 下载管理的权限
android.permission.WRITE_CALENDAR 允许应用程序添加或更改日历中的活动,这可能会向邀请对象发送电子邮件。恶意应用程序可能会借此清除或修改您的日历活动,或者向邀请对象发送电子邮件。
android.permission.WRITE_CONTACTS 允许应用程序修改您手机上存储的联系人(地址)数据。恶意应用程序可借此清除或修改您的联系人数据。
android.permission.WRITE_SETTINGS 允许应用程序修改系统设置方面的数据。恶意应用程序可借此破坏您的系统配置。
android.permission.WRITE_SMS 允许应用程序写入手机或 SIM 卡中存储的短信。恶意应用程序可借此删除您的信息。
android.permission.WRITE_SYNC_SETTINGS 允许应用程序修改同步设置,例如是否为“联系人”启用同步。
android.permission.WRITE_APN_SETTINGS 允许应用程序修改 APN 设置,例如任何 APN 的代理和端口。
android.permission.CHANGE_NETWORK_STATE 允许应用程序更改网络连接的状态。
android.permission.RECEIVE_BOOT_COMPLETED 开机时就自动运行
android.permission.RECEIVE_SMS 短信接收权限
android.permission.SEND_SMS 短信发送权限
com.android.browser.permission.READ_HISTORY_BOOKMARKS 读浏览器的书签
com.android.browser.permission.WRITE_HISTORY_BOOKMARKS 写浏览器的书签
2. 入口点和恶意模块
接收器(Receiver)com.android.AndroidActionReceiver,由android.intent.action.SIG_STR事件(电话的信号强度改变)以及 android.intent.action.BOOT_COMPLETED事件(开机自启动)触发,用于启动服务com.android.MainService,来执行被植入的恶意代码。
服务(Service)com.android.MainService,主要的恶意模块。
3. 敏感字符串
特殊的URL地址:
http://android188.com: 8118/push/androidxml/等参数
http://android188.com: 9033/window.log?id=等参数
进行判断网络的号码:“10086”、“10010”
发送目标号码的内容:“801”
手机日志信息的路径:“ /sdcard/androidh.log”
四、 行为分析
通过“android.intent.action.SIG_STR”或“android.intent.action.BOOT_COMPLETED”响应事件,来启动广播接收“com.android.AndroidActionReceiver”,然后通过这个广播接收器来启动“com.android.MainService”服务。
1. 向浏览器书签中插入数据
主要通过判断当前服务中的变量ismark的值是否为1(默认为1),如果为1时,通过URI为content://browser/bookmarks,取得浏览器所有“书签”信息,然后通过ContentResolver中的insert方法向浏览器的书签中插入三条信息,此处插入的网址信息还通过相应函数进行编码,以防止被查杀,通过解析后得到的插入三条信息分别是。相关代码如下:

图 1向浏览器插入数据
2. 访问指定网址
1) 通过registerReceiver方法来注册一个广播接收器SMSReceiver,其中三个Action启动事件为“com.test.sms.delivery”、“com.test.sms.send”、“android.provider.Telephony.SMS_RECEIVED”,用来执行写入手机的相关信息及访问指定网址。通过“phone”服务获得当前移动用户的IMEI、IMSI、本机号码,然后通IMSI确定当前移动用户所属网络(10086或10010),具体代码如图 2;然后通过获取的值进行判断,将其一些变量通过“|”分割存储在手机卡目录“ /sdcard/androidh.log”中。具体代码片段如下:

图 2 获取信息及判断所属网络
2) 通过判断当前变量issend的值是否为1,如果为1,则向之前获取的所属网络的号码发送一条信息,内容为“801”,在发送的同时执行“com.test.sms.send”和“com.test.sms.delivery” 事件启动SMSReceiver广播接收器,发送完成之后将issend值设置为0,表示成功后不再执行,并将设置之后执行的内容的休眠事件。具体代码示例如下:

图 3 向短信中心发送短消息
3) 当SMSReceiver获得的Action为接受短消息“android.provider.Telephony.SMS_RECEIVED” 事件时,通过getServiceCenterAddress()来获取短信服务中心号码(当前移动用户设置的),通过getDisplayOriginatingAddress()获得发送信息的号码,通过getDisplayMessageBody()获得接受的信息内容,判断其发送信息的号码是否为“100”开头,判断其服务中心的号码是否存在,不存在就读取手机卡上之前存储在“ /sdcard/androidh.log”中的短信中心的号码,并将其写入“ /sdcard/androidh.log”中,直到短信中心号码匹配及存在之后,将其获得的一些变量做为参数去访问 “http://android188.com: 9033/window.log”,此处的地址同样被编译成乱序字符组成的字符串,目的实现免被查到,需通过相关方法进行转化。具体代码示例如下:

图 4 访问指定网址
|