安卓抓包完全指南(一):从入门到 SSL Pinning 绕过

安全研究必备技能 · 从基础概念到实战操作


📋 本文导读

✅ HTTPS、公钥、私钥、证书这些基础概念

✅ 三种方法将抓包证书安装到系统目录

✅ SSL Pinning 的工作原理详解

✅ 使用 Objection 和 Frida 绕过 SSL Pinning

🔐 前置概念学习

在学习抓包限制绕过之前,首先需要明白几个核心概念:HTTPS、公钥、私钥、签名、证书(CA)

HTTPS 是什么?

HTTPS = HTTP + 加密 + 认证 + 完整性保护

简单来说,HTTPS 就是在 HTTP 的基础上增加了三层保护:

  1. 数据加密 - 传输内容不会被窃取
  2. 身份认证 - 确认你连接的是真实的服务器
  3. 完整性保护 - 数据在传输中不会被篡改

公钥与私钥

公钥私钥用于非对称加密算法(如 RSA、SM4 等),特点是双向加解密

  • 公钥加密 → 私钥解密
  • 私钥加密(签名) → 公钥解密

💡 记住:公钥是公开的,任何人都可以获取。私钥只存放于后端,绝对不能泄露。

CA 证书

CA 证书是由权威证书颁发机构发布的数字证书,包含:

  • 电子签证机关的信息
  • 公钥用户信息
  • 公钥
  • 签名和有效期

签名是指:用 hash 散列函数计算明文信息的摘要,然后用 CA 的私钥进行加密,加密后的密文就是签名。

证书 = 公钥 + 签名 + 申请者和颁发者信息

客户端操作系统预置了 CA 的公钥,所以可以解密签名来验证证书的真实性。


📦 常规抓包实现原理

理解了上面的原理后,我们来看看常规抓包的思路:为什么使用 BurpSuite、Fiddler 等抓包工具时,只需要将工具的 CA 证书导入到系统信任列表中即可抓包?

抓包的本质就是中间人攻击(MITM)

  1. 客户端与抓包工具建立 SSL 连接
  2. 抓包工具与服务器建立 SSL 连接
  3. 抓包工具在中间解密并转发数据

⚠️ 这一切的前提是:客户端信任抓包工具的证书


📱 安卓导入抓包证书的三种方法

从 Android 7.0 开始,系统不再信任用户自己安装的证书,需要将证书安装到系统证书目录才能生效。

1 手工将证书移入系统目录

这是最原始但可靠的方法:

步骤 1:从 BurpSuite 导出证书

在 BurpSuite 中导出 certificate.der 格式的证书

步骤 2:转换为 PEM 格式并计算 hash

bash 复制代码
# 转换为 PEM 格式
openssl x509 -in certificate.der -inform DER -out certificate.pem -outform PEM

# 提取 hash
openssl x509 -inform PEM -subject_hash -in certificate.pem | head -1

假设输出的 hash 是 9a5ba575,那么重命名文件:

bash 复制代码
cat certificate.pem > 9a5ba575.0
openssl x509 -inform PEM -text -in certificate.pem -out /dev/null >> 9a5ba575.0

步骤 3:推送到手机并移动到系统目录

bash 复制代码
# 先推送到临时目录
adb push 9a5ba575.0 /data/local/tmp/

# 进入 adb shell 操作
adb shell
su
mount -o rw,remount /system
mv /data/local/tmp/9a5ba575.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/9a5ba575.0

⚠️ 如果遇到只读文件系统错误:

bash 复制代码
# 方法一:重新挂载
mount -o rw,remount /system

# 方法二:如果是 AVB 2.0
adb root
adb disable-verity
adb reboot
# 重启后再次操作

最后:重启手机,查看证书是否安装成功。

2 先安装到用户证书,再手动移动

这是更简单的方法:

  1. 正常安装证书到用户目录(手机设置中安装)
  2. 使用 MT 管理器等文件管理器
  3. /data/misc/user/0/cacerts-added/ 下的证书文件
  4. 移动到 /system/etc/security/cacerts/
  5. 重启手机即可

3 使用 Magisk 模块 Move Certificates

这是最方便的方法,适合经常需要抓包的同学:

  1. 安装 Fox's Magisk 模块管理工具
  2. 下载 Move Certificates 模块的 zip 安装包
  3. 在 Magisk 中导入安装模块
  4. 手动安装抓包工具证书到用户证书
  5. 重启手机,模块会自动将用户证书移动到系统目录

✅ 推荐:这是最省心的方法,每次安装新证书后重启即可自动移动。


🛡️ SSL Pinning 原理及绕过

搞定了基础抓包后,你会发现很多 APP 还是抓不到包。这就是因为开启了SSL Pinning(证书锁定)

什么是 SSL Pinning?

SSL Pinning 顾名思义就是将服务器提供的 SSL/TLS 证书内置到 APP 客户端中,当客户端发起请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性。

