欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

红芯对chromium,瞩目对zoom。扒扒瞩目客户端。

程序员文章站 2022-07-15 10:17:29
...

0x00 前提

一直以来,人们普遍怀疑瞩目等“国产“云会议系统在界面,功能上有剽窃国外的Zoom.us的嫌疑,但无证据。本文从瞩目的Ubuntu客户端入手,详细证明了瞩目的Zoom血统。

0x01 原因

疫情之下,学校要进行云教学,要安装瞩目客户端。打开官网,兴奋地发现瞩目居然有Linux版本,即所谓自主知识产权的Ubuntu Kylin 版本。于是在尝试安装的同时探索了瞩目客户端。

0x02 环境

我使用的是 Manjaro Linux 19.0, Kernel 5.5, XFCE 4.14 惠普ZBook 15 (intel 集成显卡). 官网安装包zhumu_2.5.360133.0226_amd64.deb

0x03 安装

Manjaro 是基于ArchLinux的,所以先把Debian系的DEB安装包debtap一下。

debtap zhumu_2.5.360133.0226_amd64.deb

得到了ArchLinux的.tar.xz 安装包,然后直接pacman。

sudo pacman -U zhumu-2.5.360133.0226-1-x86_64.pkg.tar.xz

然而,这个包依赖于这个东东。

~/Documents/packages/TXZ » sudo pacman -U zhumu-2.5.360133.0226-1-x86_64.pkg.tar.xz                                      aaa@qq.com
[sudo] password for felix: 
loading packages...
resolving dependencies...
:: There are 6 providers available for opencl-nvidia:
:: Repository extra
   1) opencl-nvidia-340xx  2) opencl-nvidia-390xx  3) opencl-nvidia-418xx  4) opencl-nvidia-430xx  5) opencl-nvidia-435xx
   6) opencl-nvidia-440xx

Enter a number (default=1): 

胡闹!我英特尔的显卡要装Nvidia的OpenCL和utils!
我当时就真的瞎选了一个装上了,还装了Nvidia的Cuda,结果,所有的Qt程序全打不开了!。于是赶紧卸载了这些Nvidia,一切恢复正常。

0x04 探索

无奈之下,试试在不安装Nvidia驱动的情况下手动安装瞩目吧……
先解开tar包。

tar xvf zhumu-2.5.360133.0226-1-x86_64.pkg.tar.xz  

里面opt,usr 两个文件夹,先进usr看看。

~/Documents/packages/TXZ » tree ./usr                                                                                    aaa@qq.com
./usr
├── bin
│   └── zhumu -> /opt/zhumu/ZhumuLauncher
└── share
    ├── applications
    │   └── Zhumu.desktop
    ├── doc
    │   └── zhumu
    │       └── changelog.gz
    ├── mime
    │   └── packages
    │       └── zhumu.xml
    └── pixmaps
        ├── application-x-zhumu.png
        └── Zhumu.png

8 directories, 6 files

这个usr 小巧得tree 都这么简单。./usr/bin 里的瞩目客户端是一个指向/opt/zhumu/ZhumuLauncher的符号链接。剩下的是一些桌面文件,changelog,mime types, 图标之类。
那就去看看/opt/。ls一下发现居然有这么多Qt的文件。我们GTK果然更简单纯洁(Qt大佬勿喷)。ls如下:

