Https/Tcp抓包工具Charles、fiddler,ping (网络诊断工具),Android平台HTTPS抓包解决方案及问题分析HttpCanary

   市面上已经有一些弱网络模拟工具,比如微软的Network Emulator for Windows Toolkit(NEWT),Facebook的Augmented Traffic Control(ATC),以及WANem,NEWT。NEWT是基于Windows的,通过图形化的界面,可以对该机器的网络参数进行设置,且模型较为丰富。

-- ping (网络诊断工具)

  ping (网络诊断工具): Ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。

> 弱网测试工具Charles MAC
Charles官网- https://www.charlesproxy.com/latest-release/download.do
charles 4.1.3破解替换文件- http://download.csdn.net/download/smi11e/9877032
Charles(v4 @Windows)的使用- http://blog.csdn.net/zxz_tsgx/article/details/52635115
弱网测试方法整理- http://blog.csdn.net/ToBeTheEnder/article/details/58302752
charles使用教程指南+客户端弱网测试- http://blog.csdn.net/anualday/article/details/51423457

-- charles安装配置 for Mac- https://www.jianshu.com/p/9f4ebde9c518
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
> fiddler windows

 

> Android平台HTTPS抓包解决方案及问题分析HttpCanary

  HTTP协议发展至今已经有二十多年的历史,整个发展的趋势主要是两个方向:效率和安全。效率方面,从HTTP1.0的一次请求一个连接,到HTTP1.1的连接复用,到SPDY/HTTP2的多路复用,到QUIC/HTTP3的基于UDP传输,在效率方面越来越高效。安全方面,从HTTP的明文,到HTTP2强制使用TLSv1.2,到QUIC/HTTP3强制使用TLSv1.3,越来越注重数据传输的安全性。总而言之,HTTP协议的发展对用户是友好的,但是对开发者而言却不那么友善。

 An xposed module that disables SSL certificate checking for the purposes of auditing an app with cert pinning- https://github.com/Fuzion24/JustTrustMe
 破解的原理大致是,Hook创建SSLContext等涉及TrustManager相关的方法,将固定的证书移除。Xposed和Magisk。

在VirtualApp中加入Hook代码,然后利用VirtualApp打开目标应用进行抓包
A VirtualHook plugin for HTTPS certificate unpinning- https://github.com/rk700/CertUnpinning
Android application hooking tool based on VirtualApp-  https://github.com/rk700/VirtualHook

> HttpCanary, Android平台HTTPS抓包解决方案及问题分析

Android平台HTTPS抓包解决方案及问题分析- https://juejin.im/post/5cc313755188252d6f11b463
 HttpCanary is a powerful capture and injection tool for the Android platform. It supports multiple protocols such as HTTP, HTTP2, HTTPS and WebSocket.
 A powerful capture and injection tool for the Android platform- https://github.com/MegatronKing/HttpCanary
 https://github.com/MegatronKing/HttpCanary/wiki/Downloads

几乎所有网络数据的抓包都是采用中间人的方式(MITM),包括大家常用的Fiddler、Charles等知名抓包工具,HttpCanary同样是使用中间人的方式进行抓包。
 由于Android系统对SSL重协商是有限支持,所以部分系统版本抓包会失败,表现为网络异常。在Android 8.1以下,SslSocket是完全支持SSL重协商的,但是SSLEngine却是不支持SSL重协商的,而HttpCanary解析SSL/TLS使用的是SSLEngine。在Android 8.1及以上,SSLEngine和SslSocket统一了实现,故是支持SSL重协商的。
所以,如果确认服务器使用了SSL重协商,请使用8.1及以上版本系统进行抓包。

-- CA证书,双向认证
 Android系统将CA证书又分为两种:用户CA证书和系统CA证书。顾明思议,用户CA证书是由用户自行安装的,系统CA证书是由系统内置的,很明显后者更加真实有效。无论是系统CA证书还是用户CA证书,都可以在设置->系统安全->加密与凭据->信任的凭据中查看。
  Android从7.0开始系统不再信任用户CA证书(应用targetSdkVersion >= 24时生效,如果targetSdkVersion < 24即使系统是7.0+依然会信任)。也就是说即使安装了用户CA证书,在Android 7.0+的机器上,targetSdkVersion >= 24的应用的HTTPS包就抓不到了。
  随着GooglePlay开始限制targetSdkVersion,现在要求其必须>=26,2019年8月1日后必须>=28,国内应用市场也开始逐步响应这种限制。绝大多数App的targetSdkVersion都将大于24了,也就意味着抓HTTPS的包越来越难操作了。
  推荐使用平行空间,相比部分开源的VirtualApp,平行空间运行得更加稳定。但必须注意平行空间的版本4.0.8625以下才是targetSdkVersion < 24,别安装错了。当然,HttpCanary的设置中是可以直接安装平行空间的。

-- 关于双向认证的原理:
  首先,双向认证需要Server支持,Client必须内置一套公钥证书 + 私钥。在SSL/TLS握手过程中,Server端会向Client端请求证书,Client端必须将内置的公钥证书发给Server,Server验证公钥证书的真实性。
  注意,这里的内置的公钥证书有区别于前面第5点的公钥证书固定,双向认证内置的公钥证书+私钥是额外的一套,不同于证书固定内置的公钥证书。
  如果一个Client既使用证书固定,又使用双向认证,那么Client端应该内置一套公钥证书 + 一套公钥证书和私钥。第一套与Server端的公钥证书相同,用于Client端系统校验与Server发来的证书是否相同,即证书固定;第二套SSL/TLS握手时公钥证书发给Server端,Server端进行签名校验,即双向认证。
  用于双向认证的公钥证书和私钥代表了Client端身份,所以其是隐秘的,一般都是用.p12或者.bks文件+密钥进行存放。由于是内置在Client中,存储的密钥一般也是写死在Client代码中,有些App为了防反编译会将密钥写到so库中,比如S匿名社交App,但是只要存在于Client端中都是有办法提取出来的。

-- 非HTTP协议抓包
如果确认了以上几点,HttpCanary仍然抓包失败,那么极有可能使用的并非是HTTP协议。比如像微信聊天,视频直播等,使用的就不是HTTP协议,这种情况需要使用其它的抓包工具,比如Packet Capture这种直接解析TCP/UDP协议的,但是往往非HTTP协议的数据包即使抓到了也无法解析出来,因为大概率都是二进制而非文本格式的。

你可能感兴趣的:(有线/无线网络/网络协议)