一、前置知识
- 默认你了解了HTTPS中间人攻击的流程,再来回顾一下这个图:

- 网络在传输过程中一般不会被监控解密,但是通过中间人进行攻击(也就是抓包)可以解密这个传输流程。
- 其实如果不进行客户端安装证书,也是可以抓包的,但是没有信任的证书相当于就是在路由上走一次,并没有加解密过程,实际上还是客户端与服务器端进行加解密通信
- 这个中间人自己生成的证书在中间进行加解密与双方进行通信。
二、核心知识点
2.1 证书安装
- 了解了中间人的攻击流程,也就知道了关键是这个证书,证书被校验成功即可以进行双向的传输解密
- 安卓7以后安装的证书是放在用户目录的,并不能被系统信任,所以无法加解密流量。
- 大多数抓不到包的原因就是证书安装了,但是在用户目录
- 解决方法:
- 1
使用MT管理器
把用户目录的证书移动到系统证书目录(据说可以支持到安卓10)- 用户证书文件目录
/data/misc/user/0/cacerts-added/
- 系统证书目录
/etc/security/cacerts/
- 用户证书文件目录
- 2 由于 Android 10 采用了某些安全策略,将系统分区
/system挂载为只读
,就算你 root 了也没用,无法写入系统分区也就无法导入系统证书- 解决:使用Move Certificates模块
- https://github.com/Magisk-Modules-Repo/movecert
- 3 修改源码默认信任用户证书(提供几个检测的源码定位代码)
/frameworks/base/core/java/android/security/net/config/NetworkSecurityConfig.java
/frameworks/base/core/java/android/security/net/config/XmlConfigSource.java
libcore/ojluni/src/main/java/java/net/NetworkInterface.java
libcore/ojluni/src/main/java/java/lang/System.java
- 1
- 到此安装完证书 使用抓包工具(charles、fidder、Burpsuit等)就可以进行抓包了
- 但是我们使用的证书是中间人的证书 不是服务器直接下发的证书 所以只能解决80%的HTTPS抓包问题。
三、SSLPinning环境下如何抓包
3.1 证书校验——SSL证书绑定
上文可以了解到从 HTTP 到 HTTPS 数据在传输过程中添加了一层 加密(SSL/TLS),让我们数据流量处于加密状态,不再是明文可见。一旦 app 校验了证书的指纹信息。我们的证书不再受信任了。自然而然就无法建立连接,所以必须想办法让 app 信任,才能继续抓包。当然这个分为两种情况:
3.1.1 客户端校验服务器端的证书
上篇文件提到了一个证书包含了很多信息,那么客户端校验的原理就是:
在APP中预先设置好证书的信息,在证书校验阶段时与服务器返回的证书信息进行比较。
- 一般会有以下整数的信息会被校验,每种校验的方式这里就不展开了,下一篇文件在详细研究。
- 公钥校验
- 证书校验
- Host校验
- 如何绕过?
- 因为本质上校验是在客户端中完成的,所以客户端中肯定会有相关的校验代码,我们找到校验的地方进行HOOK,使得校验的地方直接PASS。这里方法列举,暂时不展开,下一篇文件在详细研究。
- frida hook
- JustTrustMe(xposed的Hook脚本)
3.1.2 服务器端证书校验
在客户端放入证书(p12/bks),客户端向服务端发送请求时,携带证书信息,在服务端会校验客户端携带过来的证书合法性
- 开发逻辑
- 在APK打包时,将证书放入assets或raw目录
- 在开发代码时,发送请求读取证书文件内容+证书密码 携带发送到服务器端
- 解决方法
- 找到证书文件(bsk/p12)
- 通过hook获取证书相关密码
- 将证书导入charles即可正常抓包
- 在使用py构造请求时也需要携带这个证书和密码
四、禁用代理的场景
- 现在的很多的app都是用禁止网络代理来防止抓包。在请求的时候都使用了Proxy.NO_PROXY
- 解决方法:
- 传输层的vpn进行流量转发
- 使用charles + Postern
- postern是在传输层久把流量转发指定的中间人(代理/抓包软件)
- 不理解传输层什么意思? 稍后来填坑
五、自实现/自集成的SSL库
- 通用hook 脚本或插件 覆盖不到
- 暂时不展开
六、特殊框架 flutter 环境下如何抓包
- 框架特点:自实现SSL库 + 单向证书绑定 + 禁用代理
- 暂时不展开
七、非root环境如何抓包
- 场景:应用对root环境进行校验
- 暂时不展开
八、其他抓包技巧
- https://www.52pojie.cn/thread-1405917-1-1.html
- hook得到 sslkey,可以解释原理
- https://bbs.kanxue.com/thread-277996.htm
扫码免费获取资源:
