一枚Android "短信小偷" 病毒的分析

来源:互联网 发布:松竹歌舞伎 知乎 编辑:程序博客网 时间:2024/05/22 08:34

一、样本简介

样本来自于吾爱破解论坛链接地址为http://www.52pojie.cn/thread-410238-1-1.html,样本不是很复杂有空就分析了一下。Android病毒样本还是很有意思的,有需要分析的样本发到论坛分析分析。

 

二、样本信息

文件名称:10086.apk 

文件大小:32117 byte

文件类型:application/jar

病毒名称:Android.SmsThief.BS

MD5:c2cd6abcb62a8df958049acffa204392

SHA1:de9bdbf724e6adf9bfe1bed7047b176851b5ae74




三、样本病毒行为分析

0x1. 静态注册短信拦截广播、开机启动广播、唤醒手机等广播,对除Nexus之外的机型进行短信的拦截,将用户手机上收的短信的信息和短信发送人等数据发送到病毒作者的指定服务器网址"http://wap.dzf10086.com/kk/ch.php"和指定手机号13066310152上。




0x2.拦截除病毒作者手机号码13066310152之外所有发送到用户手机上的短信,并将用户手机上的短信的内容和短信发送人等信息,通过网络提交到病毒作者的服务器"http://wap.dzf10086.com/kk/ch.php"上并通过短信的方式发送到病毒作者的指定手机号13066310152上,然后查询用户的手机短信箱"content://sms/inbox"将用户手机上收到别人发送来的短信的记录删除,或者开启病毒服务。





0x3.这里需要说明一下,病毒作者接受短信的手机号使用AES算法进行了加密,解密之后可以得到病毒作者的手机号为13066310152






解密病毒作者接受短信的手机号的代码:

import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.SecretKeySpec;public class AesDecryptString {public static void main(String[] args) {// AES算法解密后的字符串--病毒作者的手机号String strAesDecryptString = GetAesDecryptString("37349EC2F427A1AF812DA757988CB9DE",                   "AE920882F4F5818501AB6256F91691D5");//输出AES解密的字符串System.out.println("The PhoneNumber is :"+strAesDecryptString);  //病毒作者的手机号码 - 13066310152}//解密AES算法加密的字符串 public static String GetAesDecryptString(String content, String key) {        try {            Cipher Cipher = javax.crypto.Cipher.getInstance("AES");            Cipher.init(2, new SecretKeySpec(parseHexStr2Byte(key), "AES"));            String strDecrypt = new String(Cipher.doFinal(parseHexStr2Byte(                    content)));            return strDecrypt;        }        catch(BadPaddingException e) {            e.printStackTrace();        }        catch(IllegalBlockSizeException v1_1) {            v1_1.printStackTrace();        }        catch(NoSuchPaddingException v1_2) {            v1_2.printStackTrace();        }        catch(NoSuchAlgorithmException v1_3) {            v1_3.printStackTrace();        }        catch(InvalidKeyException v1_4) {            v1_4.printStackTrace();        }        return null;    } //字符串转换 public static byte[] parseHexStr2Byte(String hexStr) {        byte[] byteArry;        int v6 = 16;        if(hexStr.length() < 1) {            byteArry = null;        }        else {            byteArry = new byte[hexStr.length() / 2];            int v1;            for(v1 = 0; v1 < hexStr.length() / 2; ++v1) {                byteArry[v1] = ((byte)(Integer.parseInt(hexStr.substring(v1 * 2, v1 * 2 + 1), v6) *                         16 + Integer.parseInt(hexStr.substring(v1 * 2 + 1, v1 * 2 + 2), v6)));            }        }        return byteArry;    }}

0x4.下面是病毒apk程序将用户的短信拦截提交到病毒作者的服务器网址"http://wap.dzf10086.com/kk/ch.php"上以及发送到病毒作者的手机"13066310152"上。






0x5.动态注册短信广播"android.provider.Telephony.SMS_RECEIVED",设置短信广播的高优先级,对用户的短信进行拦截,然后通过网络和短信发送给病毒作者。







0x6.监控用户收件箱的变化—拦截用户手机上的短信以后发送到病毒作者的手机上然后删除拦截到的短信在用户短信收件箱的记录




0x7.静态注册"android.app.action.DEVICE_ADMIN_ENABLED" 广播,一旦用户误操作点击“激活”以后病毒apk程序就会被锁定,不能用户卸载,并且病毒apk程序被锁定的信息还会以提示“已激活”发送到病毒作者的服务器和手机上。








0x8. 病毒apk程序运行时,会开启病毒服务(上面已经分析)拦截用户的短信发送给病毒的作者,隐藏当前apk程序的图标,诱导用户点击“激活”锁定设备,导致该apk不能被用户卸载。






0x9.判断用户的手机有没有被root。






0 0