哈克k1
发布于 IP属地北京

通过注入 Smali 小工具进行 Android 恶意软件动态分析技术

原文链接:https://blogs.jpcert.or.jp/en/2024/08/smaligadget.html

在动态分析 Android 恶意软件时,与 Windows 恶意软件不同,目前很难使用调试器跟踪其代码。尽管有一种技术[1]可以通过 Frida [2]动态挂钩方法,但获取该方法的进行状态仍然很困难,而且由于 Frida 不是专用于 Android 的工具,因此只能获取有限的信息。在本文中,我介绍了 smali 小工具注入技术,这是一种更灵活的 Android 恶意软件动态分析方法。该方法通过在 APK 文件中创建和注入用于分析的小工具来创建重新打包的 APK 文件,从而实现动态分析。

确认反编译结果
首先,检查Android恶意软件的代码,以确定要对其哪一部分进行动态分析。使用反编译工具(例如JADX或JEB Pro)可以将APK文件的反编译结果视为Java代码。图1显示了反编译结果的示例。在这种技术中,你需要提前知道从反编译结果中解码和解包的方法。在图1的示例中,你可以看到恶意软件在包com.fky.lblabjglab中类a的方法a中接收一个String类型的参数。然后它解密字符串并返回一个String类型的变量。请注意,虽然加密使用了RC4,但没有必要在这种技术中识别加密算法。

图 1:使用 JADX 解密 RC4 字符串的方法的反编译结果

提取 smali 文件并注入 gadget
一旦确定要分析哪个部分,接下来就可以提取 Android 恶意软件。可以使用 Apktool [3]提取 APK 文件。通过执行以下命令,将提取指定的 APK 文件(如图 2 所示),并且可以编辑用于注入小工具的 smali 文件。可以通过参考 JADX 或其他工具获得的反编译结果来找到 smali 文件。在此示例中,我们假设小工具将被注入 smali /com/fky/lblabjglab/a.smali中,该文件正在调用 RC4 解密函数。

$ apktool d mal.apk


图2:解压后的APK文件的目录结构

这里以文本编辑器打开smali/com/fky/lblabjglab/a.smali文件为例,如图 3 所示,注入一个输出参数并返回值到调试日志的小工具。需要指定要显示的变量。在方法中,p0 是此指针,p1 是第一个参数。因此,如果要检查第一个参数的值,则指定p1 ,并在android.util.Log.e中输出字符串 log 。

图 3:注入小工具进行分析的示例

组装并签名 smali 文件
注入待分析小工具后,组装 smali 文件并创建 APK 文件。之后,创建证书文件并签名 APK 文件。您可以通过执行以下命令来创建注入待分析小工具的 APK 文件。

$ apktool b mal
$ keytool -genkey -v -keystore test.store -alias example -keyalg RSA -validity 32767
$ apksigner sign --ks test.store -v --v2-signing-enabled true --ks-key-alias example mal.apk
执行重新打包的APK文件
最后,可以进行动态分析。使用 Android Studio [4]或其他应用程序启动 Android 虚拟设备(如图 4 所示),并在其上安装重新打包的 APK 文件。请注意,在运行 Android 恶意软件之前,必须断开虚拟设备环境与互联网的连接。


图 4:在 Android Studio 的模拟器上安装 APK 文件

安装 APK 文件后,在虚拟设备上启动该应用程序。然后,如图 5 所示,通过引用 Logcat 选项卡并设置适当的过滤器,您可以查看解密前后的字符串。此技术可用于执行各种类型的分析,例如引用或更改变量的内容或在方法中间调用另一个方法。


图5:解密字符串输出结果

结束语
该技术可以实现灵活的动态分析,而这在 Android 恶意软件中很难实现,尽管它需要提前做一些准备,例如检查反编译结果和准备合适的 smali 小工具。用于测试此技术的 Android 恶意软件在附录中列出。

参考

[1] Frida
https://frida.re/

[2] How-to Guide: Defeating an Android Packer with FRIDA
https://www.fortinet.com/blog/threat-research/defeating-an-android-packer-with-frida

[3] Apktool
https://apktool.org/

[4] Android Studio
https://developer.android.com/studio

附录:Android 恶意软件使用的哈希值
Cerberus:1249c4d3a4b499dc8a9a2b3591614966145daac808d440e5202335d9a4226ff8

浏览 (46)
点赞
收藏
打赏
评论