乐于分享
好东西不私藏

安卓逆向环境搭建 (脱壳实战 + 抓包实战)

安卓逆向环境搭建 (脱壳实战 + 抓包实战)

本文以MuMu模拟器为例,完整走通 Frida 动态插桩 + 脱壳 + HTTPS抓包(含证书 pinning 绕过)的全流程。适用于逆向工程、移动安全研究、APP抓包等场景。

1. 环境准备

  • 电脑:Windows 11,安装 Anaconda
  • 模拟器:MuMu模拟器
  • 抓包工具:yakit

2. 基础设置

2.1 为什么要 root

安卓手机之所以会出现 Root 这个概念,本质上和 Android 的系统结构有关。Android 底层其实是建立在 Linux 内核 之上的,而在 Linux 的权限体系里,存在一个拥有最高控制权的用户,叫做 root。这个账户可以读写系统里的任何文件、修改任何配置、控制任何进程。手机厂商在出厂时,为了防止用户误操作或者恶意软件破坏系统,会把这个最高权限锁起来,让普通用户和应用只能在受限制的权限范围内运行。因此,大多数情况下,用户虽然拥有手机,但实际上只能使用系统允许的那一部分功能,而无法直接触碰系统核心。

所谓 Root,就是通过技术手段重新获得这个被厂商锁住的最高权限。当手机被 Root 后,用户就不再只是普通使用者,而是变成了系统管理员,可以直接访问系统分区、修改系统文件,甚至改变系统运行方式。比如,一些手机里预装的应用在正常情况下无法卸载,是因为它们位于系统分区;但在 Root 状态下,这些应用就可以被删除或替换。同样,一些系统级的功能,例如修改系统参数、改变 CPU 调度策略、屏蔽系统级广告、做完整的数据备份等,也往往需要 Root 权限才能实现。

2.2 模拟器环境配置

启用 root 环境,修改磁盘为可写状态,启用 adb 功能 ,安装Magisk

参考 MuMu模拟器《Magisk》(面具)安装教程 ,地址:

https://mumu.163.com/help/20240807/40912_1136675.html

3. 安装配置 Frida

3.1 Frida 简介

Frida 是一款世界级的动态插桩工具,支持 Android/iOS/Windows/macOS 等多平台。主要功能包括运行时注入 JavaScript 脚本 Hook Java/ native 函数,拦截参数、修改返回值、dump 内存等。常用于脱壳、抓包绕过证书 pinning、行为监控、协议分析等。

Frida 由客户端(电脑端 frida/frida-tools)和服务器端(frida-server,运行在设备上)组成,两者版本必须严格一致。

3.2 安装 Frida

  1. 创建独立环境
conda create -n android python=3.10
conda activate android
pip install frida frida-tools

或直接安装

pip install frida frida-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 验证安装
frida --version 
frida-ps --version
  1. 下载适配模拟器架构的 frida-server
# 进到 adb.exe 所在目录
cd D:\Netease\MuMu\nx_device\12.0\shell
adb shell getprop ro.product.cpu.abi 

去 https://github.com/frida/frida/releases 下载对应版本,本环境是:frida-server-17.8.0-android-x86_64.xz

  1. 推送并启动
# 推送至设备
adb push frida-server-17.8.0-android-x86_64 /data/local/tmp/

# 设置权限并运行
adb shell "mv /data/local/tmp/frida-server-17.8.0-android-x86_64 /data/local/tmp/frida-server"
adb shell "chmod 755 /data/local/tmp/frida-server"
adb shell "/data/local/tmp/frida-server &"

# 以 root 权限重新运行
adb root
adb shell "/data/local/tmp/frida-server &"

3.3 测试 Frida

frida-ps -U

可以看到进程列表

简单注入测试脚本 test.js

Java.perform(function({
console.log("注入成功");
});

以 MT管理器为例,注入脚本

frida -U -p <pid> -l test.js

控制台看到输出即环境正常

4. 安装脱壳插件

4.1 脱壳原理与简介

很多APP使用加固(如 Dex 加密、VMP、加壳),启动时在内存中解密还原完整 dex。Frida 可在运行时 Hook ClassLoader 或内存加载点,直接 dump 出明文 dex 文件。frida-dexdump 是社区常用工具,基于 Frida 自动搜索并 dump dex。

4.2 安装 frida-dexdump

pip install frida-dexdump

4.3 脱壳测试

准备目标 APP,查看加固状态

启动目标APP,获取 pid

frida-ps -U | grep 目标包名

执行脱壳

frida-dexdump -U -p <pid>

成功后会在当前目录(用户目录)生成<目标 APP>/ .dex 文件,可用 JADX-GUI 打开查看源码

5. 配置抓包

5.1 为什么要导入证书

大多数APP使用 HTTPS + 证书 pinning(证书固定),即使设置代理也无法解密流量(报 SSL handshake 失败)。解决方案有两种,其一是通过 Hook pinning 逻辑(Frida 脚本方式),其二是将抓包工具的 CA 证书导入系统信任列表。

5.2 导出 yakit 证书

  1. 打开 yakit → MITM 交互劫持
  2. 监听地址改为 0.0.0.0(允许外部连接)
  3. 下载 CA 证书 → 保存为 cacert.pem

5.3 获取证书 Hash 并重命名

使用 openssl 获取 hash

openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -n 1
# 示例输出:10fb1fcc

# 重命名(Windows 用 ren 命令)
mv cacert.pem 10fb1fcc.0     # Linux/macOS
ren cacert.pem 10fb1fcc.0    # Windows

如果没装 git bash 或 WSL,可用 kali 完成

5.4 导入到模拟器系统证书目录

# 启用 root
adb root

# 将证书直接放到系统证书文件夹下
adb push C:\Users\xxx\Desktop\10fb1fcc.0  /system/etc/security/cacerts/

重启模拟器生效

5.5 模拟器配置代理

  1. 设置 → WLAN → 设置 → 编辑  → 手动代理
    • 代理主机:电脑本机IP(cmd 输入 ipconfig 查看,例:192.168.1.100)
    • 代理端口:yakit 默认 8083
  1. 返回 yakit,启动 MITM 劫持

此时打开APP,看到明文 HTTPS 请求/响应数据包。