应用安全 --- 安卓抓包
Charles 抓包详解
1. 抓包原理
Charles 作为 中间人代理 (Man-in-the-Middle Proxy) 工作:
-
电脑上运行 Charles,开启一个代理服务器(如
:8888
)。 -
手机网络设置代理,指向电脑的 IP 和 Charles 的端口。
-
手机的所有网络请求都会先流经 Charles,再由 Charles 转发给目标服务器。
-
服务器的响应也同样先返回给 Charles,再返回给手机。
因此,Charles 得以记录下所有流经它的网络数据。
2. 基础配置(抓取 HTTP)
-
安装与激活:从官网下载 Charles 并按教程激活。
点help,然后register,输入下面,如果过期搜索新的
Name: Just For Testing
Serial: 230ADA2020DFBD108E(我也是找的,如果过期了可以参加其他教程) -
电脑端配置:
-
查看电脑本地 IP 地址(如
192.168.1.10
)。 -
Proxy -> Proxy Settings...
中确认代理端口(默认8888
)。
-
-
手机端配置:
-
确保手机和电脑在同一局域网(连接同一个 Wi-Fi)。
-
在手机 Wi-Fi 设置中,修改当前网络的代理为手动,填入电脑的 IP 和 Charles 的端口。
-
-
开始抓包:配置完成后,Charles 会弹出连接确认框,选择
Allow
。此时手机的非加密 HTTP 流量即可被捕获。
3. 高级配置(抓取 HTTPS)-> 重点与难点
HTTPS 协议的设计目的是防止中间人窃听和篡改。Charles 要解密 HTTPS,必须让手机信任它自己签发的证书。
-
安装 Charles CA 证书到手机:
-
电脑 Charles 开启状态,手机浏览器访问
chls.pro/ssl
,下载并安装证书。 -
此步骤完成后,在 Android 7.0 (Nougat) 及以下版本的设备上,已可抓取 HTTPS。
-
-
Android 7.0+ 的系统证书问题 (核心概念):
-
用户证书 vs. 系统证书:从 Android 7.0 开始,APP 默认只信任系统预装的系统证书,而不再信任用户自行安装的用户证书。
-
后果:即使安装了 Charles 证书,很多 APP(尤其是其
targetSdkVersion
>= 24 的)依然会报 SSL 错误,无法抓包。 -
解决方案:必须将 Charles 的 CA 证书从 “用户证书” 区域移动到 “系统证书” 区域。
-
-
将证书提升为系统证书 (需 Root):
-
必要条件:手机必须已 Magisk Root。
-
使用 Magisk 模块:安装如
Move Certificates
或MagiskTrustUserCerts
等模块。这些模块的作用就是在每次开机时,自动将用户证书目录下的所有证书复制到系统证书目录。 -
操作流程:在 Magisk App 中刷入模块 -> 重启手机 -> 查看
设置 -> 安全 -> 加密与凭据 -> 信任的凭据 -> 系统
,此时应能看到 Charles Proxy 的证书。
-
至此,手机端配置完成,可以抓取绝大多数 APP 的 HTTPS 流量。