audio                  libQt5Gui.so.5.9.6           libQt5Svg.so                     libquazip.so.1
config-dump.sh         libQt5Network.so             libQt5Svg.so.5                   libquazip.so.1.0.0
dingdong1.pcm          libQt5Network.so.5           libQt5Svg.so.5.9                 libturbojpeg.so
dingdong.pcm           libQt5Network.so.5.9         libQt5Svg.so.5.9.6               libturbojpeg.so.0.1.0
Droplet.pcm            libQt5Network.so.5.9.6       libQt5WebChannel.so              platforminputcontexts
egldeviceintegrations  libQt5OpenGL.so              libQt5WebChannel.so.5            platforms
generic                libQt5OpenGL.so.5            libQt5WebChannel.so.5.9          platformthemes
getmem.sh              libQt5OpenGL.so.5.9          libQt5WebChannel.so.5.9.6        Qt
iconengines            libQt5OpenGL.so.5.9.6        libQt5WebEngineCore.so           qt.conf
icudtl.dat             libQt5Positioning.so         libQt5WebEngineCore.so.5         qtdiag
imageformats           libQt5Positioning.so.5       libQt5WebEngineCore.so.5.9       QtGraphicalEffects
leave.pcm              libQt5Positioning.so.5.9     libQt5WebEngineCore.so.5.9.6     QtQml
libfaac1.so            libQt5Positioning.so.5.9.6   libQt5WebEngine.so               QtQuick
libicudata.so          libQt5PrintSupport.so        libQt5WebEngine.so.5             QtQuick.2
libicudata.so.56       libQt5PrintSupport.so.5      libQt5WebEngine.so.5.9           QtWebChannel
libicudata.so.56.1     libQt5PrintSupport.so.5.9    libQt5WebEngine.so.5.9.6         QtWebEngine
libicui18n.so          libQt5PrintSupport.so.5.9.6  libQt5WebEngineWidgets.so        qtwebengine_devtools_resources.pak
libicui18n.so.56       libQt5Qml.so                 libQt5WebEngineWidgets.so.5      QtWebEngineProcess
libicui18n.so.56.1     libQt5Qml.so.5               libQt5WebEngineWidgets.so.5.9    qtwebengine_resources_100p.pak
libicuuc.so            libQt5Qml.so.5.9             libQt5WebEngineWidgets.so.5.9.6  qtwebengine_resources_200p.pak
libicuuc.so.56         libQt5Qml.so.5.9.6           libQt5Widgets.so                 qtwebengine_resources.pak
libicuuc.so.56.1       libQt5Quick.so               libQt5Widgets.so.5               ring.pcm
libQt5Core.so          libQt5Quick.so.5             libQt5Widgets.so.5.9             timezones
libQt5Core.so.5        libQt5Quick.so.5.9           libQt5Widgets.so.5.9.6           translations
libQt5Core.so.5.9      libQt5Quick.so.5.9.6         libQt5X11Extras.so               version.txt
libQt5Core.so.5.9.6    libQt5QuickWidgets.so        libQt5X11Extras.so.5             xcbglintegrations
libQt5DBus.so          libQt5QuickWidgets.so.5      libQt5X11Extras.so.5.9           zcacert.pem
libQt5DBus.so.5        libQt5QuickWidgets.so.5.9    libQt5X11Extras.so.5.9.6         zhumu
libQt5DBus.so.5.9      libQt5QuickWidgets.so.5.9.6  libQt5XcbQpa.so                  ZhumuLauncher
libQt5DBus.so.5.9.6    libQt5Script.so              libQt5XcbQpa.so.5                zhumulinux
libQt5Gui.so           libQt5Script.so.5            libQt5XcbQpa.so.5.9              zhumu.sh
libQt5Gui.so.5         libQt5Script.so.5.9          libQt5XcbQpa.so.5.9.6            zopen
libQt5Gui.so.5.9       libQt5Script.so.5.9.6        libquazip.so                     ZXMPPROOT.cer

有意思的文件有这几个:

  • zhumu: 应该是核心模块
  • ZhumuLauncher: 启动器
  • zhumulinux: 是一个bash脚本,跟日志有关
  • zhumu.sh: 调试器,自带echo说明:

