黑客只要知道微信号就能监控 黑客只要知道对方微信号就能监控

这类聊天软件大概率使用私有协议 。而私有协议在协议分析软件上的呈现,一般都是TCP封装一长串字节流,而这些字节流究竟是什么内容,协议软件无法给出答案!看看协议分析软件能否看到网页版、手机APP版的聊天内容?不知道大家看到“美女好”哇,这个就是协议分析软件分析出来的聊天内容 。

黑客只要知道微信号就能监控 黑客只要知道对方微信号就能监控

文章插图

黑客只要知道微信号就能监控 黑客只要知道对方微信号就能监控

文章插图
真实聊天内容
结果二者一摸一样!
1、实验结论
协议分析软件可以将聊天内容解密出来!
2、实验分析
网页版通常是使用浏览器来与服务器通信的,而浏览器多种多样,有Chrome、Firefox、IE等等,要想与不同的厂商浏览器通信,必须使用标准协议,而标准协议在协议分析软件上是可以解开的 。考虑到网页版的,可能会使用SSL/TLS加密聊天内容,需要用Fiddle作为中间人,用Fiddle伪造的证书来欺骗浏览器,让浏览器误以为Fiddle就是服务器 。Fiddle再与服务器建立SSL/TLS加密通道,传输聊天内容 。
黑客只要知道微信号就能监控 黑客只要知道对方微信号就能监控

文章插图
浏览器与Fiddle建立SSL/TLS加密通道Fiddle与服务器建立SSL/TLS加密通道Fiddle做为二传手,将消息在两条通道上进行传递,先解密,再加密Fiddle需要伪造服务器证书电脑需要安装、信任Fiddle自签名的根证书
3、手机版
黑客只要知道微信号就能监控 黑客只要知道对方微信号就能监控

文章插图
协议分析结果
手机版没有使用TLS + HTTP= HTTPS的加密传输方式,而是使用了HTTP的传输方式,如上图所示 。每一个报文大概是这个样子的:
黑客只要知道微信号就能监控 黑客只要知道对方微信号就能监控

文章插图
除了HTTP 报文头(HTTP Header)是明文的,HTTP报文体(HTTP Body)看起来是一堆杂乱无章的字节流 。没有找到聊天的任何内容 。最最滑稽的是,当发送聊天内容时,Fiddle没有任何反应!意味着发送聊天内容的报文既不是HTTP,也不是HTTPS,那很可能是TCP、或UDP协议原始(Raw)封装 。为了确认到底是TCP还是UDP传输报文,特意去了研发公众号去确认,得到的确认是采用TCP传输 。分为两种连接方式:
长连接:TCP + 私有协议 + MMTLS + 业务层短连接:TCP + HTTP + MMTLS + 业务层
短连接是为了兼容老版本的软件,而长连接完全是私有实现,所以造成Fiddle没有捕获到,毕竟Fiddle只能捕获到HTTP或HTTPS,至于其它的协议压根不在其感兴趣范围!于是,使用Wireshark捕获长连接的TCP报文,确实捕获到了,再怎么私有实现,总不能长翅膀飞!但是这些TCP报文没有展示的意义,TCP头之后字段全是杂乱无章的,这些都在预料之中!
3、MMTLS是什么样的存在?
MMTLS是TLS1.3版本的改良版,或者说简化版 。在决定使用MMTLS之前,TLS1.3版本长期逗留在草案状态,没有形成一个最终标准 。于是决定采用TLS1.3草案中的标准,大刀阔斧砍掉客户端认证这个环节,只保留服务器认证 。
手机APP里预置了服务器的两件秘密武器:
ECDSA公钥静态ECDH公钥
4、ECDSA公钥是干嘛的?
ECDSA用于验证服务器的真实身份,任何来自于服务器的MMTLS协商报文,只要使用ECDSA私钥签名的,ECDSA公钥都可以解密 。换句话说,如果签名部分可以使用ECDSA公钥解密,那就证明是真正服务器发送的! 在的私有实现里,不需要CA,客户端凭借预置的ECDSA公钥完成服务器的认证!
5、静态ECDH公钥又是干嘛的?
如果客户端想最小延迟(0 RTT)发消息,可以直接生成自己的ECDH私钥、公钥、Nonce,再加上服务器预置的Nonce 。就可以单方面计算出Pre-Master Key ,Master Key ,Session Key,进而将消息加密发出 。