公司到底能不能监控到微信聊天?

数据库2025-11-03 15:39:0565

 

有朋友私信问我一个问题,公司在公司用微信聊天,到底用公司网络,不能监公司能看到聊天内容吗?微信 

坦率地说,以前从来没有分析过微信这类聊天软件,聊天大概率使用私有协议。公司而私有协议在协议分析软件上的到底呈现,一般都是不能监TCP封装一长串字节流,而这些字节流究竟是微信什么内容,协议软件无法给出答案!聊天看看协议分析软件能否看到微信网页版、公司手机APP版的到底聊天内容?

  一、网页版微信 

1.协议分析结果

不知道大家看到“美女好[玫瑰]”哇,不能监这个就是微信协议分析软件分析出来的聊天内容。 

 

2.真实聊天内容 

一摸一样!聊天 

3.实验结论

协议分析软件可以将聊天内容解密出来! 

4.实验分析

网页版微信通常是使用浏览器来与微信服务器通信的,而浏览器多种多样,有Chrome、Firefox、IE等等,要想与不同的厂商浏览器通信,必须使用标准协议,而标准协议在协议分析软件上是可以解开的IT技术网

考虑到网页版的微信,可能会使用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 + 业务层 

官方的口径是,短连接是为了兼容老版本的软件,而长连接完全是私有实现,所以造成Fiddle没有捕获到,毕竟Fiddle只能捕获到HTTP或HTTPS,至于其它的协议压根不在其感兴趣范围!

 于是香港云服务器,使用Wireshark捕获微信长连接的TCP报文,确实捕获到了,再怎么私有实现,总不能长翅膀飞!但是这些TCP报文没有展示的意义,TCP头之后字段全是杂乱无章的,这些都在预料之中!

 MMTLS是什么样的存在?

MMTLS是TLS1.3版本的改良版,或者说简化版。在微信决定使用MMTLS之前,TLS1.3版本长期逗留在草案状态,没有形成一个最终标准。于是微信决定采用TLS1.3草案中的标准,大刀阔斧砍掉客户端认证这个环节,只保留服务器认证。

 手机微信APP里预置了微信服务器的两件秘密武器:

 ECDSA公钥  静态ECDH公钥 

ECDSA公钥是干嘛的?

ECDSA用于验证服务器的真实身份,任何来自于服务器的MMTLS协商报文,只要使用ECDSA私钥签名的,ECDSA公钥都可以解密。换句话说,如果签名部分可以使用ECDSA公钥解密,那就证明是真正微信服务器发送的! 

在微信的私有实现里,不需要CA,微信客户端凭借预置的ECDSA公钥完成服务器的认证!

 静态ECDH公钥又是干嘛的?

如果微信客户端想最小延迟(0 RTT)发消息,可以直接生成自己的ECDH私钥、公钥、Nonce,再加上服务器预置的Nonce。就可以单方面计算出Pre-Master Key ,Master Key , Session Key,进而将消息加密发出。 

微信服务器收到消息的同时,一同收到的还有客户端的ECDH公钥、客户端Nonce,服务器用自己的ECDH私钥、预留在客户端的Nonce,这四个参数,计算出可以解密消息的Key,并将消息解密出。 

MMTLS没有给消息增加额外的延迟,称这种通信为 0 RTT通信。

 由于微信客户端,强制使用服务器的ECDSA公钥来认证服务器的身份,所以Fiddle压根没法欺骗微信APP。如果Fiddle强制替换,微信客户端会放弃连接服务器,造成的后果就是微信永远登录不了服务器! 

微信APP之所以可以实现私有协议,是因为服务器、客户端都是微信的代码,再怎么私有,理解起来也没有任何障碍!

 三、最终结论

 微信网页版:使用公司网络,公司可以看到聊天内容,无论使用的是公司电脑还是个人电脑。但是如果使用4G网络,流量没走公司,公司自然也无法看到聊天内容。  微信手机版:使用私有协议通信,手机APP嵌入了服务器的公钥,APP只认与这个公钥一一对应的私钥签名。使用其它私钥签名的一概不认,所以无法欺骗微信APP。使用微信手机版聊天是安全的,无论是使用公司网络还是4G网络,公司都无法看到聊天内容。 
本文地址:http://www.bzve.cn/html/380b65098969.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

热门文章

全站热门

OnePlus5手机(性能强劲,拍照出色,价格亲民,OnePlus5是你的不二选择)