This is debug mode of zhumu client. Once crash, zhumu will generate core dump under this mode.
(这是瞩目客户端的调试模式。如果客户端崩溃了,瞩目会用这个模式取得core dump文件。

看来有时还会Segment fault: Core dumped!啊。
先运行一下./zhumu 试试:

./zhumu

得到了一个错误:

zoom started.
QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled
./zhumu: symbol lookup error: /home/felix/Documents/packages/TXZ/opt/zhumu/imageformats/libqico.so: undefined symbol: _ZdlPvm, version Qt_5

是一个OpenGL错误和符号错误。这不是重点。上面一条信息更有意义:

zoom started

名为“瞩目”核心却是Zoom。真令人想起前几年 红芯浏览器的Chromium核心。
然后运行一下 那个launcher:

./ZhumuLauncher

输出一堆。这里paste一下前面的几行:

ZhumuLauncher started.
cmd line: 
$HOME = /home/felix 
export SSB_HOME="/home/felix/.Zhumu_Cloud_Meetings"; export QSG_INFO=1; export LD_LIBRARY_PATH=/home/felix/Documents/packages/TXZ/opt/zhumu; /home/felix/Documents/packages/TXZ/opt/zhumu/zhumu "" 
zoom started.
Linux Client Version is 2.5.360133.0226
QSG_RENDER_LOOP is 
XDG_CURRENT_DESKTOP = XFCE;   GDMSESSION = xfce
Graphics Card Info:: 00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
Zoom package arch is 64bit, runing OS arch is x86_64
AppIconMgr::systemDesktopName log Desktop Name: xfce 
qt.scenegraph.general: QSG: basic render loop
qt.scenegraph.general: Using sg animation driver
libpng warning: iCCP: known incorrect sRGB profile
qt.scenegraph.general: texture atlas dimensions: 1024x512

没错,第5行,第10行:

zoom started.
Zoom package arch is 64bit, runing OS arch is x86_64

进一步加深了瞩目与zoom的血缘关系。
这个运行是正确的,看图:
红芯对chromium,瞩目对zoom。扒扒瞩目客户端。
登录,完全正常使用。
红芯对chromium,瞩目对zoom。扒扒瞩目客户端。

0x05 安装(part B)

不知道你是否发现了一个事实:
我没有安装那些瞩目依赖的Nvidia包,但是瞩目却能正常使用!

现在手动安装。先把包里的opt里的zhumu文件夹复制到/opt/

cp -r ./opt/zhumu /opt/

然后用MenuLibre编辑一个desktop文件,不多叙述了。
红芯对chromium,瞩目对zoom。扒扒瞩目客户端。
在menu里启动,登录,正常使用。

0x06 继续探索

为此,我下载了zoom。PS:人家本来就有Arch安装包,根本不用debtap。
解压。

tar xvf zoom_x86_64.pkg.tar.xz

然后对比一下文件名。

ls ./zhumuExtracted/opt/zhumu/ > 1.txt
ls ./zoomExtracted/opt/zoom/ > 2.txt
diff 1.txt 2.txt

diff 如下:

6a7
> Embedded.properties
7a9
> getbssid.sh
11a14
> json
22a26
> libmpg123.so
103a108,109
> meeting_chat_chime.pcm
> meeting_raisehand_chime.pcm
121d126
< RegisterProtocol
122a128,129
> root_cert_zpbxcacert.pem
> sip
128,131c135,138
< zhumu
< ZhumuLauncher
< zhumulinux
< zhumu.sh
---
> zoom
> ZoomLauncher
> zoomlinux
> zoom.sh
133d139
< ZXMPPROOT.cer

注意这几项:

128,131c135,138
< zhumu
< ZhumuLauncher
< zhumulinux
< zhumu.sh
---
> zoom
> ZoomLauncher
> zoomlinux
> zoom.sh

不就是改个名嘛~~~(PS:还有把脚本的变量名改一下)

界面对比

看一组图。
红芯对chromium,瞩目对zoom。扒扒瞩目客户端。登录界面,左边Zoom右边瞩目。(瞩目把被和谐的Google和Facebook登录选项去掉了)
红芯对chromium,瞩目对zoom。扒扒瞩目客户端。SSO 登录,左边Zoom右边瞩目。
红芯对chromium,瞩目对zoom。扒扒瞩目客户端。主界面,左边Zoom右边瞩目。(PS: Schedule 图标上的数字都是19)

红芯对chromium,瞩目对zoom。扒扒瞩目客户端。设置。瞩目(右边)用的好像是老版本的zoom,前几年我用的zoom的界面和今天的瞩目一模一样。两个设置的项目和内容是相同的,默认的秒数也都是10.

其他内容依次类推。

总结

红芯对chromium,瞩目对zoom。瞩目客户端是基于Zoom的fake copy。大致上与红芯浏览器与chromium的关系相似。