简单说:APP 只信任自己内置的证书,不信任系统证书列表中的证书,所以抓包工具的证书就不被信任了。

两种锁定方式

方式 说明 特点
证书锁定 将服务器证书的哈希或公钥直接内置到 APP 中 简单直接,但证书更新需要发版
公钥锁定 只锁定证书中的公钥,比对公钥值 公钥不变的话证书续期不用改代码

SSL Pinning 的实现方式

1. 代码层实现(以 OkHttp 为例)

直接在代码中校验证书公钥:

2. 配置文件实现(network_security_config)

通过 res/xml/network_security_config.xml 配置 SSL Pinning:

  • 使用证书锁定:将证书哈希写入配置
  • 使用公钥锁定:提取公钥哈希写入配置

这种方式是目前最常见的实现方式。


🎯 实战:SSL Pinning 绕过演示

我们使用测试 APP 来演示 SSL Pinning 的效果和绕过过程:

测试 SSL Pinning 是否生效

打开测试 APP,点击相关按钮,使用 Charles 抓包:

可以看到提示:

Client closed the connection before a request was made. Possibly the SSL certificate was rejected

这说明 SSL Pinning 生效了,APP 拒绝了我们抓包工具的证书。

绕过方法一:使用 Objection 一键绕过

Objection 是基于 Frida 的强大工具,可以一键绕过 SSL Pinning。

命令:

bash 复制代码
# 启动 Objection 并注入目标 APP
objection -g com.actorn.netcapture explore

# 在 Objection 中执行
android sslpinning disable

执行后,再次点击 APP 中的按钮,就可以成功抓到 HTTPS 请求包了!

✅ 优点:简单快速,一键搞定。

❌ 缺点:可能有个别 APP 的自定义 SSL Pinning 无法被检测到。

绕过方法二:使用 Frida 自己写 Hook 脚本

如果 Objection 的通用脚本不起作用,就需要自己写针对性的 Frida 脚本。

绕过代码层检测公钥:

bash 复制代码
console.log("[*] Starting SSL Pinning bypass");
Java.perform(function () {
    var ss = Java.use("okhttp3.OkHttpClient$Builder");
    ss.proxy.implementation = function (x) {
        console.log("[+] Hooked proxy setting");
        return this.proxy(null);
    }
});

加载脚本并执行:

bash 复制代码
frida -U -f com.actorn.netcapture -l unpin.js --no-pause

绕过配置文件校验:

执行后,同样可以成功抓包:

绕过方法三:JustTrustMe / JustTrustMePlus

这是专门的 Xposed / LSPosed 模块:

  1. 在 LSPosed 中安装 JustTrustMe 模块
  2. 选择作用域为目标 APP
  3. 重启 APP 即可自动绕过

原理:Hook 了系统所有的 SSL 相关校验方法,让它们永远返回验证通过。


📝 本篇总结

核心要点

基础概念:理解 HTTPS、证书、公钥私钥是抓包的基础

证书安装:Android 7.0+ 需要安装到系统证书目录,推荐使用 Magisk 模块

SSL Pinning:是最常见的反抓包手段,将证书/公钥内置到 APP 中

绕过方法:Objection 一键绕过,或自定义 Frida 脚本,或使用 JustTrustMe 模块

📢 这只是抓包的入门篇。下一篇我们将继续讲解更复杂的抓包限制绕过:双向认证、NO_PROXY、VPN 检测等进阶技术!


🔗 推荐阅读

相关推荐
恋猫de小郭13 分钟前
Flutter 又为 AI 时代添砖加瓦:全新 ComponentLibrary 提议
android·前端·flutter
Mr -老鬼13 分钟前
EasyClick 入门指南:Shell 命令与 ADB 完全指南
android·adb·自动化·shell·easyclick·易点云测
故渊at14 分钟前
第五板块:Android 系统服务与电源管理 | 第十七篇:Power Manager Service 与 WakeLock 机制
android·pms·系统服务·电源管理·休眠唤醒
故渊at16 分钟前
第七板块:Android 存储体系与文件系统 | 第二十一篇:Vold 与 FUSE 存储架构
android·架构·文件系统·fuse·vold·存储体系
唯刻V27 分钟前
谷歌官方 Android CLI 深度解读
android·cli·ai开发·ai时代·android cli
aidou131428 分钟前
Kotlin中自定义RadioGroup实现多个RadioButton自动换行
android·开发语言·kotlin·shape·radiobutton·selector·radiogroup
小二·30 分钟前
MySQL 8.0 性能优化与索引原理
android·mysql·性能优化
feifeigo12332 分钟前
C# ADB 安卓设备数据传输工具
android·adb·c#
liuzhilongDBA33 分钟前
浅析连接池和TCP探活
网络·网络协议·tcp/ip
飞猿_SIR34 分钟前
RK3288 Android11平台移植RTL8733BU-WiFi模组
android·嵌入式硬件