【原创】分析中国移动伪基站软件

中国移动伪基站软件

Date: Aug 14, 2019
Tags: 分析报告

样本来源

通过10086发送的诈骗短信

文件与自动分析报告

恶意软件分析 & URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析

分析工具

  • jadx

  • 魔盾行为分析

分析过程

第一次使用魔盾这个东西,感觉是挺好用的。

首先,关注包名,这肯定不是中国移动的,有这东西的可以卸载了。

之后看MainActivity能看到

那么,就是com.phone2.stop.activity.MainActivity,所以去跟进这个类

能看到执行了几个函数然后初始化了一个字符串,跟进分析


C0058h.m510a

这个函数里面

调用StringBuffer,然后自认为很聪明的初始化了4个字符h~mx,从自动分析的报告上看到这个地方是des密钥,虽然还没看到哪里是des,但是至少说明这个app还有分析的价值,那就继续往后看吧


getPackageManager().setComponentEnabledSetting(getComponentName(), 2, 1)

这里是开了个啥,但是我并不会写apk所以只能先搁置,大概理解为开启了某个权限


C0058h.m511a

检查是否

是否初始化手机号码,之后

所以在第一次启动的时候没有初始化手机号,那么就会返回false执行if中的语句

取得手机号,同理应该也是默认手机号

然后C0002f.m9a(C0051a.m360a(context).mo740d()),能发现使用了函数mo740d()这个是获取默认手机号,然后传入m9a()这个函数是使用DES加密获取到的手机号然后存入sharedpreferences,这时的DES的key为123456

然后在这里就有个巨大的bug,我也不清楚程序员是咋想的

能看到上图的m580a这个函数,是相当于hexdecode函数,传入的数据即为获取到的数据,也就是手机号,那么在手机号的情况下手机号为11位不满足偶数位,他也没有填充,而且如下图所示,除了手机号用了这个方法,邮箱号和邮箱密码也用了同样的算法,那么邮箱号中特殊字符如@就是没法转换的,所以这里一定会报错的鸭

写了个程序,可以自己测一下

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[i / 2] = (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[i] & 0xFF);  
            if(hex.length() < 2){  
                sb.append(0);  
            }  
            sb.append(hex);  
        }  
        return sb.toString();  
    }
}

所以每次还是获取的默认值?想保存的数据一个都没存进去?这程序员可能思维跟我们不一样吧。。。。。。

反正依次调用的函数为:

  • 初始化接收短信的手机号[是一个沈阳的手机号]

  • 初始化发邮件的邮箱号[是163邮箱]

  • 初始化收邮件的邮箱号[和发邮件的是同一个]

  • 初始化发邮件邮箱密码

  • 初始化endtime?[这里有点迷的就是难道这个东西还会自己停的嘛]


之后判断是否发送手机信息[phone_info],如果没有发过就通过手机号发送手机信息

也就是通过SMS发送手机基本信息到接收短信的手机号上

发送之前还会把一部分关键词改个写法,估计是bypass基站检测吧,但是换句话说,基站检测有这么弱的吗?

发送之后马上调用函数C0002f.m12b

删除刚刚发送的SMS信息


C0008d.m72a

随之调用这个函数启动多线程

这里的C0008d.m75d是发送所有手机短信到接收邮箱,当短信同时包含

这两个东西的时候就不发了?

然后C0008d.m76e是发送通讯录联系人到接收邮箱,当联系人包含

这两个任意之一的时候也不发了?

有张三没李四,有悟空没八戒。。。。。。。。。我的思维是跟不上的


在MainActivity的最后是

貌似就跟他写的一样就是询问提高这个程序的权限吧

然后会在如下图所示的函数回调得到的结果,并且发送结果


调用m445b创建启动服务

应该是启动服务吧,写的bootservice

启动的服务会监听短信接收动作,并且在自己启动的时候启动第二个服务SecondService

看事件函数onDestroy里有启动自己的操作,估计就是不让这么轻易的关闭这个服务,而且在SecondService里面也能看出这个第二个服务是个deamon,专门保护第一个服务的


在第一个启动的服务里会调用两个函数,m321am322b

也就是这两个函数注册了监听短信的操作

到此为止应该就是差不多分析完了,这里面还有邮箱账号密码,有兴趣自己

诈骗信息公示

  • 手机号:16532498033

  • 邮箱:16532498033@163.com

估计都是小号,不过也公开一下吧

香蕉网络汇聚网络最前沿的新闻,动态,导向 客服Q:346647485
光年人生灯塔__绝对领域_半次元吧 » 【原创】分析中国移动伪基站软件

发表评论

提供最优质的资源集合

立即查看 了解详情