图片来自Pexels坦白说,我之前没有分析过微信之类的聊天软件,很可能使用了私有协议。私有协议在协议分析软件上的呈现一般是TCP对一长串字节流的封装,而这些字节流是什么,协议软件无法给出答案!看看协议分析软件能不能看到网页版、手机APP版、电脑版的微信聊天内容?1.网页版微信①不知道协议解析结果。你看“美女真好[玫瑰]”哇,这是协议分析软件分析出来的聊天内容。真实聊天内容:一模一样!②实验结论协议分析软件可以解密聊天内容!③实验分析网页版微信通常使用浏览器与微信服务器进行通信,浏览器种类繁多,如Chrome、Firefox、IE等,为了与不同厂商的浏览器进行通信,必须使用标准协议,标准协议可以通过协议分析软件破译。考虑到网页版微信可能会使用SSL/TLS加密聊天内容,需要使用Fiddle作为中介,利用Fiddle伪造的证书来欺骗浏览器,让浏览器误认为Fiddle是微信服务器。Fiddle与微信服务器建立SSL/TLS加密通道传输聊天内容:浏览器与Fiddle建立SSL/TLS加密通道。Fiddle与微信服务器建立SSL/TLS加密通道。作为设置器,Fiddle在两个通道上传输消息,先解密再加密。Fiddle需要伪造微信服务器证书。电脑需要安装并信任Fiddle的自签名根证书。2、微信手机版协议分析结果:微信手机版没有使用TLS+HTTP=HTTPS的加密传输方式,而是使用HTTP传输方式,如上图所示。每条消息看起来大致是这样的:除了HTTP头(HTTPHeader)是纯文本,HTTP消息体(HTTPBody)看起来就像一堆杂乱无章的字节流。找不到聊天内容。最搞笑的是,发送聊天内容时,Fiddle没有任何反应!意思是发送聊天内容的消息既不是HTTP也不是HTTPS,很可能是TCP,或者UDP协议原始(Raw)封装。为了确认消息是TCP传输还是UDP传输,我去微信研发公众号确认,确认是TCP传输。分为两种连接方式:长连接:TCP+私有协议+MMTLS+业务层短连接:TCP+HTTP+MMTLS+业务层官方口径是短连接是为了兼容老版本软件,长连接是完全私有的。因此,Fiddle没有捕捉到它。毕竟Fiddle只能抓取HTTP或者HTTPS。至于其他的协议,不在它的兴趣范围之内!于是,用Wireshark抓取微信长连接的TCP报文,果然抓到了。无论私下如何实施,你都无法用翅膀飞翔!但是这些TCP报文没有显示的意义,而且TCP头后面的字段都是乱七八糟的,这是意料之中的!①MMTLS是一种怎样的存在?MMTLS是TLS1.3的改进版本,或者说简化版。在微信决定使用MMTLS之前,TLS1.3版本长期处于草案状态,没有形成最终标准。于是微信决定采用TLS1.3草案中的标准,大刀阔斧砍掉客户端认证环节,只保留服务端认证。手机微信APP中预置了微信服务器的两大秘密武器:ECDSA公钥StaticECDHpublickey②ECDSA公钥有什么用?ECDSA用于验证服务器的真实身份。任何来自服务器的MMTLS协商消息,只要是用ECDSA私钥签名的任何东西都可以用ECDSA公钥解密。也就是说,如果签名部分可以用ECDSA公钥解密,就证明是真实的微信服务器发送的!在微信的私有实现中,不需要CA,微信客户端使用预设的ECDSA公钥完成服务端的认证!③静态ECDH公钥有什么用?如果微信客户端想以最小延迟(0RTT)发送消息,可以直接生成自己的ECDH私钥、公钥、Nonce,再加上服务端预设的Nonce。您可以单方计算出Pre-MasterKey、MasterKey和SessionKey,然后加密发送消息。微信服务器收到消息的同时,也会收到客户端的ECDH公钥和客户端的Nonce。服务器使用自己的ECDH私钥和客户端保留的Nonce。这四个参数用于计算消息的解密值。密钥,并解密消息。MMTLS不向消息添加额外的延迟,将此通信称为0RTT通信。由于微信客户端被强制使用服务端的ECDSA公钥来验证服务端的身份,Fiddle根本无法欺骗微信APP。如果强行更换Fiddle,微信客户端将放弃连接服务器,后果是微信永远无法登录服务器!微信APP之所以能实现私有协议,是因为服务端和客户端都是微信的代码,再私有,理解起来也没有障碍!3、电脑版微信只提到网页版微信和手机APP微信,没有提到电脑版微信。老板可以用电脑版微信监控员工的聊天内容吗?答案揭晓:没有请放心大胆使用!大家的小心思,早就被微信之父张小龙识破了。为了最大程度保护您的隐私,只要从腾讯官网下载的电脑版微信和手机APP都是安全、可靠的。我对这个问题做了另一个实验。幸好第三方监控软件无法解密微信聊天记录,实验过程和实验图片省略。这个结论或许还是不能打消部分读者的疑虑。为什么网页版的微信能被监控,而其他两个微信却不能?浏览器之所以能与微信服务器通信并下载聊天内容,是因为客户端和服务器使用行业标准的TLS协议进行通信。在这种通信场景下,腾讯可以完全控制的代码是服务器端,而客户端代码是遥不可及、不可控的。为了能够进行通信,服务器必须严格遵守TLS协议标准。一方面,监控软件欺骗客户端成为微信服务器;另一方面,监控软件将服务端欺骗为微信客户端。这样,监控软件一方面可以解密客户端的消息,一方面可以解密服务器端的消息。②电脑版/手机APP微信客户端代码完全为微信代码;不说服务器的代码,还是微信的代码。由于双方的代码完全被微信掌控,他们想用什么私有加密协议来保护通信安全是他们内部的私事,任何第三方几乎不可能破解。事实上,微信并没有使用任何私有协议,仍然使用TLS协议来加密数据。学生们可能更加困惑。既然使用标准的TLS协议进行通信,为什么第三方就监听不到呢?客户端已经预先嵌入(硬编码)了微信服务器的公钥,客户端持有“一颗红心,两颗Prepare”。如果服务端出示的公钥与客户端预置的公钥完全一致(密码比对成功),客户端立马知道这是官方微信大佬的,连接成功,通讯继续。如果对方出示的公钥与客户端预埋的公钥不同。客户立马意识到,遇到骗子,“打死不说”!他不理会骗子,也不理他。..当然,微信的这种加密传输只是为了防止传输过程中的泄密。毫无疑问,微信服务器仍然可以看到你聊天的明文数据。因此,最好不要在微信上以明文形式传输非常非常隐私的数据。如果一定要传输,可以先将数据加密后再传输。接收方对数据进行解密后,即可得到明文数据。4.最终结论微信网页版,使用公司网络,公司可以看到聊天内容,不管是公司电脑还是个人电脑。网页版微信使用的是4G网络,流量不走公司,公司自然看不到聊天内容。手机版微信使用私有协议进行通信。手机APP嵌入了服务器的公钥,APP只识别这个公钥对应的私钥签名。使用其他私钥的签名不会被识别,所以无法欺骗微信APP。使用手机版微信聊天是安全的,无论是使用公司网络还是4G网络,公司都看不到聊天内容。电脑版微信:公司目前还无法监控聊天内容。作者:车小胖谈网编辑:陶佳龙来源:转载自公众号车小胖谈网(ID:chexiaopangnetwork)
