背景:
想要针对手机抓包玩耍一下,charles配置完证书等操作后,结果发现除了游览器能够正常抓包外,绝大部分流行的app都无法抓包[少数主流可以],许多包抓下来出现如图效果。全都是红色的Connection 200,显示SSL 问题[实际上证书都已配好]
原因:
原理:charles 抓包原理实际上是 https 中间人攻击,只不过我们手动安装并信任了这个中间人的证书。
问题:游览器默认是信任这个证书的,但app不一定啊,app客户端完全可以先验证证书是不是自己公司的,发现不是直接拒绝并停止网络请求[这种技术叫做 SSL Pining,防止中间人攻击],这就是为什么抓包时很多app看起来像是连不上网的原因。
解决方案[安卓]:
步骤1.
使用一些黑科技框架的前提是,需要root才行。
为了保护自己的手机安全,故在手机上安装一个虚拟机,大名鼎鼎的VirtualXposed。
这里下载并安装到手机就行了。使用上只有两个操作,上滑是查看虚拟机内安装的app,点按钮是打开设置。
步骤2.
下载 JustTrustMe,也是在右边的 release 那里有下载。注意,这里先安装到自己手机上,再打开 VirtualXposed 使用"添加应用"添加到虚拟机里。
步骤3.
把想抓包的app像步骤2那样添加到虚拟机里,然后在虚拟机里打开软件,这时候再看抓包软件的记录,就不再是红色的Connection 200 了。这里我体验了拼多多、B站等几个主流app,完美抓到。当然,这里只能抓http/https的,至于 webSocket 就不行啦。
底层原理:
主要还是在JustTrustMe,查看一下Github主页,原来是修改了系统底层对SSL的校验,难怪需要root.