公司能不能监控到微信聊天?
python之禅
共 2096字,需浏览 5分钟
·
2021-05-08 22:11
最近有朋友私信问我一个问题,在公司用微信聊天,用公司网络,公司能看到聊天内容吗?
坦率地说,以前从来没有分析过微信这类聊天软件,大概率使用私有协议。而私有协议在协议分析软件上的呈现,一般都是TCP封装一长串字节流,而这些字节流究竟是什么内容,协议软件无法给出答案!看看协议分析软件能否看到微信网页版、手机APP版的聊天内容? 网页版微信 协议分析结果不知道大家看到“美女好[玫瑰]”哇,这个就是协议分析软件分析出来的聊天内容。
真实聊天内容
一摸一样!
实验结论协议分析软件可以将聊天内容解密出来! 实验分析网页版微信通常是使用浏览器来与微信服务器通信的,而浏览器多种多样,有Chrome、Firefox、IE等等,要想与不同的厂商浏览器通信,必须使用标准协议,而标准协议在协议分析软件上是可以解开的。
考虑到网页版的微信,可能会使用SSL/TLS加密聊天内容,需要用Fiddle作为中间人,用Fiddle伪造的证书来欺骗浏览器,让浏览器误以为Fiddle就是微信服务器。Fiddle再与微信服务器建立SSL/TLS加密通道,传输聊天内容。
- 浏览器与Fiddle建立SSL/TLS加密通道
- Fiddle与微信服务器建立SSL/TLS加密通道
- Fiddle做为二传手,将消息在两条通道上进行传递,先解密,再加密
- Fiddle需要伪造微信服务器证书
- 电脑需要安装、信任Fiddle自签名的根证书
手机版微信
协议分析结果
微信手机版没有使用TLS + HTTP= HTTPS的加密传输方式,而是使用了HTTP的传输方式,如上图所示。 每一个报文大概是这个样子的:
除了HTTP 报文头(HTTP Header)是明文的,HTTP报文体(HTTP Body)看起来是一堆杂乱无章的字节流。 没有找到聊天的任何内容。最最滑稽的是,当发送聊天内容时,Fiddle没有任何反应! 意味着发送聊天内容的报文既不是HTTP,也不是HTTPS,那很可能是TCP、或UDP协议原始(Raw)封装。 为了确认到底是TCP还是UDP传输报文,特意去了微信研发公众号去确认,得到的确认是采用TCP传输。分为两种连接方式:
- 长连接:TCP + 私有协议 + MMTLS + 业务层
- 短连接:TCP + HTTP + MMTLS + 业务层
MMTLS是TLS1.3版本的改良版,或者说简化版。在微信决定使用MMTLS之前,TLS1.3版本长期逗留在草案状态,没有形成一个最终标准。于是微信决定采用TLS1.3草案中的标准,大刀阔斧砍掉客户端认证这个环节,只保留服务器认证。 手机微信APP里预置了微信服务器的两件秘密武器:
- ECDSA公钥
- 静态ECDH公钥
- 微信网页版,使用公司网络,公司可以看到聊天内容,无论使用的是公司电脑还是个人电脑。
- 微信网页版,使用4G网络,流量没走公司,公司自然也无法看到聊天内容。
- 微信手机版,使用私有协议通信,手机APP嵌入了服务器的公钥,APP只认与这个公钥一一对应的私钥签名。使用其它私钥签名的一概不认,所以无法欺骗微信APP。使用微信手机版聊天是安全的,无论是使用公司网络还是4G网络,公司都无法看到聊天内容。
评论
ReactNative-Weixin仿微信聊天 APP
使用 reactnative和socket.io开发的模仿微信聊天的app,后台使用node和moogodb,目前还在开发中。已完成的功能登录注册通讯录两人文字聊天下拉获取聊天历史记录未读消息提示正在
ReactNative-Weixin仿微信聊天 APP
0
20行代码搭建微信聊天机器人
介绍了如何用20行Python搭建一个微信聊天机器人,并讨论了其可能的拓展方向。
引子
在之前一边文章中介绍客服机器人:AI实战:搭建客服机器人,本文将在此基础上制作一个聊天机器人,前一篇文章的重点在于问答,而本文的重点在于如何接入微信。
环境配置
实现一个微信机器人,最重要的有两件事:
* 接入微信
* 智能回复
第一个功能,可以借助wxpy;而对于第二个功能,则使用之前已经实践过的ChatterBot。在开源社区有不少接入微信的库,而开源的聊天机器人也有很多,之所以选择二者是因为他们的文档都非常齐全,因此本文也不会对如何使用这两个库做过多讲解。
注意!Python版本要求3.5,wxpy和ChatterBot
V大师在一号线
0