记一次Android 恶意软件逆向及Frida动态分析
字数 2380 2025-10-01 14:05:52

Android 恶意软件逆向分析与 Frida 动态分析技术指南

一、背景与目标

本教学文档基于奇安信攻防社区的一次实战分析案例,详细讲解如何对采用 DPT-Shell 保护的 Android 恶意软件进行逆向分析、脱壳、恶意行为解析以及使用 Frida 进行动态分析和绕过检测。通过本指南,您将掌握针对复杂恶意软件的分析方法。


二、逆向分析阶段

2.1 初步分析与问题识别

  • 现象:JADX 反编译后显示的包名与运行时的进程包名不一致。
  • 原因:应用使用了 DPT-Shell 进行加壳保护。

2.2 DPT-Shell 加壳原理分析

DPT-Shell 是一种开源的 Android 应用保护工具,其工作原理如下:

  1. 壳 Dex 与原始 Dex 拼接:将壳 dex 文件与原始应用的 dex/资源压缩包拼接,生成新的 classes.dex
  2. 原始数据存储:原始数据以 ZIP 格式附加在壳 dex 之后,并在文件末尾用 4 字节记录原始数据长度。
  3. 运行时加载:安装后先运行壳逻辑,在运行时解密并加载真实的应用代码。

2.3 脱壳操作

  1. 定位资源文件:分析发现代码中调用:
    ZipUtils.compress(getDexFiles(apkDir), getOutAssetsDir(apkDir).getAbsolutePath() + File.separator + "i111111.zip");
    
  2. 获取真实 Dex
    • android/code_cache 目录中找到 i111111.zip
    • 解压后得到真实的 dex 文件,可用于后续分析。

三、恶意功能分析

3.1 远程控制与信息窃取模块

  • BroadcastReceiver:暴露大量自定义广播指令,包括:
    • 应用管理(安装、卸载、获取列表)
    • 界面控制(弹窗、日志窗口、权限界面)
    • 敏感操作(相机、人脸识别、短信收发、身份证上传、支付页面)
    • 系统控制(后台运行、音量、存储读写)

3.2 短信窃取(SmsServiceRoom)

  • 采用单例模式存储 SmsContent
  • 提供短信拦截、存储与转发功能。

3.3 屏幕录制(ScreenRecordService)

  • 后台持续录屏,用于监控用户操作(如网银交易)。

3.4 数据泄露模块

  • 媒体窃取:统计用户的音频、视频、图片、下载文件和联系人。
  • 联系人窃取:序列化并上传姓名、电话、邮箱等信息,用于横向移动攻击。

3.5 浮窗密码窃取(BcaInputPwdWindow)

  • 继承自 FloatWindow,悬浮显示虚假输入框。
  • 通过 LiveString pwd 实时捕获密码,并通过 commitData() 上传。

3.6 输入监听策略(PhoneStrategy 与 ListenMethod)

  • PhoneStrategy:管理 PIN 或解锁策略,配合浮窗窃取密码。
  • ListenMethod:枚举监听用户操作(如密码输入)。
  • 策略数据存储:部分策略数据存储在 Native Lib(SO 文件)中,需使用 Ghidra 进行逆向分析。

3.7 人脸识别视频录制(FaceRecognition)

  • 通过前置/后置摄像头采集用户面部图像或视频。
  • 用于绕过手机银行的人脸验证。

3.8 恶意利用链路总结

  1. 诱导用户安装恶意应用。
  2. 在用户使用目标应用(如银行 App)时触发恶意模块。
  3. 通过浮窗覆盖、输入监听、录屏、人脸采集等方式窃取敏感信息。
  4. 数据加密后上传至远程服务器。

四、动态分析阶段

4.1 流量拦截与加密问题

  • 使用 BurpSuite 拦截流量,但报文为加密格式。
  • 代码中查找密钥失败,无法直接解密。

4.2 Frida 动态解密尝试

  • 目标:在加密前(发起请求)和解密后(服务器响应)注入代码。
  • 问题:首次尝试时出现 Null 指针异常,原因为 DPT-Shell 内置 Frida 检测。

4.3 Frida 检测与绕过

  • 检测机制:DPT-Shell 通过 pthread 创建新线程运行 Frida 检测代码。
  • 触发崩溃:检测到 Frida-server 后执行 mov lr, #0,导致程序返回时崩溃。
  • 绕过方法:Hook pthread_create 函数,在特定条件下返回错误,阻止检测线程启动。

4.4 动态分析结果

  • 成功拦截明文登录数据,包括用户名、密码、银行卡号、设备 ID 等敏感字段。
  • 发现定期 Ping 操作,用于向攻击者同步设备状态。

五、总结与防护建议

5.1 恶意软件特征

  • 高风险行为:后台位置跟踪、文件上传、数据窃取。
  • 敏感权限:精确位置、联系人、短信、摄像头、麦克风、存储访问。
  • 利用方式:诱导下载、权限滥用、远程控制、数据泄露。

5.2 防护建议

  1. 用户侧
    • 仅从官方渠道下载应用。
    • 严格管理应用权限,禁止不必要的授权。
    • 安装移动安全防护软件。
  2. 开发与安全分析侧
    • 加强对加壳应用的分析能力。
    • 使用 Frida 等工具时注意对抗检测机制。
    • 监控应用网络流量及系统行为。

六、附录:常用工具列表

工具名称 用途
JADX Android 应用反编译
Ghidra SO 文件逆向分析
Frida 动态插桩与行为分析
BurpSuite 网络流量拦截与分析
Android Simulator 运行环境模拟