MegaCli这个命令可以用来监控raid状态、磁盘状况等,最近上了一批ubuntu系统跑openstack,问题是MegaCli在官网上只有rpm格式的包,没有deb的包,但是还是有办法解决的,rpm包也是可以在debian&&ubuntu上安装的。 可以到下列连接下载最新的zip文件包:http://www.lsi.com/Search/Pages/results.aspx k=MegaCLI&r=productfacet%3D%22AQxNZWdhUkFJRCBTQVMMcHJvZHVjdGZhY2V0AQJeIgIiJA%3D%3D%22%20os%3D%22AQVMaW51eAJvcwEBXgEk%22复制代码代码如下: 安装完成后执行如下命令:复制代码代码如下: 进入 8.00.48_Linux_MegaCLI.zip包所在的目录,执行如下命令:复制代码代码如下: MegaCli不但能查询raid的状态,还能设置raid的状态,所以还是由管理员掌握比较好,这样就安装完毕了。下面来列举几个常用的用法:1.查看所有物理磁盘信息复制代码代码如下:Adapter #0Enclosure Number: 1复制代码代码如下:Adapter 0-VD 0: Cache Policy:WriteBack, ReadAheadNone, Direct复制代码代码如下:Adapter 0-VD 1: Cache Policy:WriteBack, ReadAheadNone, Direct复制代码代码如下:Adapter 0-VD 0: Cache Policy:WriteBack, ReadAheadNone, Direct复制代码代码如下:Adapter 0-VD 0: Cache Policy:WriteBack, ReadAheadNone, Direct复制代码代码如下:Adapter 0-VD 0: Disk Write Cache : Disks Default复制代码代码如下:or复制代码代码如下:or复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:或者以动态可视化文字界面显示复制代码代码如下:复制代码代码如下:或者以动态可视化文字界面显示复制代码代码如下:复制代码代码如下:也可以指定为某个阵列的专用热备复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:或者以动态可视化文字界面显示复制代码代码如下:MegaCli -PDRbld -ProgDsply -PhysDrv [1:5] -a0

