wevve/android-sms-hijacking-malware-analysis

GitHub: wevve/android-sms-hijacking-malware-analysis

一项针对多阶段 Android SMS 劫持木马的防御性逆向工程分析,解析其加载链与 OTP 拦截行为并提供检测指标。

Stars: 0 | Forks: 0

# Android SMS 劫持木马的防御分析 ## 概述 本仓库记录了对 2026 年 7 月观察到的一款 Android SMS 劫持恶意软件样本的防御性逆向工程分析。 该样本采用多阶段加载架构,涉及 native 层解包、加密的 DEX payload、动态组件激活、环境检查以及 DNS-over-HTTPS (DoH) 通信。其最终 payload 会尝试成为默认的 SMS 应用程序,并监控接收到的 SMS 消息,尤其侧重于拦截一次性密码 (OTP)。 此项研究仅用于恶意软件检测、威胁情报、事件响应和安全教育。 ## 联系方式 - Email: wevve2696@gmail.com 如有需要,我可以验证本仓库的所有权,并根据要求提供额外的支持信息。 ## 样本信息 | 字段 | 值 | |---|---| | 平台 | Android | | 文件类型 | APK | | 分析日期 | 2026 年 7 月 | | SHA-256 | `REPLACE_WITH_VERIFIED_SHA256` | | 样本分发 | 本仓库不分发恶意软件二进制文件 | SHA-256 值必须根据本研究期间检查的确切 APK 计算得出。不得从无关的公开报告中复制,也不得替换为未经验证的值。 ## 仓库内容 ``` . ├── README.md ├── evidence/ │ └── README.md └── iocs/ └── indicators.csv ``` `evidence` 目录用于存放支持本文档分析结果的已脱敏截图。`iocs` 目录包含用于经验证的防御性指标的结构化模板。 ## 研究范围 本分析重点在于: - Android 应用程序清单和权限分析 - 多阶段加载器行为 - Native 库和 JNI 分析 - 自定义解包和解密例程 - 内存中的 DEX 加载 - 环境和反分析检查 - 动态 APK 检索和安装 - DNS-over-HTTPS 配置检索 - 默认 SMS 应用程序劫持 - SMS 和 OTP 拦截行为 - 入侵指标 - 防御性检测机会 ## 分析环境 该样本是在一个孤立的恶意软件分析环境中进行检查的。通过使用静态分析和受控的模拟,重构了其执行流程,且未将第三方系统暴露于恶意活动之中。 分析工作流程包括: - 检查 Android 清单和应用程序组件 - 使用 JADX 反编译 DEX 文件 - 审查 native 库和 JNI 注册 - 使用 Unidbg 模拟选定的 native 函数 - 恢复加密的 DEX payload - 重构多阶段加载过程 - 审查权限和与 SMS 相关的行为 - 检查配置和网络解析逻辑 在此研究期间,未访问或测试任何第三方生产系统。 ## 执行链 观察到的执行过程可总结如下: 1. 初始应用程序启动并执行环境检查。 2. 从应用程序的 assets 目录中读取加密资源。 3. 一个 native JNI 例程将嵌入的资源合并并解密。 4. 解密后的数据被解压缩以恢复 DEX payload。 5. 恢复的 DEX 被返回到 Java 层并加载。 6. 加载器检索或重构另一个 Android payload。 7. 第二个 native 组件解密最终的 DEX payload。 8. 最终 payload 请求敏感的 SMS 和电话权限。 9. 恶意软件尝试成为设备的默认 SMS 应用程序。 10. 监控接收到的 SMS 消息和 OTP 内容。 ## 第一阶段:Native 解包 第一阶段的解包例程由 `libpmdkzpc.so` 中的 `nativeUnpack` 函数实现。 该例程读取以下嵌入的资产文件: ``` hlqudr/tfuvugxs.cache hlqudr/cphxetqa.tmp hlqudr/yccfliek.bin ``` 这些文件被串联到一个连续的内存缓冲区中。然后,该例程应用重复密钥 XOR 转换,并使用 zlib 解压缩来恢复原始的 DEX 内容。如果初始输出缓冲区太小,该例程会扩展缓冲区并重试解压缩操作。 恢复的 DEX 数据作为字节数组返回给 Java 层。将此逻辑移至 native 代码中,可以将 payload 隐藏起来,使其免受基础的 Java 层检查,并限制了简单静态扫描工具的有效性。 ## Native 函数模拟 通过受控的 native 模拟对解包例程进行了检查。分析环境重现了 JNI 函数所需的 Android 资产加载接口,包括相关的 `AssetManager` 行为。 在提供了所需的 native 接口后,该函数成功生成了可以使用 JADX 打开和检查的 DEX 文件。 这种方法使得我们能够在不于真实用户设备上执行完整恶意软件链的情况下,研究 payload 恢复过程。 ## 第二阶段:动态 Payload 加载 恢复的加载器包含与动态 APK 检索和安装相关的逻辑。 应用程序的启动 activity 与 `com.supuyami.xajijupuqi` 包相关联。其异步执行流程通过一个混淆的协程状态机到达 payload 下载逻辑。 与下一阶段 payload 相关的 native 方法在 `libqbflddv.so` 中被动态注册。对应的函数被识别为 `m_ziutteqo`。通过对此方法的受控模拟,恢复出了另一个 Android 包以供进一步分析。 使用动态注册的 native 方法和多个 APK 阶段增加了自动化分析的难度,因为最终 payload 在原始应用程序包内并非直接可见。 ## 第三阶段:最终 DEX 恢复 下一阶段的包再次使用 native 代码来保护其可执行内容。 应用程序从重写的 `Application.attachBaseContext()` 方法执行初始化。位于 `libldcaeux.so` 中名为 `fllzsswi` 的 native 函数返回了解密后的最终 DEX 字节流。 恢复的 DEX 实现了主要的恶意功能。这种对 native 解密的一再使用表明,该样本的结构旨在故意推迟暴露其最终行为。 ## 环境检查 该样本执行检查,旨在确定其是否在合适的环境中运行。 如果检查失败,应用程序将不会继续进入其主要恶意工作流。相反,它可以显示持久的加载界面并限制正常导航。这造成了一种应用程序仍在启动中的假象,同时避免了在分析环境中暴露恶意行为。 当可疑应用程序在自动化沙箱执行期间显得处于非活动状态时,防御者应考虑这种行为。 ## DNS-over-HTTPS 通信 恶意软件将 DNS-over-HTTPS 用作其配置检索过程的一部分。 DoH 通信可能允许样本: - 避免常规的 DNS 监控 - 将域名解析活动隐藏在 HTTPS 流量中 - 检索更新的配置数据 - 无需修改初始 APK 即可更改基础设施 - 降低在仅检查传统 DNS 流量的网络中的可见性 在调查可疑的 DoH 活动时,防御者应关联应用程序行为、HTTPS 目标、证书信息和设备遥测数据。 ## SMS 劫持行为 最终 payload 请求与 SMS 消息和电话功能相关的权限。其行为表明它试图成为设备的默认 SMS 应用程序并监控接收到的消息。 可能的目标是获取敏感的 SMS 内容,包括: - 账户验证码 - 密码重置码 - 金融交易确认 - 双因素身份验证码 - 其他一次性密码 多阶段加载、敏感权限、动态组件激活和 SMS 监控的结合,符合 Android SMS 劫持威胁的特征。 ## 关键发现 1. 恶意软件使用多个加载阶段来隐藏其最终 payload。 2. Native 代码解密并解包嵌入的 DEX 内容。 3. 初始加载器在解压缩前合并加密的资产片段。 4. 额外的 payload 被动态检索或重构。 5. 多个 native 库保护不同的执行阶段。 6. 环境检查决定是否激活恶意行为。 7. DNS-over-HTTPS 用于配置检索。 8. 最终 payload 请求广泛的 SMS 和电话权限。 9. 恶意软件尝试成为默认的 SMS 应用程序。 10. 其主要目标似乎是 SMS 和 OTP 拦截。 11. 该样本表现出与生成器生成的恶意软件一致的特征。 ## 防御性检测机会 潜在的检测机会包括: - 应用程序在没有合法需求的情况下请求默认 SMS 处理程序状态 - 不受信任的应用程序请求多个 SMS 和电话权限 - Native 库读取并解密碎片化的资产文件 - 应用程序从内存动态加载 DEX 内容 - 意外的 APK 检索或安装行为 - 可疑地使用 DNS-over-HTTPS endpoint - 动态启用的 Android 组件 - 环境检查后出现持久的加载屏幕 - JNI 函数返回解密的可执行内容 - 异常的 SMS 接收器活动 检测决策应基于多个行为指标,而不是单一的权限、字符串或代码模式。 ## 防御应用 这项研究可能会帮助防御者: - 识别相关的 Android 恶意软件样本 - 调查可疑的 Android 应用程序 - 开发静态和行为检测规则 - 提取和组织入侵指标 - 检测意外的默认 SMS 应用程序更改 - 监控异常的 DNS-over-HTTPS 行为 - 调查多阶段 Android payload 传递 - 支持移动端事件响应 - 改进威胁狩猎程序 - 对分析师进行有关 Android 恶意软件加载器的教育 ## 建议的缓解措施 组织和个人可以通过以下方式降低风险: - 仅从受信任的来源安装 Android 应用程序 - 审查请求 SMS 或默认处理程序权限的应用程序 - 监控默认 SMS 应用程序的更改 - 限制从未知来源安装 - 使用移动威胁防御解决方案 - 在法律和技术允许的适当情况下检查可疑的 DoH 流量 - 移除请求不必要 SMS 访问权限的应用程序 - 在确认发生 SMS 拦截后重置受影响的凭证 - 撤销与受感染账户关联的活动会话 - 尽可能使用更强的身份验证方法替换基于 SMS 的身份验证 ## 入侵指标 公开的仓库不分发具有功能的恶意软件二进制文件。当指标可以安全共享并进行验证时,可能会单独添加。 建议的指标类别包括: - APK SHA-256 哈希 - 证书指纹 - 包名 - Native 库名称 - 嵌入的资产路径 - 下载域名 - 下载 URL - IP 地址 - DNS-over-HTTPS endpoint - Android 组件名称 - 相关的行为指标 在公开报告中,应根据需要隐去域名、IP 地址和 URL 的实际值。 脱敏格式示例: ``` example[.]com https[:]//example[.]com/path 192[.]0[.]2[.]1 ``` 只有从分析的样本中得出的经过验证的指标才应添加到 `iocs/indicators.csv` 中。在将仓库作为已完成的研究展示之前,必须删除占位符行。 ## 归因声明 本研究中的任何地理或威胁参与者观察结果都应被视为初步的分析评估。 语言特征、基础设施重叠、代码相似性、编译元数据和配置值本身不足以建立对特定个人、组织或国家的明确归因。 归因评估应使用多个独立来源,并清楚地区分已确认的事实和分析判断。 ## 负责任使用声明 本仓库专门用于合法的防御性网络安全研究。 它不包含: - 具有功能的恶意软件样本 - 恶意软件部署工具 - 僵尸网络管理功能 - 凭证窃取工具 - 数据外泄工具 - 攻击第三方系统的说明 - 旨在绕过授权的方法 - 勒索软件或破坏性 payload 研究人员在分析不属于自己的系统、应用程序、设备或数据之前,必须获得适当的授权。 本仓库中的任何内容均不授权访问、干扰或破坏第三方基础设施。 ## 数据处理 恶意软件样本和潜在敏感的工件应仅存储在适当保护的分析环境中。 公开贡献不得包含: - 属于受害者的个人信息 - 身份验证凭证 - 私有加密密钥 - 活动会话 token - 非公开的客户信息 - 活跃的恶意软件二进制文件 - 可能导致对受感染系统进行未经授权控制的信息 ## 免责声明 本材料仅用于教育、威胁情报和防御安全目的。 本信息的提供不提供任何担保。用户有责任确保其活动符合适用的法律、法规、组织政策和授权要求。 ## 许可证 本仓库中的书面研究采用知识共享署名 4.0 国际许可协议 (CC BY 4.0) 进行授权。 第三方产品名称、商标、屏幕截图和代码摘录仍归其各自所有者所有。
标签:Android安全, DAST, 云资产清单, 威胁情报, 开发者工具, 恶意软件分析, 目录枚举, 移动安全, 逆向工程