安卓抓包完全指南(一):从入门到 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 检测等进阶技术!


🔗 推荐阅读

相关推荐
aqi003 小时前
一文理清 HarmonyOS 6.0.2 涵盖的十个升级点
android·华为·harmonyos·鸿蒙·harmony
赏金术士4 小时前
Jetpack Compose 状态提升(State Hoisting)完全指南
android·kotlin·compose
刘马想放假4 小时前
OpenVPN 深度解析:从协议原理到生产实践
运维·网络协议
BoomHe4 小时前
git Rebase 为任意一笔提交补上 Change-Id
android·git·android studio
TDengine (老段)5 小时前
TDengine 超级表/子表/普通表 — 设计理念与内部表示
android·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
shuaiqinke5 小时前
【分享】Edge浏览器|内置扩展仓库|支持油猴|上网无限制
android·前端·人工智能·edge
00后程序员张5 小时前
HTTPS单向认证、双向认证、抓包原理与反抓包策略详解
网络协议·http·ios·小程序·https·uni-app·iphone
Carson带你学Android6 小时前
见证历史!Swift 6.3 官方支持 Android,跨平台要变天了?
android
June bug6 小时前
Failed to fetch+HTTP 422=Agent ID 不匹配
网络·网络协议·http