之前我刚开始学抓APP包的时候经常用fiddler或者charles,配置好https及手机证书后发现有的app能抓到,有的不行,不能抓到包的APP基本会报一个错,叫”网络错误”。
那这个是为什么呢,经过我的搜索查证,发现有这么几个原因(不足请在评论区指出):
- 在Android 7.0(API 24) ,有一个名为“Network Security Configuration”的新安全功能。这个新功能的目标是允许开发人员在不修改应用程序代码的情况下自定义他们的网络安全设置。如果应用程序的SDK高于或等于24,则只有系统证书才会被信任。所以用户导入的Charles根证书是不被信任的。所以就抓不到包了。
- ssl-pinning: APP在开发时就将服务端证书一块打包到客户端里。这样在HTTPS建立时与服务端返回的证书比对一致性,进而识别出中间人攻击后直接在客户端侧中止连接。
针对以上两张情况,目前都有解决办法,先说第一种情况:
- 换一个 Android 7 以下的手机抓包(快捷方便,我就这么用的2333)
- 用 Android 模拟器抓包
- Root手机,将证书移到/system/etc/security/cacerts下,目前已经有 APP(root-certificate-manager-root) 支持一键配置
- 解包apk,改配置文件,再重新打包
第二种情况:
主要通过hook解决,因为平时抓包没这种需求,所以不是很了解,只把网上已知的方法记录下。
- Ios用户用 ssl-kill-switch2
- Android用户用 JustTrustMe