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

时间:2022-06-20
本文章向大家介绍一个安卓样本的逆向分析过程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

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

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

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

详细分析

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

adb install 目标文件

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

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

载入 jadx,查看目录树

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

发现了一些有趣的 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 函数

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

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

换用 jeb 之后

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

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

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

转到 recev3 类中的 onReceive 方法

主要操纵本地数据库中的数据将其拷贝到 SD 卡中,做一个备份

转到 recev2 类中的 onReceive 方法,还是连接远程 SqlServer 服务器

主要提供了本地文件上传和文件下载的功能

通过 VT 上面的关联图可知

疑似下载了一个 png 文件,该 png 文件解密之后很有可能是一个 jar 模块,用于后续的攻击。

最后转到 recev 类中的 onReceive 方法,一旦接收到上述的三种广播就会执行该函数

重新更新一下远程和本地的数据库

小结

通过在正常的软件中注册广播,并设置时钟来实现恶意代码的执行,在 onReceive 广播回调函数中使用强力混淆,干扰分析人员,并结合远程 Sqlserver 数据库操作实现敏感数据不落地即可实现有效的免杀。