当前位置: 首页 > news >正文

Frida-dexdump 使用指南:从内存中脱取安卓 Dex 文件

我们来详细讲解一下 frida-dexdump 的用法。这是一款非常强大的、基于 Frida 的脱壳工具,常用于安卓应用的安全分析和逆向工程。

一、工具简介

frida-dexdump 是一个命令行工具,它利用 Frida 的注入能力,将目标安卓应用中正在内存里运行的 Dex 文件转储(Dump)出来。这对于分析经过加壳保护的 App 特别有效,因为很多加固技术会动态加载解密后的 Dex 到内存中,而 frida-dexdump 可以直接从内存中获取这些原始数据。

核心原理:附加到目标进程 -> 遍历内存 -> 识别 Dex 文件特征(如魔数 dex\n035\0)-> 将找到的内存块导出为 .dex 文件。

二、安装

安装非常简单,使用 Python 的包管理工具 pip 即可:

pip install frida-dexdump

前提条件:

  1. 已安装 frida-tools(通常安装 frida-dexdump 时会自动安装)。
  2. 电脑上已配置好 Android ADB 工具,并能与手机正常连接 (adb devices)。
  3. 手机上运行着对应架构的 frida-server(例如:adb push frida-server /data/local/tmp/ && adb shell “chmod 755 /data/local/tmp/frida-server && /data/local/tmp/frida-server &”)。

三、基本用法

  1. 常用命令

最常见的用法是直接运行命令,它会列出所有正在运行的进程。

frida-dexdump

但这通常不是我们想要的,我们需要指定目标应用。

  1. 脱取指定应用的 Dex

使用 -U(连接到USB设备)和 -n(通过应用名称匹配)参数是最常用的方式。

语法:

frida-dexdump -U -n <包名>

示例:脱壳名为“某App”的应用,其包名为 com.example.app。

frida-dexdump -U -n com.example.app

执行后,工具会开始工作,并在当前终端目录下生成一个以 包名_时间戳 命名的文件夹(如 com.example.app_20230810_152321),里面存放着所有 dump 出来的 .dex 文件。

  1. 脱取前台应用

如果你不想手动输入包名,可以使用 -F 参数来直接针对当前前台应用进行操作,非常方便。

frida-dexdump -U -F
  1. 其他常用参数

参数 全称 说明
-U --usb 连接到 USB 设备(必须)
-n --name 通过进程名匹配(包名)
-F --front 匹配最前台的应用程序
-p --pid 通过进程 PID 附加
-f --file spawn 一个新的进程并附加(用于脱壳应用启动时的初始 Dex)
-d --debug 启用调试模式,输出更详细的信息
-h --help 显示帮助信息

重要参数 -f 的用法: 有些壳在应用启动初期就完成了加载,常规附加可能错过。这时可以用-f 参数让 Frida 启动应用并同时附加。

frida-dexdump -U -f com.example.app

执行此命令后,应用会被启动,并在启动过程中完成脱壳。注意:使用 -f 时,默认会 spawn 方式启动,可能会被某些反调试机制检测到。

四、实战流程与示例

