文章总结: 文档解析Android高版本抓包HTTPS报错难题,指出证书信任变更、SSLPinning及代理绕过是核心阻碍。提出终极方案:需解锁BL获取ROOT,利用Magisk注入证书,结合LSPosed绕过锁定,使用HTTPToolkit解决CDN兼容,并通过ClashTUN模式强制接管流量。该组合有效实现小程序及APP流量全抓取,极具实战参考价值。 综合评分: 93 文章分类: 移动安全,实战经验,安全工具,渗透测试
Android 小程序APP 抓包,从一直报错443到抓包畅通无阻
原创
茅丝录 茅丝录
T00ls安全
2026年3月9日 16:07 山西
记得2016年那会Android手机抓包还是很轻松的,配置一下证书就能愉快的查看接口数据了。
最近在Android上抓包的时候,突然发现Android机上小程序和APP的抓包出现一系列抓包不稳定,https接口流量不解析,图片资源不解析的问题,本来以为只是简单的抓包配置不合理,之后发现这涉及到一系列的问题:
一、Android 系统版本限制 二、ROOT 权限获取 三、Android 系统信任用户证书 四、绕过 APP SSL Pinning 五、代理工具的选择 六、APP 端流量拦截转发 七、总结 八、结语
顿时来了兴趣,开始一通折腾,终于断断续续,一步步查一次次尝试,彻底解决了Android的抓包问题,搬开堵在面前的大石,整个人都轻松通透了!在此要特别感谢AI技术,帮助我快速排查问题。
一、 Android系统版本限制
查看Android版本抓包相关的重大变革,两个最重要变化:
- • 最大分水岭:2016年8月22日发布的Android 7.0(Nougat) → 彻底改变了证书信任策略,导致传统HTTPS抓包失效,是最重大的一次改动。
- • 第二大限制:2018年发布的Android 9.0(Pie)→ 默认禁用明文HTTP。
- • 现代难点:Android 10+ TLS1.3、Android 13+QUIC/HTTP3,导致传统代理工具(Fiddler、Charles)基本废了。
上图总结引用自:Android证书安装大指南——看这一篇就够啦
二、ROOT 权限获取
Root的实现方式:无论是Magisk还是Kernel SU,都需要修改boot.img(或内核),如果Bootloader没有解锁,刷写的镜像会因签名不符而被拒绝,手机要么无法启动,要么自动恢复原厂镜像。
1.Bootloader 解锁
Bootloader 是手机开机最先运行的程序,负责验证并加载系统关键分区(boot、recovery、system、vendor等)。
默认情况下,它会强制校验签名(verified boot/AVB),拒绝加载被篡改的镜像。我使用的手机型号是红米手机(下图是手机当前的参数信息):
解锁 BL 时还未更新成澎湃系统,具体用的是哪个版本的MIUI已经记不清了,估计就是 MIUI13 或者 MIUI14,据说澎湃系统现在获取 ROOT 权限的限制更为严格了。
在申请解锁Bootloader的过程中也是一番折腾,简单来说要先绕过内测5等级,再等168小时(即7天)才可以。
- • 绕过内测5等级的方法可以看这个B站视频:【小米澎湃OS】小米hyperOS解锁bl绕过社区验证绕过内测5等级绕过内测绑定解锁bl刷root降级
- • 进行BL解锁的过程很繁琐,网上有大量教程讲解详细,可以跟着一步步做,这里就不细说了,总之又是一番折腾,但好在解锁过程还算顺利,不懂就问所以折腾的过程中又增长了不少知识。这里放两张手机成功BL解锁的图片,BL解锁成功,开机!
2.root 权限获取
BL解锁后,推荐使用Magisk APP+boot.img(需要到手机官网查找对应的ROM提取boot.img文件)获取root权限,网上有大量教程都详细说明了:从BL解锁到获取root的整个过程,这里也不再详细说明。
三、Android 系统信任用户证书
从Android 7.0+之后,系统就不再信任用户证书,默认只信任系统证书,因此在抓包解密HTTPS流量时,就必须先将中间人证书(Charles、Fiddler等)安装到系统证书。
安装系统证书总体来说有以下两种方式,推荐第2种。
1.复制用户证书到系统证书
Android系统上的证书必须按其独有的安全规则对证书进行命名:
1.下载代理证书,例如下载Charles的证书CharlesCA.pem
2.按安卓系统证书命名规则,获取"CharlesCA.pem"的名称;
openssl x509 -inform PEM -subject_hash_old -in CharlesCA.pem | head -1
# 返回 b0ba53e2
3.修正证书名称
mv CharlesCA.pem b0ba53e2.0
将重命名好的证书,使用ADB推送至系统证书路径。
因为系统路径默认是只读的,还需要换取写权限,这也会需要root。
具体操作方法网上也有很多博文教程(例:小米手机安装charles证书到系统证书,安卓高版本安装系统证书 HTTPS 抓包 – 终极解决方案)。
在此只做简单说明记录。此方法比较麻烦且重启手机后自定义的CA证书注入操作就会失效,所以手机重启,就需要每次重新注入证书,进入android系统修改证书路径。
2.使用 Magisk TrustUserCertificates 信任用户证书
根据现在手机系统的换代升级,我安装的主要是 Magisk 的 AlwaysTrustUserCerts 模块。
先决条件(必须)
- • Bootloader已解锁(否则不能刷入Magisk)。
- • 已刷入Magisk v24+(支持Zygisk,抓包遇强制校验证书指纹的APP时必须用),并能获取root(Magisk Manager可用)。
- • 你对可能的数据清除/Warranty风险有心理准备(解锁通常会清数据并可能影响保修)。
之后安装对应的模块:AlwaysTrustUserCerts,若开启Zygisk,可一起安装:LSPosed。在GitHub搜索安装即可!
- • TrustUserCerts(Magisk 设置):修改系统层,将你安装为“用户证书”的CA自动同步到系统证书区(system trust store),让Android 7+上的大多数APP也能信任这些代理/自签CA(比手动拷贝更稳妥、可回退),适用于普通HTTPS流量+代理证书。通常该模块在
post-fs-data阶段运行并完成同步。 - • LSPosed:基于 Zygisk 的 Xposed 运行时,用来加载 Xposed 模块(比如
TrustMeAlready)。
具体的安装步骤网上也有很多教程,可以自行百度也可以询问AI。Magisk 的配置与模块安装:
四、绕过 APP SSL Pinning
若APP强制钉死证书(常见于安全敏感APP,如微信、银行、直播、游戏等),Android 系统在本机信任“用户安装的证书(用户证书路径)”并 不能绕过 APP 的 SSL Pinning(跳过强制校验证书指纹)! LSPosed 的 TrustMeAlready 模块是一个用于绕过APP的SSL Pinning的Hook模块。
想要绕过强校验APP,那么Magisk TrustUserCerts 与 TrustMeAlready(LSPosed模块)一起使用,才是最佳组合!
安装 TrustMeAlready步骤:
- • 开启Zygisk,Zygisk是Magisk v24+ 推出的 Zygote 进程级注入框架,使用 Zygisk 版 LSPosed + TrustMeAlready绕过APP SSL Pinning。
- • 安装LSPosed,基于 Zygisk 的 Xposed 运行时,用来加载 Xposed 模块(如
TrustMeAlready)。 - • 安装 TrustMeAlready:一个常用的 Xposed 模块,用于绕过某些 Java 层的 SSL Pinning/检测(需要在 LSPosed 下安装并针对目标 APP 启用)。
- • 安装TrustMeAlready后,选中需要抓包的APP,用于绕过抓包时某些 Java 层的 SSL Pinning/检测。
LSPosed 中 TrustMeAlready 的安装与配置:
五、代理工具的选择
系统信任MIMT证书后,在我抓包小程序时就已经能正常解析数据接口,但依然无法正常解析图片接口,使用 TrustUserCertificates(Magisk模块)+ TrustMeAlready(LSPosed模块)+ Fiddler/Charles 图片依然无法正常解析,折腾很久终于弄明白其中原委,这里再次感谢AI!
原因是某些图片服务器会检测代理/MIMT(如七牛CDN、阿里云CDN、微信/腾讯云CDN)或者APP使用了Native层TLS,Fiddler/Charles无法伪造证书:
此前代理工具一直使用的是 Fiddler/Charles,从未想过更换代理工具,但面对这个问题也不得不尝试寻找最新的工具,然后发现HTTP Toolkit抓包瞬间通畅,真是山重水复疑无路,柳暗花明又一村。
原因是:
- • Fiddler/Charles 解析图片(兼容性差):Fiddler 只支持 HTTP/1.1,许多 CDN 是 HTTP/2 / HTTP/3 → 握手会失败导致 403 或直接黑屏;Charles 支持更好,但仍然有兼容性不足。所以Charles/Fiddler 报 403 → 因为中间人证书失效或不支持 HTTP/2;CONNECT 200 只是隧道建立成功,不是服务器返回 200
- • HTTP Toolkit(推荐):能抓取图片 → 说明 APP 图片走 Native TLS,它可以 hook native TLS,能穿透校验,最适合抓图片这类 CDN 内容。
HTK工具的成功使用,让研发同事也跑来询问点赞,也算是给自己的小小的成就感吧!
六、APP 端流量拦截转发
本以为小程序抓包畅通无阻后,APP也是一路绿灯,但使用了 Wifi/系统代理、Droy工具后依然经常出现抓不到任何流量的情况。原因是小程序依附微信有单独的网路通信,APP可能绕过了系统代理(非常常见),许多APP(特别是国产 App)会:
- • 使用 OkHttp 的 proxy = NO_PROXY
- • 使用 Socket / Native libssl
- • 使用 QUIC/HTTP3
- • 或强制直连
这类流量 Droy 抓不到,但 Clash 的 TUN 能抓。干脆一劳永逸,直接用 Clash 做流量转发,是最稳、最通用、最不容易被 APP 绕过的方案,因为 Clash(TUN 模式)有 2 个巨大优势:
优势 1:Clash TUN → 强制接管所有流量
优势 2:Clash 可以把所有流量转发给 Fiddler/Charles/HTTP Toolkit等
总之,不管你用什么抓包工具,先让 Clash 接管所有流量,再转发给 Fiddler/Charles/HTTP Toolkit等,是最稳定、兼容性最高的方案。
不过想要使用Clash需要能够科学上网,如果你连科学上网都不会,请出门左转先去百度吧!使用Clash还需要:
- • 自己配置代理文件yaml并导入Clash,可以百度一下,有现成的配置文件。
- • 针对APP抓包需要在【设置-网络-访问控制模式&访问控制应用包列表】指定需要抓包的APP
七、总结
1.iOS抓包与Android抓包的不同
iOS系统信任管理集中,允许用户手动安装并信任根证书,这就让像Charles/Fiddler/HTTP Toolkit 这样的工具能够成功解密HTTPS流量。 Android
- • Android 7.0+开始系统信任机制越来越严格,用户安装的CA证书不会被应用自动信任,默认只信任系统自带的根证书,需要ROOT。
- • 许多APP有证书固定,需要hook才行,抓包难度大。
- • Android APP可以绕过系统代理:Android 的代理是一种 可检测且可规避 的设置,APP可以轻易检查并选择是否使用。
2.小程序抓包与APP抓包的不同
小程序
- • 因为证书固定必须写在APP原生代码里,因此小程序的HTTPS默认没有“证书固定”,它们的网络请求都是通过平台容器(微信、支付宝APP本体)发出的,微信/支付宝容器本身是不做证书Pinning的,只会简单使用系统信任链,如果Android系统信任了抓包软件的CA证书,微信就会信任,然后所有小程序HTTPS都能被解密。因此:小程序 = 容器代发网络请求 = 容器不固定证书 = 容易抓包。
- • 小程序域名统一托管,APP则完全自由,可自行随便加
okhttp.setCertificatePinner(...) - • APP通常会证书固定(Certificate Pinning),机制一般为PIN 公钥或证书摘要 → 如果不是原始服务器证书则拒绝连接。因此:APP = 启用了证书固定 = 不信任抓包CA = 无法抓HTTPS。
3.小结
- • Android APP抓 HTTPS 的终极组合(100%):
1.系统 ROOT(最关键)
2.TrustUserCertificates (Magisk配置,自定义 APP 也信任用户证书)
3.TrustMeAlready(LSPosed模块,自动绕过Java层证书固定)
4.Fiddler/Charles/HTTP Toolkit(MITM核心)
5.Clash(TUN强制接管所有流量)
ROOT 可以把代理的 CA 装到 /system/cacerts → 所有 APP 100% 信任。这一步让系统层面开启了完全的MITM。
你的APP没有SSL Pinning,但还是报证书错误 → 用 Magisk 的 TrustUserCertificates 即可
你的 APP 有 SSL Pinning,TrustUserCertificates 也没用 → 必须用 TrustMeAlready
最稳抓包 = 两者一起使用
ROOT是基础,TrustMeAlready是“杀手锏”,两者叠加:没有Java层的Pinning能逃得掉。
这套组合的实际能力:只剩应用层加密抓不到(emmm…新的任务已解锁!)
对于强防护 APP(如微信、银行 App):
- • HTTPS 会彻底被解密(MITM)
- • 但内部 payload 会继续被三重 AES/RC4/SM4 加密
这是应用层加密,不属于 HTTPS 抓包范畴。要解这个,需要逆向协议,不是 MITM 的问题。
但你能看到加密前的 TLS 结构、中间件标记、序列号等,说明 MITM 已经 100% 成功。
八、结语
好奇心与探索欲是原动力,有时候神奇的技术就是一层窗户纸,解决的办法往往很简单,但解决的过程往往很曲折。这中间说不清道不明的吃透问题点的好奇心是坚持下来最重要的原因!
原文连接
https://www.t00ls.com/articles-74504.html
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:T00ls安全 茅丝录 茅丝录《Android 小程序APP 抓包,从一直报错443到抓包畅通无阻》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论