在之前的文章中, 我们讨论过如何在Linux服务器安装各种各样的打印机(当然也包括网络扫描仪)。今天我们将来处理另一端:如何通过桌面客户端来访问网络打印机/扫描仪。网络环境 在这个安装教程中,我们的服务器(Debian Wheezy 7.2版本)的IP地址是192.168.0.10,我们的客户端(Ubuntu 12.04版本)的IP地址是192.168.0.105.注意这两台机器是在同一个网段(192.168.0.0/24).假如我们想允许打印机访问其它网段,我们需要在服务器上修改cupsd.conf文件的以下部分: Order allow,deny Allow localhost Allow from XXX.YYY.ZZZ.*(在上述例子中,我们授予打印机从本地或者任何系统能够访问打印机,这些系统的IPv4地址以XXX.YYY.ZZZ开始。为了验证哪些打印机可以在我们的服务器上适用,我们也可以在服务器上使用lpstat命令,或者浏览网页https://192.168.0.10:631/printers page.root@debian:~# lpstat -a EPSON_Stylus_CX3900 accepting requests since Mon 18 Aug 2014 10:49:33 AM WARSTPDF accepting requests since Mon 06 May 2013 04:46:11 PM WARSTSamsungML1640Series accepting requests since Wed 13 Aug 2014 10:13:47 PM WARST在Ubuntu桌面安装网络打印机 在我们的Ubuntu 12.04的客户端,我们将打开Printing菜单(Dash ->Printing).你会注意到在其它发行版中,这个名字也许会有一点差别(例如会叫做Printers 或者 Print & Fax):还没有打印机添加到我们的客户端:下面是在Ubuntu桌面客户端安装一台网络打印机的一些步骤。1) “Add”按钮将弹出 New Printer 菜单。我们将选择Network printer ->Find Network Printer并输入我们服务器的IP地址,接着点击Find:2) 在最下面我们将会看到可使用的打印机的名称。我们来选择这台三星打印机并按Forward:3) 我们将会被要求填写一些关于我们打印机的信息。当我们输入完成时,将点击 Apply按钮。4) 我们接下来将被询问是否打印一张测试页。让我们点击Print test page吧:这个打印任务将被创建为本地id 2:5)适用我们服务器上的CUPS网络借口,我们可以观察到打印任务已经提交成功了(打印机 ->SamsungML1640系列 ->显示完成任务):我们也可以通过在打印机服务器上运行以下命令显示同样信息: root@debian:~# cat /var/log/cups/page_log | grep -i samsung SamsungML1640Series root 27 [13/Aug/2014:22:15:34 -0300] 1 1 - localhost Test Page - -SamsungML1640Series gacanepa 28 [18/Aug/2014:11:28:50 -0300] 1 1 - 192.168.0.105 Test Page - -SamsungML1640Series gacanepa 29 [18/Aug/2014:11:45:57 -0300] 1 1 - 192.168.0.105 Test Page - -这个page_log日志显示每一页被打印过的信息,只包括哪些用户发送这些打印任务,打印日期&时间,以及客户端的IPv4地址。要安装Epson喷墨和PDF打印机,我们只需重复第1-5的步骤即可,并每一次选择左边的打印队列。例如,在下图中选择PDF打印机:然而,请注意到根据CUPS-PDF 文档中,根据默认:PDF文件将会被放置在打印作业的所有者命名的子目录内。在这个案例中,打印作业的所有者不能被识别(i.e.不会存在服务器中)输出的内容被放置在匿名操作的文件中。这些默认的文件夹可以通过改变在/etc/cups/cups-pdf目录中的Out值和AnonDirName变量来修改。这里,${HOME}被扩展到用户的家目录中:Out ${HOME}/PDFAnonDirName /var/spool/cups-pdf/ANONYMOUS网络打印实例 实例 #1 从Ubuntu12.04中打印,通常在本地用gacanepa(具有相同名字存在打印机服务器上)。打印到PDF打印机之后,让我们来检查打印机服务器上的/home/gacanepa/PDF目录下的内容:root@debian:~# ls -l /home/gacanepa/PDF total 368-rw------- 1 gacanepa gacanepa 279176 Aug 18 13:49 Test_Page.pdf-rw------- 1 gacanepa gacanepa 7994 Aug 18 13:50 Untitled1.pdf-rw------- 1 gacanepa gacanepa 74911 Aug 18 14:36 Welcome_to_Conference_-_Thomas_S__Monson.pdf这个PDF文件被创建时的,权限已经设置为600(-rw-------),这意味着只有打印任务的所有者(在这个例子中是gacanepa )可以访问它们。我们可以通过修改the /etc/cups/cups-pdf.conf文件UserUMask变量的值来改变这种行为。例如,0033的umask值将可以使PDF打印者以及其它所有者拥有创建文件的权限,但是只读权限也会赋予给其它所有者。 root@debian:~# grep -i UserUMask /etc/cups/cups-pdf.conf ### Key: UserUMaskUserUMask 0033对于那些不熟悉umask(有名用户文件创建模式掩码),它作为一组可以用于控制那些为新文件创建时修改默认权限。给予特定的umask值,在计算最终文件的许可权限时,在文件基本权限(0666)和umask的单项按位补码之间进行按位布尔 AND 运算。因此,假如设置一个umask值为0033,那么新文件默认的权限将不是(0033)AND 0666 = 644的值(文件拥有者具有读/写/执行的权限,其他人拥有只读权限)。实例 #2 在Ubuntu12.04执行打印,本地登录用户为jdoe(同样的帐号名称但是服务器上是不存在的)。 root@debian:~# ls -l /var/spool/cups-pdf/ANONYMOUS total 5428-rw-rw-rw- 1 nobody nogroup 5543070 Aug 18 15:57 Linux_-_Wikipedia__the_free_encyclopedia.pdf这个PDF被创建时赋予的权限是666(-rw-rw-rw-),这意味着每个人都可以访问它们。我们可以通过编辑在/etc/cups/cups-pdf.conf文件中的AnonUMask值来改变这种行为。在这一点上,你也许会疑惑:为什么同样安装一台网络打印机,大多数(当然不是全部)当前的Linux桌面发行版都会内置一个打印到文件的功能来允许用户动态创建PDF文件?使用一台网络PDF打印机有以下好处:一个网络打印机(任何类型的)允许你直接从命令行直接打印,无需首先打开文件。在其它操作系统上安装一个网络客户端,一个PDF网络打印机备件,于是系统管理员不必再单独需要安装PDF创建者实用程序(也避免了最终用户安装这些工具存在的风险)。网络PDF打印机允许通过配置权限直接打印一个网络共享,如我们所见的例子。在Ubuntu桌面安装一个网络扫描仪 这里是通过Ubuntu桌面客户端安装和访问一台网络扫描仪的一些步骤。假设网络扫描仪服务器已经启动并运行所述here.1)让我们第一步来检查在我们的Ubuntu客户端主机上是否存在一台可用的扫描仪。没有先前的安装,你将会看到信息提示没有识别到扫描仪. $ scanimage -L2) 现在我们需要启用saned进程,用来预装Ubuntu桌面。要启用它,我们需要编辑/etc/default/saned文件,并设置RUN变量为yes:$ sudo vim /etc/default/saned # Set to yes to start sanedRUN=yes3) 让我们编辑/etc/sane.d/net.conf文件,并在扫描仪安装后添加服务器IP地址:4) 重启saned进程:$ sudo service saned restart 5) 现在让我们来看看扫描仪是否可用: 现在我们可以打开Simple Scan(或者其它扫描工具)并开始扫描文件。我们可以旋转,修剪,和保存生成的图片:总结 拥有一或多台网络打印机或扫描仪在任何办公和家庭网络中都是非常方便适用的,并同时提供了许多好处。例举如下:多用户(从不同的平台/地方)都能够向打印机发送打印作业的队列。由于硬件共享达到了节约成本和维护的作用。我希望该文可以帮助你更充分地利用这些有点。

先来介绍一下硬盘分区的基本知识:物理介质 The physical media逻辑卷管理说明不幸的是,该磁盘工具不支持LVM的大多数强大的特性,没有管理卷组、扩展分区,或者创建快照等选项。对于这些操作,你可以通过终端来实现,但是没有那个必要。相反,你可以打开Ubuntu软件中心,搜索关键字LVM,然后安装逻辑卷管理工具,你可以在终端窗口中运行sudo apt-get install system-config-lvm命令来安装它。安装完之后,你就可以从dash上打开逻辑卷管理工具了。这个图形化配置工具是由红帽公司开发的,虽然有点陈旧了,但却是唯一的图形化方式,你可以通过它来完成上述操作,将那些终端命令抛诸脑后了。比如说,你想要添加一个新的物理卷到卷组中。你可以打开该工具,选择未初始化条目下的新磁盘,然后点击“初始化条目”按钮。然后,你就可以在未分配卷下找到新的物理卷了,你可以使用“添加到现存卷组”按钮来将它添加到“ubuntu-vg”卷组,这是Ubuntu在安装过程中创建的卷组。要扩展逻辑分区到物理空间,你可以在逻辑视图下选择它,点击编辑属性,然后修改大小来扩大分区。你也可以在这里缩小分区。system-config-lvm的其它选项允许你设置快照和镜像。对于传统桌面而言,你或许不需要这些特性,但是在这里也可以通过图形化处理。记住,你也可以使用终端命令完成这一切。

神舟战神K660D-i7D2(探索神舟战神K660D-i7D2的独特之处,解锁极致游戏性能)

打造纯净电脑系统的完全指南(一步步教你如何自己制作纯净高效的电脑系统)

PXE概述复制代码代码如下:作如下修改:复制代码代码如下:保存文件并退出。这将设置其 IP 地址为“192.168.1.20”。然后重新启动网络服务。复制代码代码如下:安装 DHCP, TFTP 和 NFS:复制代码代码如下:配置 DHCP 服务:复制代码代码如下:作如下修改:复制代码代码如下:保存 (Ctrl + o) 并退出 (Ctrl + x) 文件.2、编辑 “/etc/dhcp3/dhcpd.conf” 文件:复制代码代码如下:作如下修改:复制代码代码如下:保存文件并退出。3、启动 DHCP 服务.配置 TFTP 服务器:复制代码代码如下:作如下修改:复制代码代码如下:保存文件并退出。2、编辑 “/etc/default/tftpd-hpa” 文件。复制代码代码如下:作如下修改:复制代码代码如下:保存文件并退出。3、 使用 xinetd 让 boot 服务在每次系统开机时自动启动,并启动tftpd服务。复制代码代码如下:4、检查状态。复制代码代码如下:它将如下所示:复制代码代码如下:配置 PXE 启动文件复制代码代码如下:设置 PXELINUX 配置文件复制代码代码如下:作如下修改:复制代码代码如下:保存文件并退出。编辑 “/var/lib/tftpboot/pxelinux.cfg/pxe.conf” 文件。复制代码代码如下:作如下修改:复制代码代码如下:保存文件并退出。为 PXE 服务器添加 Ubuntu 14.04 桌面启动镜像复制代码代码如下:注意: 下载用的 URL 可能会改变,因为 ISO 镜像会进行更新。假如上面的网址无法访问,看看这个网站,了解最新的下载链接。挂载 ISO 文件,使用以下命令将所有文件复制到 TFTP文件夹中:复制代码代码如下:将导出的 ISO 目录配置到 NFS 服务器上复制代码代码如下:作如下修改:复制代码代码如下:保存文件并退出。为使更改生效,输出并启动 NFS 服务。复制代码代码如下:现在,你的 PXE 服务器已经准备就绪。配置网络引导 PXE 客户端PXE 客户端可以是任何支持 PXE 网络引导的计算机系统。现在,你的客户端只需要在系统的 BIOS 中设置 “从网络引导(Boot From Network)” 选项就可以启动并安装 Ubuntu 14.04 桌面。现在准备出发吧 - 用网络引导启动你的 PXE 客户端计算机,你现在应该看到一个子菜单,显示了我们创建的 Ubuntu 14.04 桌面的菜单项。结论配置使用 PXE 服务器从网络启动安装能提高效率和节省时间。你可以在本地网络中同时安装数百个客户端。所有你需要的只是一个 PXE 服务器和能启动 PXE 的客户端。试试吧~

别克换挡电脑维修教程(轻松掌握别克换挡电脑的维修方法)

热门文章

友情链接

滇ICP备2023006006号-39