一个安卓样本的逆向分析过程

移动安全 2019-11-09

本文作者:x-encounter (信安之路作者团队成员 & 信安之路病毒分析小组组长)

该 APK 样本是通过国外的下载站进行投放的,伪装成正常的软件并在特定情况下启动后门模块获取用户信息,VT 报读情况如下

img

免杀效果还是很不错的,貌似只有 ESET 准确的报出了 Spy 类型。

第一次写 Android 相关的分析文章,如有错误,还请各位大佬指教^o^

详细分析

不管怎么说,先在模拟器中跑一下。我用的是夜神模拟器

adb install 目标文件

img

emmm,可以看到运行之后是一个正常的软件,由于实在看不懂这六亲不认的语言,所以只能从图标中推测,这或许、应该、貌似是一个看视频的 app。接下来进行逆向分析,主要目的是搞明白怎么进行免杀的,通过什么机制触发后门的,触发后门的条件是什么

使用两个集成工具,jeb 和 jadx,我会在分析的过程中比较两款工具孰优孰劣。另外我个人还喜欢 Android killer 这款集成化的软件,打包调试监控一体化,分析应用软件的首选,分析病毒很容易就出错了所以并没有推荐使用。

载入 jadx,查看目录树

img

没有被混淆的痕迹,一共有 8 各包,每个包中包含类和其他包,代码量巨大,而且一个一个包的看不现实,有些 downloader 和通信属于该 app 的正常功能,很难区分出哪些是恶意的,简单尝试无果后,把目光转向了 AndroidManifest.xml 文件,AndroidManifest.xml 包含了 app 的配置信息比如请求的权限、注册的 activity、 注册的服务和注册的 receiver。

img

发现了一些有趣的 receiver,解释一下,Android 中的 receiver 是跟广播机制(BroadcastReceiver)有关的,有系统定义的广播也有用户自定义的广播,类似与 windows 中窗体之间的消息,类比即可理解。有趣的地方在于,receiver 的命名非常随意,而且触发名为 com.Contacts.recev 的自定义广播的条件也很有趣,如果接收到以下三个广播中的一个即可触发:

android.net.conn.CONNECTIVITY_CHANGE 当网络连接变化时会发送该广播

android.intent.action.BOOT_COMPLETED. 当手机开机时会发送该广播

android.intent.action.USER_PRESENT. 当手机解锁时会发送该广播

转到 com.Contacts 类中查看详细代码,先看 MainActivity 中的代码,可以把 MainActivity 理解为 C 程序中的 Main 函数

img

会将在手机上打开 https://www.youtube.com 网站,并且判断 wifi 和手机网络的连通性,并且设置了时钟,定时触发 recev1、recev2、recev3 三条自定义广播。setRepeating 第二个参数含义是第 1 次运行时要等待的时间,也就是说先会运行 recev1 和 recev3 的回调函数。

转到 recev1 类中的 onReceive 方法,onReceive 其实是触发相应广播后的回调函数,由于函数中出现了太多的字符串操作导致了 jadx 反编译失败

img

换用 jeb 之后

img

emmm,不得不说 jeb 也太懒了,直接把字符串操作给忽略了,极度误导分析人员,从 jadx 的 Smali 语法可以看出,执行了 SQL 语句,在数据库中记录了用户的一些数据和状态比如当前时间,网络状态,手机IMEI的值,短信,电话记录,sysinfo,电话号码,SIM 卡的序号,SIM 卡运营商国家,当前的区域,经纬度,获取当前正在运行的应用的名字和状态等等一系列的个人信息,值得一提的是窃取个人信息是用的 Sqlserver 远程数据库,并且还使用了本地 sqlite 数据库保存一些其他信息。

img

在 Smali 中很明显可以看到 r13 是一个拼接的IP地址

img

数据库用户、密码和地址我就懒得算了,服务器肯定已经关了……

转到 recev3 类中的 onReceive 方法

![img](https://ask.qcloudimg.com/http-save/yehe-2822697/lnruz6vgg1.j


本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论