【原创】分析中国移动伪基站软件
# 中国移动伪基站软件Date: Aug 14, 2019
Tags: 分析报告
# 样本来源
[**通过10086发送的诈骗短信**](https://www.52pojie.cn/thread-1002692-1-1.html)
# 文件与自动分析报告
[恶意软件分析 & URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析](https://www.maldun.com/analysis/YXNkZmRzZmFkc2YzNTM5NjJkc2Zhc2RmYXNkZg==/)
# 分析工具
- jadx
- 魔盾行为分析
# 分析过程
> 第一次使用魔盾这个东西,感觉是挺好用的。
首先,关注包名,这肯定不是中国移动的,有这东西的可以卸载了。
![](https://img.0xpoker.cn/markdown-img/8sya3.png)
之后看**MainActivity**能看到
![](https://img.0xpoker.cn/markdown-img/9wqj6.png)
那么,就是`com.phone2.stop.activity.MainActivity`,所以去跟进这个类
![](https://img.0xpoker.cn/markdown-img/ify2w.png)
能看到执行了几个函数然后初始化了一个字符串,跟进分析
---
**C0058h.m510a**
这个函数里面
![](https://img.0xpoker.cn/markdown-img/a4rnb.png)
调用StringBuffer,然后自认为很聪明的初始化了4个字符`h~mx`,从自动分析的报告上看到这个地方是des密钥,虽然还没看到哪里是des,但是至少说明这个app还有分析的价值,那就继续往后看吧
---
**getPackageManager().setComponentEnabledSetting(getComponentName(), 2, 1)**
![](https://img.0xpoker.cn/markdown-img/2h2pr.png)
这里是开了个啥,但是我并不会写apk所以只能先搁置,大概理解为开启了某个权限
---
**C0058h.m511a**
![](https://img.0xpoker.cn/markdown-img/1ftej.png)
检查是否
![](https://img.0xpoker.cn/markdown-img/3bed5.png)
是否初始化手机号码,之后
![](https://img.0xpoker.cn/markdown-img/rc53i.png)
所以在第一次启动的时候没有初始化手机号,那么就会返回false执行if中的语句
取得手机号,同理应该也是默认手机号
![](https://img.0xpoker.cn/markdown-img/wo9tc.png)
然后`C0002f.m9a(C0051a.m360a(context).mo740d())`,能发现使用了函数`mo740d()`这个是获取默认手机号,然后传入`m9a()`这个函数是使用DES加密获取到的手机号然后存入sharedpreferences,**这时的DES的key为123456**
![](https://img.0xpoker.cn/markdown-img/5yx44.png)
> 然后在这里就有个巨大的bug,我也不清楚程序员是咋想的
能看到上图的`m580a`这个函数,是相当于`hexdecode`函数,传入的数据即为获取到的数据,也就是手机号,那么在手机号的情况下手机号为11位不满足偶数位,他也没有填充,而且如下图所示,除了手机号用了这个方法,邮箱号和邮箱密码也用了同样的算法,那么邮箱号中特殊字符如`@`就是没法转换的,所以这里一定会报错的鸭
写了个程序,可以自己测一下
```java
import java.io.*;
class test
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(bytesToHex(m580a("165")));
}
public static byte[] m580a(String str) {
byte[] bytes = str.getBytes();
int length = bytes.length;
byte[] bArr = new byte[(length / 2)];
for (int i = 0; i < length; i += 2) {
bArr = (byte) Integer.parseInt(new String(bytes, i, 2), 16);
}
return bArr;
}
public static String bytesToHex(byte[] bytes) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(bytes & 0xFF);
if(hex.length() < 2){
sb.append(0);
}
sb.append(hex);
}
return sb.toString();
}
}
```
---
所以每次还是获取的默认值?想保存的数据一个都没存进去?这程序员可能思维跟我们不一样吧。。。。。。
反正依次调用的函数为:
- 初始化接收短信的手机号[是一个沈阳的手机号]
- 初始化发邮件的邮箱号[是163邮箱]
- 初始化收邮件的邮箱号[和发邮件的是同一个]
- 初始化发邮件邮箱密码
- 初始化endtime?[这里有点迷的就是难道这个东西还会自己停的嘛]
---
之后判断是否发送手机信息,如果没有发过就通过手机号发送手机信息
![](https://img.0xpoker.cn/markdown-img/is9ah.png)
![](https://img.0xpoker.cn/markdown-img/pbqut.png)
也就是通过SMS发送手机基本信息到接收短信的手机号上
发送之前还会把一部分关键词改个写法,估计是bypass基站检测吧,但是换句话说,基站检测有这么弱的吗?
![](https://img.0xpoker.cn/markdown-img/j4uyr.png)
![](https://img.0xpoker.cn/markdown-img/v0txu.png)
发送之后马上调用函数`C0002f.m12b`
删除刚刚发送的SMS信息
![](https://img.0xpoker.cn/markdown-img/n2pbf.png)
---
C0008d.m72a
随之调用这个函数启动多线程
![](https://img.0xpoker.cn/markdown-img/jaaru.png)
![](https://img.0xpoker.cn/markdown-img/eu7iz.png)
这里的`C0008d.m75d`是发送所有手机短信到接收邮箱,当短信同时包含
![](https://img.0xpoker.cn/markdown-img/gt3c0.png)
这两个东西的时候就不发了?
然后C0008d.m76e是发送通讯录联系人到接收邮箱,当联系人包含
![](https://img.0xpoker.cn/markdown-img/unddz.png)
这两个任意之一的时候也不发了?
> 有张三没李四,有悟空没八戒。。。。。。。。。我的思维是跟不上的
---
在MainActivity的最后是
![](https://img.0xpoker.cn/markdown-img/afg1v.png)
貌似就跟他写的一样就是询问提高这个程序的权限吧
然后会在如下图所示的函数回调得到的结果,并且发送结果
![](https://img.0xpoker.cn/markdown-img/8osue.png)
---
调用`m445b`创建启动服务
> 应该是启动服务吧,写的bootservice
![](https://img.0xpoker.cn/markdown-img/ujb8f.png)
![](https://img.0xpoker.cn/markdown-img/t11vr.png)
启动的服务会监听短信接收动作,并且在自己启动的时候启动第二个服务SecondService
看事件函数onDestroy里有启动自己的操作,估计就是不让这么轻易的关闭这个服务,而且在SecondService里面也能看出这个第二个服务是个deamon,专门保护第一个服务的
![](https://img.0xpoker.cn/markdown-img/x1iw2.png)
---
在第一个启动的服务里会调用两个函数,`m321a`和`m322b`
也就是这两个函数注册了监听短信的操作
> 到此为止应该就是差不多分析完了,这里面还有邮箱账号密码,有兴趣自己
# 诈骗信息公示
- 手机号:16532498033
- 邮箱:16532498033@163.com
![](https://img.0xpoker.cn/markdown-img/k02ku.png)
![](https://img.0xpoker.cn/markdown-img/qeqfv.png)
![](https://img.0xpoker.cn/markdown-img/9ywfh.png)
> 估计都是小号,不过也公开一下吧 有人和我一样没看懂 还坚持看到底的吗 举手 490694561 发表于 2019-8-14 18:04
这么大还是手动分析吧。。。。。
我就是想看看这个分析的效果怎么样,就是没得样本,随便上传的一个 我看完一遍,翻到贴子最顶上发现没有故事 牛逼。。。 有意思!! 膜拜膜拜,不过不敢看这种资源 厉害!!学习一下 根本就看不懂,还津津有味的看完了。 虽然看不懂,还是得支持一下 学习学习