转载请注明出处

____________________________________________________________________________________________________

首先给各位无良媒体记者跪了,七夕那天刚从公司拿到样本的时候还以为是主管随便到网上扒了个木马demo给我练手,第二天看新闻才知道这小玩具已经搞得满城风雨,媒体竟然称它为“超级手机病毒”(-_-#)不得不感叹混安全圈想装逼简直太容易了。在此强烈谴责这种夸张报道,不仅向公众传递错误信息,也会影响孩子的价值观。今天跟团队里的小伙伴讨论了一下,有人说这个apk没有任何研究价值,虽然技术是非常拙劣,但是其利用短信不会审核恶意链接的性质传播的方式倒是令人眼前一亮。下面就来瞧瞧这个“XX神器”的真面目。

从恶意链接上下载到“XXshenqi.apk”,考虑到是恶意应用,先不急着安装,反编译一下看看这到底是个什么玩意。

直接拖进APKIDE,查看AndroidManifest.xml:

乍一看,似乎除了声明了发送短信和读取联系人的权限比较可疑,没其他什么特点。组件部分也只有Activity,没有Service,没有BroadcastReceiver,并不具备木马特征。观察到主Activity是WelcomeActivity,那就先进这个Activity看看在搞什么名堂。

这个木马并没有做代码混淆,直接反编译WelcomeActivity就能看到Java源代码,首先看到的东西很令人惊讶:

不需要仔细看就知道是在群发短信,但是真正让人惊讶的是这段代码里居然藏了一个手机号(っ °Д °;)っ把自己的ID藏在病毒里的事情已经见怪不怪了,这种赤裸裸暴露自己手机号的还是第一次见(;¬_¬)别急,下面还有更卧槽的。(为了保护作者隐私,已将作者手机号打码,虽然各位可以自己在代码里直接看到,但是公然发布出来实在不好)

这一句话就是木马传播的核心,获取通讯录并向联系人发送包含该木马下载链接的短信。通常在QQ或者邮件里发送恶意链接的话都会被检查,而现在的短信却不具备检查内容的安全机制,这是该木马最大的亮点。

WelcomeActivity开启群发短信的进程后,继续启动MainActivity,在MainActivity里找到三个if语句:

不难看出,这就是登陆按钮的事件处理,三个if语句以各种理由拒绝用户登陆,这样做的原因就只有一个,这个所谓的登录窗口是假的,这个“XX神器”根本没有任何功能,当然没办法让人登陆了。

那MainActivty的主要目的是干什么呢?找到retrieveApkFromAssets方法:

可以看到,该方法从assets文件夹里释放了一个文件。那就赶紧到assets文件夹下找到这个文件吧ヽ(`Д´)ノ

居然声称自己的包名前缀是com.android (;¬_¬)

补充一下,有同学问“XX神器”是怎么在用户不知情的情况下安装到手机的,答案是:没有静默安装(っ °Д °;)っ。

不仅没有静默安装,也没有隐去权限,在安装界面上就可以看到木马申明的所有安卓权限(っ °Д °;)っ

反编译这个apk,打开AndroidManifest.xml,看看到底在搞什么名堂:

看到这些基本上什么都懂了,“XXshenqi.apk”其实是个外壳,其真正目的是释放隐藏在assets文件夹下的com.android.Trogoogle.apk,这才是木马本体。

查看smali目录,发现有如下几个包:

简略看了看源码,其他几个包跟com包杂乱无章的代码风格不一样,应该是作者找的开源包,只有com包才是木马功能真正的实现部分,所以只需要把精力放在这个包上就可以了。

查看com包的源码,首先注意到的是BroadcastAutoBoot,这是个接收开机事件的BroadcastReceiver:

可以看到收到开机事件后,启动了ListenMessageService,这是木马常用的开机自启方式。

跟进ListenMessageService看看,注意到以下两个方法:

private String ReadAllMessage(Context paramContext):

private void ReadCONTACTS(Context paramContext, String paramString)

在ReadAllMessage中找到下面这一行:

在ReadCONTACTS中找到下面一行:

不难判断出ReadAllMessage的目的是读取所有短信,ReadCONTACTS则是读取通话记录。

继续往下看,跟踪onStart(),看看服务启动后做了哪些事情,注意下面这一行是关键:

ListenMessageService.this.getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new ListenMessageService.SmsObserver(ListenMessageService.this, new ListenMessageService.SmsHandler(ListenMessageService.this, ListenMessageService.this)));

ListenMessageService启动后注册了一个ContentObserver监视短信数据库,处理Handler为ListenMessageService.SmsHandler,继续跟进实现处理Uri改变的onChange()方法,发现下面关键行:

木马通过监视短信收件箱,当手机收到短信时将其截获,并且发送到181****7397这个号码。

继续看:

木马特别留意了186****9904这个号码的短信,将其视为命令消息,继续往下找到处理逻辑:

该短信共有5个操作命令:

readmessage:发送邮件命令,启动MySendEmailService,将收件箱和发件箱的短信以邮件形式发送

sendmessage:发送短信命令,能控制该手机发送任意短信到任意号码

test:测试命令,将“【数据库截获】TEST数据截获(广播失效)”以短信发送至186****9904

makemessage:伪造任意地址、任意内容的短信

sendlink:读取联系人信息,以邮件方式发送

在此明晰了该木马的大体架构,该木马利用指定号码发送短信,控制肉鸡将隐私信息以邮件形式发送到自己的邮箱。

一个有趣的细节是,木马作者将自己的QQ邮箱和密码全部暴露在了代码里(;¬_¬),拿到密码后,兴冲冲地去登陆这个邮箱,却发现密码已经被改了,估计是被前辈们抢先了吧。

有关这个木马的关键点就讲到这儿,有兴趣的朋友可以自己找样本分析(样本就不要找我要了,肯定不能随便发的),代码没做混淆,肉眼就能看懂。虽然木马使用的技术很小儿科,但是能其利用短信广泛传播的特点令人深思,余弦前辈说:很多时候,工程化能力远比单点技术研究重要多了。

———————————————————————————————————————————————————————————————————————————————

这个七夕过得实在是很悲剧,不仅找不到妹子过,还被叫去给人家中招的情侣分析木马,到底要不要人活了(/TДT)/

七夕蠕虫“XX神器”逆向分析的更多相关文章

  1. Android动态逆向分析工具ZjDroid--脱壳神器

    项目地址:https://github.com/BaiduSecurityLabs/ZjDroid 前提条件: 1.Root手机一部 2.须要通过Xposed installer( http://dl ...

  2. 20145307陈俊达_安卓逆向分析_APKtools分析smail

    20145307陈俊达_安卓逆向分析_APKtools分析smail 引言 真刺激呢!到了第二篇博客了,难度开始加大,之前是简单的dex2jar和有图形界面的jd-gui,现在来隆重介绍强大的反汇编工 ...

  3. 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序

    0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...

  4. 一个PE文件的逆向分析

    一个PE文件的逆向分析 idf-ctf上有个题,是PE文件的逆向,反正对我来说做出来就是有意思的题,做不出来就没劲.言归正传,下面看一下吧 大家想玩可以去这个地方去拿题http://pan.baidu ...

  5. Android无需权限显示悬浮窗, 兼谈逆向分析app

    前言 最近UC浏览器中文版出了一个快速搜索的功能, 在使用其他app的时候, 如果复制了一些内容, 屏幕顶部会弹一个窗口, 提示一些操作, 点击后跳转到UC, 显示这个悬浮窗不需要申请android. ...

  6. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  7. 技术分享:逆向分析ATM分离器

    文章内容仅供技术交流,请勿模仿操作! 背景(作者) 每一次外出时, Elizabeth和我总是格外的小心,同时把我们身上的钱藏在特殊的皮带上面,这样还不够,我们还采取了“狡兔三窟”的方式来藏身上带的银 ...

  8. C++反汇编与逆向分析技术揭秘

    C++反汇编-继承和多重继承   学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...

  9. TI(德州仪器) TMS320C674x逆向分析之一

    一.声明 作者并不懂嵌入式开发,整个逆向流程都是根据自身逆向经验,一步一步摸索出来,有什么错误请批评指正,或者有更好的方法请不吝赐教.个人写作水平有限,文中会尽量把过程写清楚,有问题或是写的不清楚的地 ...

随机推荐

  1. 虚拟机的NAT模式连接centos7配置静态IP连接外网

    小小的配置,各种五花八门的介绍. 1.打开VMWare->编辑->虚拟网络编辑器->点击更改设置 2.选中VMnet8->取消使用本地DHCP服务将IP地址分配给虚拟机-> ...

  2. jQuery获取Select选择的Text和Value[转载]

    语法解释:1. $("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发2. var ch ...

  3. Linux MySQL 5.1源码安装

    安装必备的软件 yum install ncurses-devel -y yum install pcre pcre-devel -y yum install gcc* -y   解压缩 tar -z ...

  4. Fluent经典问题答疑

    原文链接1 原文链接28 什么叫边界条件?有何物理意义?它与初始条件有什么关系? 边界条件与初始条件是控制方程有确定解的前提. 边界条件是在求解区域的边界上所求解的变量或其导数随时间和地点的变化规律. ...

  5. C# 操作符与表达式

    C#保留了C++所有的操作符,其中指针操作符(*和->)与引用操作符(&)需要有unsafe的上下文.C#摈弃了范围辨析操作符(::),一律改为单点操作符(.).我们不再阐述那些保留的C ...

  6. Linux 中将用户添加到指定组的指令

    将一个已有用户 testuser 增加到一个已有用户组 root 中,使此用户组成为该用户的附加用户组,可以使用带 -a 参数的 usermod  指令.-a 代表 append, 也就是将用户添加到 ...

  7. Vue 前端md5加密

    用户注册时将加密后的密码发送给后端存储 当登陆的时候,再将加密后的密码和数据库中加密的密码相匹配. npm: https://www.npmjs.com/package/crypto-browseri ...

  8. WebStrome react-native代码智能提示

    1.clone到本地 git clone https://github.com/virtoolswebplayer/ReactNative-LiveTemplate  2,添加ReactNative. ...

  9. SAP 文本框实例

    SAP 文本框 简单实例 REPORT ZTEST001. DATA: OK_CODE LIKE SY-UCOMM, SAVE_OK LIKE SY-UCOMM. DATA: REF_EDIT_CTN ...

  10. java高并发之CountDownLatch,CyclicBarrier和join

    晚上打车回家,在车上看到一篇文章<22岁大学生获谷歌天价Offer,年薪千万!>,讲的是印度一个22岁大学生多次参加ACM大赛,开源多个项目,以非常牛逼的履历通过了谷歌的AI测试,斩获谷歌 ...