必须绕过HTTPS证书校验,否则App因证书固定(Certificate Pinning)直接断连或闪退;Android可用Frida注入hook,iOS非越狱需重打包或Objection动态hook。

抓包前必须关掉 HTTPS 证书校验(否则 App 直接断连)
绝大多数 Android/iOS App 启用了证书固定(Certificate Pinning),即使你用 Charles/Fiddler 配了代理,App 也会拒绝连接或直接崩溃。不绕过这层校验,HTTPS 流量根本看不到。
常见表现:Connection refused、SSL handshake failed、App 启动后白屏或闪退。
- Android:用
adb shell+frida注入绕过,例如运行frida -U -f com.example.app -l ssl-pinning-bypass.js --no-pause - iOS:越狱设备可用
ssl-kill-switch2;非越狱需重打包 App 并 patchSecTrustEvaluate调用,或用 Objection 动态 hook - 别依赖「安装代理证书」就万事大吉——那是 HTTP 层的事,HTTPS 层的校验在代码里,必须动逻辑
Charles/Fiddler 抓不到请求?检查代理链和 DNS 解析
手机设了代理,但请求仍走直连,大概率是 DNS 没走代理,或者 App 使用了 OkHttp 的自定义 Dns 实现(比如强制走 1.1.1.1)。
典型现象:HTTP 请求能抓到,HTTPS 请求全无踪影;或者只看到 CONNECT 请求,没有后续 GET/POST。
立即学习“Python免费学习笔记(深入)”;
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
- 在 Charles 中打开
Proxy → SSL Proxying Settings → Enable SSL Proxying,并确认目标域名已加入列表(如*:443) - 手机端用
curl -x http://your-pc-ip:8888 https://httpbin.org/ip测试代理是否通;不通则检查防火墙、Wi-Fi 共享设置、IP 是否写错 - Android 7+ 默认不信任用户证书:需把 Charles 根证书导出为
.cer,重命名为name.0,用adb push放到/system/etc/security/cacerts/(需 root)
接口参数被加密或签名?优先看 OkHttp 的 Interceptor 和 X509TrustManager
抓到的请求 body 是乱码、header 里有 X-Sign 或 Signature,说明服务端要求客户端参与加签。逆向重点不是 URL,而是「谁在组装请求」。
Android App 大多基于 OkHttp,加密逻辑通常藏在 Interceptor 或自定义 X509TrustManager 的 checkServerTrusted 里(有人会在这里塞加解密函数)。
- 用 Jadx-GUI 打开 APK,全局搜索
addInterceptor、RequestBody.create、Base64.encode、SecretKeySpec - 重点关注
build.gradle里是否引入了com.squareup.okhttp3:okhttp,再顺藤摸瓜找OkHttpClient.Builder初始化位置 - 如果发现加签逻辑调用了 so 库(如
nativeSign()),别硬啃汇编——先用 Frida hook 该函数,打印出入参和返回值,比静态分析快得多
Python 脚本复现接口时 401/403?别只 copy headers
抓包看到的 Authorization、X-Device-ID 看似固定,其实可能含时间戳、随机数、设备指纹等动态字段。Python 直接复制 header 发请求,十有八九失败。
关键不是“有没有 header”,而是“header 怎么生成”。尤其注意以下几类字段:
-
X-Timestamp:常为毫秒级时间戳,需用int(time.time() * 1000)对齐 -
X-Nonce或X-Request-ID:通常是 UUID4 或 16 字节随机字符串,每次请求必须不同 -
User-Agent:部分 App 校验 UA 是否匹配真实设备(如含SM-G998B Build/TP1A.220624.014),硬写死会触发风控 - 最稳妥做法:用 Frida hook 加密/签名函数,在 Python 里复用相同算法,而不是靠抓包拼凑参数
真正卡住的从来不是抓包本身,而是把「客户端如何构造请求」这个逻辑从 Java/Kotlin/OC 里准确还原出来。没搞清这点,换多少代理工具都只是隔靴搔痒。

















