手机抓包软件的原理区别

txthinking
2 Jun 2021
cloud@txthinking.com

背景

最新常收到邮件询问 [mitmproxy helper][Wireshark Helper] 和普通抓包软件有什么区别.

这两款软件诞生的起因是, 从事网络工作的一个朋友觉得目前的手机抓包软件不够'彻底', 导致很多包抓不到, 于是一起花时间根据网络工作者常工作的场景做了两款软件.

于是在这里统一解释下.

基础知识

TCP/IP四层模型

应用层 | 比如 HTTP协议
传输层 | 比如 TCP/UDP协议
网络层 | 比如 IPv4/IPv6包
链路层 | 比如 以太网

系统代理和虚拟网卡

咱们先搞清楚两个概念, 一个是系统代理, 一个是虚拟网卡.
咱们先从桌面系统举例.

系统代理

这个概念大家想必大家都比较熟悉, 比如macOS, 在 系统偏好->网络->高级->代理 里就可以修改系统代理,

但是在这里设置代理后, 应用软件会不会走这个代理完全取决于应用软件自己, 比如Chrome浏览器会走这儿设置的代理, 而Terminal等很多应用就选择无视这个代理.

这里其实工作在应用层, 在这里拦截的话, 抓包工具只需要处理应用层的协议包即可.

虚拟网卡

虚拟网卡的原理和就和普通网卡一样, 在这里它工作在最底层的链路层.

如果我们将所有包都路由到这个虚拟网卡上, 这也就意味着应用软件都会经过它, 不再取决于应用软件想不想了.

在这里拦截, 就比较麻烦, 需要关心整个TCP/IP栈, 首先要处理网络层的IP协议包, 再将IP包转换为网络层的TCP/UDP协议, 再将TCP/UDP协议对应到应用层协议处理.

手机端

我们前面说了系统代理虚拟网卡的区别, iOS和Android也有相同的概念, 即抓包工具可能在系统代理拦截, 也可能在虚拟网卡级别拦截.

iOS端

iOS端抓包需要使用Network Extension技术, 意味着手机顶部会出现VPN标识.

是不是出现了VPN标识就意味着[一定]是在[虚拟网卡]层拦截?

答案: 不是.

因为iOS端用程序设置系统代理也需要使用Network Extension技术,

所以出现了VPN标识, 抓包工具仍可能是在[系统代理]层进行拦截的,

有些抓包工具作者会在简介里说明在哪一层进行拦截的, 没写的就需要询问下作者了.

TLS解密

先拦截到包再解密, TLS解密的原理(很多协议的加密都是使用的TLS加密技术, 比如HTTPS等)就是中间人, 即会需要安装一个根证书到手机系统里.

如果你之前没操作过安装信任根证书, 这里有两个视频 Wireshark Helper Videomitmproxy helper video

  • 一定要仔细观看视频, iOS需要在两个地方进行操作后才生效, 视频是演示的是iOS 14, 不同版本的系统可能操作还略有不同.
  • Android系统还造出了用户证书和系统证书的概念, 要安装到系统证书里需要Root.

是不是安装信任了根证书就[一定]可以解密任何的加密?

如果你了解了加密的原理, 就可以得出不一定结论. 举个例子, 假设客户端和服务端约定一个密码和一个加密算法,

然后客户端将这个密码写到客户端代码里, 需要加密的时候用这个密码加密后发给服务端,

服务端再用相同的密码解密收到的客户端数据, 这个时候只有知道密码和加密算法的人才能解密.

也就是说安装信任了根证书的方式, 中间人可以解密主流的TLS加密, 对于定制的或魔改的加密是无能为力的.

感谢对我的工作的支持

mitmproxy helper

Wireshark Helper