通过本教学文档,您应该已经掌握了针对复杂 Android 恶意软件的完整分析流程。如有疑问,可进一步查阅相关工具文档或技术社区资料。

Android 恶意软件逆向分析与 Frida 动态分析技术指南 一、背景与目标 本教学文档基于奇安信攻防社区的一次实战分析案例,详细讲解如何对采用 DPT-Shell 保护的 Android 恶意软件进行逆向分析、脱壳、恶意行为解析以及使用 Frida 进行动态分析和绕过检测。通过本指南,您将掌握针对复杂恶意软件的分析方法。 二、逆向分析阶段 2.1 初步分析与问题识别 现象 :JADX 反编译后显示的包名与运行时的进程包名不一致。 原因 :应用使用了 DPT-Shell 进行加壳保护。 2.2 DPT-Shell 加壳原理分析 DPT-Shell 是一种开源的 Android 应用保护工具,其工作原理如下: 壳 Dex 与原始 Dex 拼接 :将壳 dex 文件与原始应用的 dex/资源压缩包拼接,生成新的 classes.dex 。 原始数据存储 :原始数据以 ZIP 格式附加在壳 dex 之后,并在文件末尾用 4 字节记录原始数据长度。 运行时加载 :安装后先运行壳逻辑,在运行时解密并加载真实的应用代码。 2.3 脱壳操作 定位资源文件 :分析发现代码中调用: 获取真实 Dex : 在 android/code_cache 目录中找到 i111111.zip 。 解压后得到真实的 dex 文件,可用于后续分析。 三、恶意功能分析 3.1 远程控制与信息窃取模块 BroadcastReceiver :暴露大量自定义广播指令,包括: 应用管理(安装、卸载、获取列表) 界面控制(弹窗、日志窗口、权限界面) 敏感操作(相机、人脸识别、短信收发、身份证上传、支付页面) 系统控制(后台运行、音量、存储读写) 3.2 短信窃取(SmsServiceRoom) 采用单例模式存储 SmsContent 。 提供短信拦截、存储与转发功能。 3.3 屏幕录制(ScreenRecordService) 后台持续录屏,用于监控用户操作(如网银交易)。 3.4 数据泄露模块 媒体窃取 :统计用户的音频、视频、图片、下载文件和联系人。 联系人窃取 :序列化并上传姓名、电话、邮箱等信息,用于横向移动攻击。 3.5 浮窗密码窃取(BcaInputPwdWindow) 继承自 FloatWindow ,悬浮显示虚假输入框。 通过 LiveString pwd 实时捕获密码,并通过 commitData() 上传。 3.6 输入监听策略(PhoneStrategy 与 ListenMethod) PhoneStrategy :管理 PIN 或解锁策略,配合浮窗窃取密码。 ListenMethod :枚举监听用户操作(如密码输入)。 策略数据存储 :部分策略数据存储在 Native Lib(SO 文件)中,需使用 Ghidra 进行逆向分析。 3.7 人脸识别视频录制(FaceRecognition) 通过前置/后置摄像头采集用户面部图像或视频。 用于绕过手机银行的人脸验证。 3.8 恶意利用链路总结 诱导用户安装恶意应用。 在用户使用目标应用(如银行 App)时触发恶意模块。 通过浮窗覆盖、输入监听、录屏、人脸采集等方式窃取敏感信息。 数据加密后上传至远程服务器。 四、动态分析阶段 4.1 流量拦截与加密问题 使用 BurpSuite 拦截流量,但报文为加密格式。 代码中查找密钥失败,无法直接解密。 4.2 Frida 动态解密尝试 目标:在加密前(发起请求)和解密后(服务器响应)注入代码。 问题 :首次尝试时出现 Null 指针异常,原因为 DPT-Shell 内置 Frida 检测。 4.3 Frida 检测与绕过 检测机制 :DPT-Shell 通过 pthread 创建新线程运行 Frida 检测代码。 触发崩溃 :检测到 Frida-server 后执行 mov lr, #0 ,导致程序返回时崩溃。 绕过方法 :Hook pthread_create 函数,在特定条件下返回错误,阻止检测线程启动。 4.4 动态分析结果 成功拦截明文登录数据,包括用户名、密码、银行卡号、设备 ID 等敏感字段。 发现定期 Ping 操作,用于向攻击者同步设备状态。 五、总结与防护建议 5.1 恶意软件特征 高风险行为:后台位置跟踪、文件上传、数据窃取。 敏感权限:精确位置、联系人、短信、摄像头、麦克风、存储访问。 利用方式:诱导下载、权限滥用、远程控制、数据泄露。 5.2 防护建议 用户侧 : 仅从官方渠道下载应用。 严格管理应用权限,禁止不必要的授权。 安装移动安全防护软件。 开发与安全分析侧 : 加强对加壳应用的分析能力。 使用 Frida 等工具时注意对抗检测机制。 监控应用网络流量及系统行为。 六、附录:常用工具列表 | 工具名称 | 用途 | |-----------------|-----------------------------| | JADX | Android 应用反编译 | | Ghidra | SO 文件逆向分析 | | Frida | 动态插桩与行为分析 | | BurpSuite | 网络流量拦截与分析 | | Android Simulator | 运行环境模拟 | 通过本教学文档,您应该已经掌握了针对复杂 Android 恶意软件的完整分析流程。如有疑问,可进一步查阅相关工具文档或技术社区资料。