最新常收到邮件询问 mitmproxy helper 和 Wireshark Helper 和普通抓包软件有什么区别.
这两款软件诞生的起因是, 从事网络工作的一个朋友觉得目前的手机抓包软件不够'彻底', 导致很多包抓不到, 于是一起花时间根据网络工作者常工作的场景做了两款软件.
于是在这里统一解释下.
TCP/IP 四层模型
应用层 | 比如 HTTP协议
传输层 | 比如 TCP/UDP协议
网络层 | 比如 IPv4/IPv6包
链路层 | 比如 以太网
咱们先搞清楚两个概念, 一个是系统代理, 一个是虚拟网卡.
咱们先从桌面系统举例.
这个概念大家想必大家都比较熟悉, 比如 macOS, 在 系统偏好->网络->高级->代理
里就可以修改系统代理,
但是在这里设置代理后, 【应用软件会不会走这个代理完全取决于应用软件自己】, 比如 Chrome 浏览器会走这儿设置的代理, 而 Terminal 等很多应用就选择无视这个代理.
这里其实工作在应用层, 在这里拦截的话, 抓包工具只需要处理应用层的协议包即可.
这也是目前大部分抓包工具实现的方式.
虚拟网卡的原理和就和普通网卡一样, 在这里它工作在最底层的链路层.
如果我们将所有包都路由到这个虚拟网卡上, 这也就意味着应用软件都会经过它, 不再取决于应用软件想不想了.
在这里拦截, 实现起来就比较麻烦, 不是了解个 HTTP 协议就可以的, 需要关心整个 TCP/IP 栈, 首先要处理网络层的 IP 协议包, 再将 IP 包转换为网络层的 TCP/UDP 协议, 再将 TCP/UDP 协议对应到应用层协议处理.
mitmproxy helper 和 Wireshark Helper 目前就是使用了虚拟网卡的方式拦截.
我们前面说了系统代理和虚拟网卡的区别, iOS 和 Android 也有相同的概念, 即抓包工具可能在系统代理拦截, 也可能在虚拟网卡级别拦截.
注意:【App 可以很容易地跳过系统代理】,比如:.connectionProxyDictionary = [AnyHashable : Any]()
mitmproxy helper 和 Wireshark Helper 目前就是使用了虚拟网卡的方式拦截.
iOS 端抓包需要使用 Network Extension 技术, 意味着手机顶部会出现 VPN 标识.
答案: 不是.
因为 iOS 端用程序设置系统代理也需要使用 Network Extension 技术,
所以出现了 VPN 标识, 抓包工具仍可能是在[系统代理]层进行拦截的,
有些抓包工具作者会在简介里说明在哪一层进行拦截的, 没写的就需要询问下作者了.
目前 Android 系统内置 Private DNS(DoT), 以及桌面和手机版 Chrome 提供内置安全 DNS(DoH).
而当开启 DoT 或 DoH 时,无法拦截查询内容以进行针对不同域名使用不同的 DNS 解析的效果.
所以我们要关闭它:
先拦截到包再解密, TLS 解密的原理(很多协议的加密都是使用的 TLS 加密技术, 比如 HTTPS 等)就是中间人, 即会需要安装一个根证书到手机系统里.
如果你之前没操作过安装信任根证书, 这里有两个视频 Wireshark Helper Video 和 mitmproxy helper video.
一定要仔细观看视频, iOS 需要在两个地方进行操作后才生效, 视频是演示的是 iOS 14, 不同版本的系统可能操作还略有不同.
Android 系统还造出了用户证书和系统证书的概念, 要安装到系统证书里需要 Root.
如果你了解了加密的原理, 就可以得出不一定结论. 举个例子, 假设客户端和服务端约定一个密码和一个加密算法,
然后客户端将这个密码写到客户端代码里, 需要加密的时候用这个密码加密后发给服务端,
服务端再用相同的密码解密收到的客户端数据, 这个时候只有知道密码和加密算法的人才能解密.
也就是说安装信任了根证书的方式, 中间人可以解密主流的 TLS 加密, 对于定制的或魔改的加密是无能为力的.
虽然他们的 UI 不是最好看的,但是作为 View 层没有比他们更强的,Wireshark 更是几乎伴随着早期互联网一同发展起来的工具。
有很多 UI 华丽的主流抓包工具对我们来说是不能用的,因为相对于这俩 View 层,无论是协议查看颗粒度还是操作都太简陋了,华不如实。