假设我们要分析一个包名为 com.zhiliaoapp.musically的应用。

  1. 准备工作:
    · 手机通过 USB 连接电脑,打开 USB 调试。
    · 在电脑上执行 adb devices 确认设备已连接。
    · 在手机上运行 frida-server。
  2. 寻找目标:
    · 在手机上启动 TikTok App,使其处于前台。
    · 或者在电脑上执行 adb shell ps | grep musically 来确认进程是否存在及其 PID。
  3. 开始脱壳: 方法 A (通过包名):
    frida-dexdump -U -n com.zhiliaoapp.musically
    
    方法 B (通过前台应用):
    frida-dexdump -U -F
    
    方法 C (通过 PID): 首先查找 PID:adb shell pidof com.zhiliaoapp.musically,假设返回 12345。
    frida-dexdump -U -p 12345
    
  4. 等待完成: 命令行会输出类似如下信息:
    Found 3 Dex files.
    Dumping to com.zhiliaoapp.musically_20230810_154722
    [########################################] 3/3
    Dumped: classes.dex
    Dumped: classes2.dex
    Dumped: classes3.dex
    
    这表示成功找到了 3 个 Dex 文件并已导出。
  5. 分析结果: 在当前目录下找到生成的文件夹,里面就是脱出来的 Dex 文件。你可以使用以下工具进行分析:
    · jadx-gui:直接打开 .dex 文件查看反编译的 Java 代码。
    · GDA、AKPS:等其他反编译工具。
    · 如果脱出来的 Dex 被壳进行了进一步处理(混淆、压缩、加密),可能还需要其他修复手段才能被正确反编译。

五、常见问题与注意事项

  1. frida-server 未运行或版本不匹配:
    · 错误信息:Failed to enumerate processes: unable to connect to remote frida-server
    · 解决:确保手机上的 frida-server 正在运行,并且其版本与电脑上安装的 frida 和 frida-dexdump 版本一致。使用 frida --version 和手机运行 frida-server --version 检查。
  2. 没找到 Dex 文件 / 脱壳失败:
    · 一些强壳会有反调试、反注入、内存混淆等机制,可能会检测到 Frida 或干扰内存扫描,导致 frida-dexdump 无法正常工作。
    · 解决:尝试使用不同版本的 Frida,或者使用其他抗检测的 Frida 脚本(如 objection 的 android anti-root-disable)。在某些极端情况下,可能需要使用更底层的、定制化的脱壳机。
  3. 脱出来的 Dex 无法反编译:
    · 这说明壳的保护机制生效了。它可能对 Dex 文件进行了加密、混淆或自定义打包,内存中的镜像并非标准格式。frida-dexdump 只是将内存块原样导出。
    · 解决:这属于更深层次的脱壳和修复问题,超出了基础工具的范围,需要手动分析或使用其他高级工具(如 DumpDex,Zjdroid,或者自己写 Frida 脚本定位和修复)。
  4. 权限问题:
    · 确保手机已获得 Root 权限,因为 frida-server 需要以 root 身份运行,并且扫描其他进程的内存也需要高权限。

总之,frida-dexdump 是入门安卓脱壳的首选神器,简单易用且效果显著。但对于越来越强的加固方案,可能需要更深入的技术才能成功脱壳。

http://www.dtcms.com/a/356350.html

相关文章:

  • Go对接全球期货数据源指南:基于StockTV API实现多品种实时监控
  • LeetCode第二题知识点2 ---- 栈、堆、地址
  • 不止 ChatGPT:多模态 AI(文本 + 图像 + 音频)正重构内容创作全流程
  • 数据质检之springboot通过yarn调用spark作业实现数据质量检测
  • 第三章 Vue3 + Three.js 实战:用 OrbitControls 实现相机交互与 3D 立方体展示
  • Unity学习----【数据持久化】二进制存储(一)
  • ExcelJS实现导入转换HTML展示(附源码可直接使用)
  • Excel数组学习笔记
  • 在Excel和WPS表格中隔一行插入多个空白行
  • 网络编程 04:TCP连接,客户端与服务器的区别,实现 TCP 聊天及文件上传,Tomcat 的简单使用
  • 从零开始部署 Kubernetes Dashboard:可视化管理你的集群
  • [Linux]学习笔记系列 -- mm/shrinker.c 内核缓存收缩器(Kernel Cache Shrinker) 响应内存压力的回调机制
  • 创意程序之MP3分割工具
  • sqlachemy
  • AI操作系统语言模型设计 之1 基于意识的Face-Gate-Window的共轭路径的思维-认知-情感嵌套模型
  • 【C语言】深入理解指针(2)
  • 龙迅#LT7621GX适用于两路HDMI2.1/DP1.4A转HDMI2.1混切应用,分辨率高达8K60HZ!
  • 第二阶段WinForm-11:自定义控件
  • 嵌入式Linux驱动开发:i.MX6ULL中断处理
  • 深入解析Qt节点编辑器框架:交互逻辑与样式系统(二)
  • C++基础(⑤删除链表中的重复节点(链表 + 遍历))
  • 储能变流器之LLC
  • MySQL数据库精研之旅第十四期:索引的 “潜规则”(上)
  • Unity、Unreal Engine与Godot中纹理元数据管理的比较分析
  • 嵌入式Linux LED驱动开发
  • Ubuntu22.04系统安装Opencv,无法定位包libjasper-dev libdc1394-22-dev的解决办法
  • 【C++】C++入门——(上)
  • GTSAM中gtsam::LinearContainerFactor因子详解
  • 【C++八股文】计算机网络篇
  • 【YOLO学习笔记】数据增强mosaic、Mixup、透视放射变换