这样即。Android平台HTTPS抓包全方案( 二 )。" />

Android平台HTTPS抓包全方案( 二 )

<?xml version="1.0" encoding="utf-8"?><network-security-config><base-config cleartextTrafficPermitted="true"><trust-anchors><certificates src=https://www.isolves.com/it/cxkf/ydd/Android/2020-05-28/"system" /> 这样即表示,App信任用户CA证书,让系统对用户CA证书的校验给予通过 。更多相关信息,详见
Network security configuration:

https://developer.android.com/training/articles/security-config
调低targetSdkVersion < 24如果想抓一个App的包,可以找个历史版本,只需要其targetSdkVersion < 24即可 。然而,随着googlePlay开始限制targetSdkVersion,现在要求其必须>=26,2019年8月1日后必须>=28,国内应用市场也开始逐步响应这种限制 。绝大多数App的targetSdkVersion都将大于24了,也就意味着抓HTTPS的包越来越难操作了 。
平行空间抓包如果我们希望抓targetSdkVersion >= 24的应用的包,那又该怎么办呢?我们可以使用平行空间或者VirtualApp来曲线救国 。平行空间和VirtualApp这种多开应用可以作为宿主系统来运行其它应用,如果平行空间和VirtualApp的targetSdkVersion < 24,那么问题也就解决了 。
在此,我推荐使用平行空间,相比部分开源的VirtualApp,平行空间运行得更加稳定 。但必须注意平行空间的版本4.0.8625以下才是targetSdkVersion < 24,别安装错了 。当然,HttpCanary的设置中是可以直接安装平行空间的 。
安装到系统CA证书目录对于Root的机器,这是最完美最佳的解决方案 。如果把CA证书安装到系统CA证书目录中,那这个假CA证书就是真正洗白了,不是真的也是真的了 。由于系统CA证书格式都是特殊的.0格式,我们必须将抓包工具内置的CA证书以这种格式导出,HttpCanary直接提供了这种导出选项 。
操作路径:设置 -> SSL证书设置 -> 导出HttpCanary根证书 -> System Trusted(.0) 。
Android平台HTTPS抓包全方案

文章插图
 
PS. 很不幸的HttpCanary v2.8.0前导出的证书名称可能不正确,建议升级到v2.8.0以上版本操作 。
导出.0格式的证书后,可以使用MT管理器将.0文件复制到/etc/security/cacerts/目录下,或者通过adb remount然后push也可(这里稍微提一下,别在sdcard里找这个目录) 。
/ Firefox证书安装 /
火狐浏览器Firefox自行搞了一套CA证书管理,无论是系统CA证书还是用户CA证书,Firefox通通都不认可 。这种情况,我们需要将CA证书通过特殊方式导入到Firefox中,否则Firefox浏览网页就无法工作了 。
HttpCanary v2.8.0版本提供了Firefox证书导入选项 。在设置 -> SSL证书设置 -> 添加HttpCanary根证书至Firefox 中:
Android平台HTTPS抓包全方案

文章插图
 
点击右上角复制按钮将url复制到粘贴板,然后保持此页面不动,打开Firefox粘贴输入复制的url 。
Android平台HTTPS抓包全方案

文章插图
 
出现下载证书弹框后,一定要手动勾上:信任用来标志网站和信任用来标志电子邮件用户 。然后确定即可 。
/ 公钥证书固定 /
证书固定(Certificate Pinning)是指Client端内置Server端真正的公钥证书 。在HTTPS请求时,Server端发给客户端的公钥证书必须与Client端内置的公钥证书一致,请求才会成功 。
在这种情况下,由于MITM Server创建的公钥证书和Client端内置的公钥证书不一致,MITM Server就无法伪装成真正的Server了 。这时,抓包就表现为App网络错误 。已知的知名应用,比如饿了么,就采用了证书固定 。
另外,有些服务器采用的自签证书(证书不是由真正CA发行商签发的),这种情况App请求时必须使用证书固定 。
证书固定的一般做法是,将公钥证书(.crt或者.cer等格式)内置到App中,然后创建TrustManager时将公钥证书加进去 。很多应用还会将内置的公钥证书伪装起来或者加密,防止逆向提取,比如饿了么就伪装成了png,当然对公钥证书伪装或者加密没什么太大必要,纯粹自欺欺人罢了 。
证书固定对抓包是个非常麻烦的阻碍,不过我们总是有办法绕过的,就是麻烦了点 。
JustTrustMe破解证书固定Xposed和Magisk都有相应的模块,用来破解证书固定,实现正常抓包 。破解的原理大致是,Hook创建SSLContext等涉及TrustManager相关的方法,将固定的证书移除 。
基于VirtualApp的Hook机制破解证书固定Xposed和Magisk需要刷机等特殊处理,但是如果不想刷机折腾,我们还可以在VirtualApp中加入Hook代码,然后利用VirtualApp打开目标应用进行抓包 。当然,有开发者已经实现了相关的功能 。详见:


推荐阅读