一枚Android "短信小偷" 病毒的分析
一、样本简介
样本来自于吾爱破解论坛链接地址为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。
一枚Android "短信小偷" 病毒的分析的更多相关文章
- Android 短信的还原
上篇文章讲到<Android 短信的备份>,本文主要实现Android 短信的还原,即是将一条 布局文件: <RelativeLayout xmlns:android="h ...
- Android短信监听实现,及Android4.4之后短信机制变更
前阵子公司有一个项目,简单的监听短信应用,功能只有如下两个: 1.监听短信并获取短信内容上传服务器: 2.从服务器获取短信内容,发送出去 按照传统的思路,监听短信我们有两种方式:第一种是使用广播 ...
- Android短信发送器(2)
在上一篇的<Android短信发送器>当中.发送功能并不完好.当发送内容超过限定字数时,短信就会发送失败,此时就须要推断内容是否超过限制,假设不超过限制.就直接发送,反之.则对其进行处理再 ...
- 【mob】Android短信验证+源码
在很多的应用当中,都涉及到了短信验证的功能,比如在注册或者找回密码的时候,那么我们如何通过第三方的平台来完成这个功能呢? 本面博文就实现短信验证,来做一个小的栗子. 第一步-下载开发包 第二步-将SD ...
- Android 短信验证码控件
Android 短信验证码控件,便于项目中使用统一样式,统一提示改动.个人觉得挺好用的 <span style="font-size:18px;">public cla ...
- Android 短信监听及用途分析
监听系统短信这个只能作为一个技术点来研究下,读者可能在工作中可能不会哦涉及到,一般的应用软件也不会有这个需求 但是作为程序员呢,多了解一下也是好的. Android 监听系统短信有什么用? 1.对系统 ...
- Android 短信广播接收相关问题
本人是Android新手,最近做了一个关于监听手机短信功能的应用,我在网上看资料了解到广播分为有序广播和无序广播,有序广播:无序广播又称普通广播,其中的利弊我也一时没搞清楚,我用的是有序广播实现的,具 ...
- Android 短信的备份
接着上文<Android 内容提供者的实现>,继续实战 打开File Exploer,找到mmssms.db数据库,导出 打开mmssms.db 新建项目,布局如下: <Relati ...
- [android] 短信发送器
/*****************2016年4月23日 更新********************************/ 知乎:什么是 7 位元的字符? 英文字符难道不是 8 bit 是一个字 ...
随机推荐
- Python高级——多任务编程之线程
转: Python高级--多任务编程之线程 文章目录 线程概念 1. 线程的介绍 2. 线程的概念 3. 线程的作用 多线程的使用 1. 导入线程模块 2. 线程类Thread参数说明 3. 启动线程 ...
- OpenGL中的简单坐标系初看+VAO/VBO/EBO
你好,三角形 一: 关于坐标的问题 标准化设备坐标:输入的顶点数据就应该在标准化设备坐标范围里面即:x,y,z的值都在(-1-1)之间.在这个区间之外的坐标都会被丢弃. 1.1一旦顶点数据传入顶点着色 ...
- MVC模式从Controller返回内容协商格式(Json或者Xml)
WebAPI默认的返回格式Json,但是MVC是View,如果在MVC的控制器中,想要返回Json格式该怎么操作呢 在MVC的控制器中返回json数据只需要然会JsonResult而不是ActionR ...
- 使用自定义注解和切面AOP实现Java程序增强
1.注解介绍 1.1注解的本质 Oracle官方对注解的定义为: Annotations, a form of metadata, provide data about a program that ...
- P2023 [AHOI2009]维护序列 题解(线段树)
题目链接 P2023 [AHOI2009]维护序列 解题思路 线段树板子.不难,但是...有坑.坑有多深?一页\(WA\). 由于乘法可能乘\(k=0\),我这种做法可能会使结果产生负数.于是就有了这 ...
- HOOK实现游戏无敌-直接修改客户端-2-使用VS来处理
HOOK实现游戏无敌-直接修改客户端-2-使用VS来处理 大概流程 1 首先找到游戏进程,打开进程 2 申请一段内存空间来保存我们的硬编码(virtualAllocEx) 3 找到攻击函数,修改函数的 ...
- Java例题_26 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
1 /*26 [程序 26 求星期] 2 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母. 3 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情 ...
- Java进阶专题(二十八) Service Mesh初体验
前言 ⽬前,微服务的架构⽅式在企业中得到了极⼤的发展,主要原因是其解决了传统的单体架构中存在的问题.当单体架构拆分成微服务架构就可以⾼枕⽆忧了吗? 显然不是的.微服务架构体系中同样也存在很多的挑战 ...
- 【wp】2021MAR-DASCTF_逆向
昨天打完的MAR DASCTF,来复个盘~ 不过就re做了3/4然后有事提前开溜了hhh,拿了drinkSomeTea和replace的三血心满意足(蜜汁三血执念. 感觉这回的出题人好喜欢TEA啊(正 ...
- CodeForces CF875C题解
题解 非常有意思的\(2-SAT\)的题. 听学长讲完之后感觉确实容易想到\(2-SAT\),顺理成章. 显然,对于两个串,对咱们来说有意义的显然是两个串中第一个不同的数字.那么,我们假设两个串分别是 ...