基于dexdump+Objection+Frida的Android动态密文分析实战
字数 1516 2025-09-23 19:27:38

基于 dexdump + Objection + Frida 的 Android 动态密文分析实战

1. 背景与工具概述

在 Android 应用安全分析中,常会遇到动态加载或运行时解密代码的情况(类似 Windows 平台的 SMC 技术)。静态分析难以处理这类问题,需要动态分析手段。本实战通过具体案例演示如何组合使用以下工具进行动态密文分析:

  • frida-dexdump: 用于内存 DEX 脱壳
  • Objection: 基于 Frida 的动态分析工具,提供内存操作、类方法调用等功能
  • Frida: 动态插桩框架,支持自定义 JavaScript 脚本
  • CyberChef: 网络版编解码与加密工具
  • Python: 辅助脚本编写

注意:案例中应用使用了魔改 RC4 和 AES 加密算法。


2. 工具安装与配置

2.1 安装 Frida 及相关工具

pip install frida-tools objection

2.2 安装 frida-dexdump

pip install frida-dexdump

2.3 准备 CyberChef

访问 https://gchq.github.io/CyberChef/ 即可使用。


3. 实战步骤

3.1 脱壳:使用 frida-dexdump 提取 DEX 文件

  1. 确保 Android 设备(或模拟器)开启 USB 调试,并安装目标应用。
  2. 运行以下命令进行脱壳:
frida-dexdump -U -f com.example.targetapp
  1. 脱壳完成后,当前目录会生成多个 .dex 文件。

3.2 静态分析遇到问题及解决

  • 问题:将脱壳后的 DEX 文件导入 IDA 时出现报错。
  • 解决:在 IDA 加载过程中选择 “No”(不进行校验),即可正常加载分析。

3.3 动态分析获取密文

分析发现密文在运行时动态解密,因此需通过动态方式提取。

方法一:使用 Objection 直接查看内存

  1. 注入 Objection 到目标进程:
objection -g com.example.targetapp explore
  1. 在 Objection shell 中搜索或遍历内存中的字符串:
android hooking list classes
android hooking search methods "decrypt"
memory list strings

方法二:使用 Frida 脚本主动调用解密方法

若已知解密函数,可编写 Frida 脚本直接调用:

Java.perform(function () {
    var targetClass = Java.use("com.example.targetapp.CryptoUtils");
    var decryptedData = targetClass.decryptMethod("encrypted_data_here");
    console.log("Decrypted: " + decryptedData);
});

执行脚本:

frida -U -f com.example.targetapp -l decrypt_script.js

获取到的密文

本例中密文为:
MD97pPa8Dd3cAlJSdCHkPTwmtVL64przZk3HFpU5JaiVrD6dMEhq3BKLXuk6iT4F

3.4 解密步骤

第一步:AES 解密

使用 CyberChef 进行 AES 解密:

  • 输入密文
  • 选择 AES Decrypt
  • 设置参数(如模式、密钥、IV等,需根据静态分析结果确定)

第二步:魔改 RC4 解密

由于算法被魔改,需调用应用内的解密函数或自行实现算法:

  • 方案一:通过 Frida 调用内置 RC4 解密函数
  • 方案二:根据逆向出的算法逻辑用 Python 实现解密
def custom_rc4_decrypt(ciphertext, key):
    # 实现魔改RC4逻辑
    pass

4. 获取 Flag

经过 AES 解密和魔改 RC4 解密后,最终得到 Flag。


5. 关键点总结

  1. 脱壳是基础:使用 frida-dexdump 可有效处理加固应用的脱壳。
  2. 动静结合:静态分析发现算法逻辑,动态分析提取运行时数据。
  3. Objection 实用命令
    • android hooking list classes
    • android hooking search methods
    • memory list strings
  4. Frida 脚本调用:主动调用解密函数可快速获取解密结果。
  5. 算法魔改处理:需结合逆向结果自定义解密逻辑或调用原方法。

6. 参考文献与扩展

通过本实战,你可掌握处理 Android 动态密文的基本流程与关键技巧。

基于 dexdump + Objection + Frida 的 Android 动态密文分析实战 1. 背景与工具概述 在 Android 应用安全分析中,常会遇到动态加载或运行时解密代码的情况(类似 Windows 平台的 SMC 技术)。静态分析难以处理这类问题,需要动态分析手段。本实战通过具体案例演示如何组合使用以下工具进行动态密文分析: frida-dexdump : 用于内存 DEX 脱壳 Objection : 基于 Frida 的动态分析工具,提供内存操作、类方法调用等功能 Frida : 动态插桩框架,支持自定义 JavaScript 脚本 CyberChef : 网络版编解码与加密工具 Python : 辅助脚本编写 注意:案例中应用使用了魔改 RC4 和 AES 加密算法。 2. 工具安装与配置 2.1 安装 Frida 及相关工具 2.2 安装 frida-dexdump 2.3 准备 CyberChef 访问 https://gchq.github.io/CyberChef/ 即可使用。 3. 实战步骤 3.1 脱壳:使用 frida-dexdump 提取 DEX 文件 确保 Android 设备(或模拟器)开启 USB 调试,并安装目标应用。 运行以下命令进行脱壳: 脱壳完成后,当前目录会生成多个 .dex 文件。 3.2 静态分析遇到问题及解决 问题:将脱壳后的 DEX 文件导入 IDA 时出现报错。 解决:在 IDA 加载过程中选择 “No” (不进行校验),即可正常加载分析。 3.3 动态分析获取密文 分析发现密文在运行时动态解密,因此需通过动态方式提取。 方法一:使用 Objection 直接查看内存 注入 Objection 到目标进程: 在 Objection shell 中搜索或遍历内存中的字符串: 方法二:使用 Frida 脚本主动调用解密方法 若已知解密函数,可编写 Frida 脚本直接调用: 执行脚本: 获取到的密文 本例中密文为: MD97pPa8Dd3cAlJSdCHkPTwmtVL64przZk3HFpU5JaiVrD6dMEhq3BKLXuk6iT4F 3.4 解密步骤 第一步:AES 解密 使用 CyberChef 进行 AES 解密: 输入密文 选择 AES Decrypt 设置参数(如模式、密钥、IV等,需根据静态分析结果确定) 第二步:魔改 RC4 解密 由于算法被魔改,需调用应用内的解密函数或自行实现算法: 方案一:通过 Frida 调用内置 RC4 解密函数 方案二:根据逆向出的算法逻辑用 Python 实现解密 4. 获取 Flag 经过 AES 解密和魔改 RC4 解密后,最终得到 Flag。 5. 关键点总结 脱壳是基础 :使用 frida-dexdump 可有效处理加固应用的脱壳。 动静结合 :静态分析发现算法逻辑,动态分析提取运行时数据。 Objection 实用命令 : android hooking list classes android hooking search methods memory list strings Frida 脚本调用 :主动调用解密函数可快速获取解密结果。 算法魔改处理 :需结合逆向结果自定义解密逻辑或调用原方法。 6. 参考文献与扩展 frida-dexdump 官方文档 Objection GitHub Frida JavaScript API CyberChef 官方页面 通过本实战,你可掌握处理 Android 动态密文的基本流程与关键技巧。