Android 系统各个版本上HTTPS的抓包 (转)

作者:奋斗der小鸟

链接:https://www.jianshu.com/p/3b4cd6fdd8a9

摘录对第三方app抓包部分

如何在Android 7.X上抓第三方app的https包

一般情况下第三方我们都是抓第三方app的包,为了分析别人的数据。但是像上面所说的前两种方式一般在第三方app上不会存在的,谁也不想让自己的app被抓包不是。

1. 我们可以通过重打包的方式强行修改配置,或者强行降低 targetSdkVersion,或者强行修改别人源码里面的信任证书的代码,然后再重打包就好了(分别针对上面1,2,3里面所说的方法,只不过通过逆向的方式添加)。

2. 通过使用Xposed的 JustTrustMe 模块来信任所有的证书,Xposed不会用的看这里

3. 哈哈,使用Android 7.0 以下的系统安装应用,并抓包

使用自签名证书的应用和双向验证的应用

在抓取一些第三方应用的包的时候,他们比较顽固:其一呢,客户端通过指定的方式只信任某一个证书;其二,我们一般来说只有客户端验证服务端公钥证书是不是合法,但是某些app,比如支付宝,采用双向验证的方式,在通信过程中,服务器会验证app的公钥证书,这时候,就没办法使用Charles(中间人攻击的方式)抓包了。

自签名证书的https和CA签名的https 区别在哪里?对https请求的影响又在哪里?关于这些问题建议了解些证书和CA相关的概念以及证书分发的流程。

从前面的https 客户端和服务器端通信的时序图中可以看到,在握手过程中客户端会验证服务器的公钥证书。如果证书验证不通过会终止请求。那么问题来了,证书合不合法谁说了算?一般来说,在Android 手机出厂的时候会预装一些证书,这些证书是CA的根证书,理论上来说默认是可信任的。如上图:手机上的证书分为两种.png 里面的系统列表的证书就是。对于网站来说,这个验证过程是由浏览器来做的,浏览器通过系统里面预装的CA的根证书来验证这个服务器的证书是不是由系统已经有的这些CA签发的。如果是那么就认为这个https的请求中的服务器证书是可信的。

但是话说回来,我们在开发app的时候,请求网络一般用的是网络框架,这灵活性就比较好了,大多数的网络请求框架(HttpClient,OkHttp等)都支持修改这个证书验证过程,就是我不用上面所说的浏览器验证证书的过程,修改框架里面这个验证过程,(因为CA签发证书是要花钱的好多公司都是用的自签名的证书)指定框架在验证的时候只会认为和我们公司一样的证书才认为验证成功,才能进行接下来的通信。

其实上面 通过使用Xposed的 JustTrustMe 模块来信任所有的证书,Xposed不会用的看这里 https://www.jianshu.com/p/01a9e86581b9 就是针对这些网络请求框架进行攻击的 通过hook的方式强制让这些网络框架信任所有的证书。

你可能感兴趣的:(Android 系统各个版本上HTTPS的抓包 (转))