[Exchange and share] 关于微信Linux原生版在 V23 RC2 上启动闪退问题的简单分析
Tofloor
poster avatar
178******17
deepin
2024-08-11 19:25
Author

问题描述

在使用 V23 RC2 版本后, 发现从应用商店下载的原生微信 Linux 版本打不开了, 具体的现象是出现了登录框在刷新二维码的时候直接退出.

而相同版本在 V20.09 上就能正常打开.

从商店的评论里可以看到有其他人也遇到了这个问题, 而且他还尝试了命令行启动时发现会报错:

/opt/apps/store.spark-app.wechat-linux-spark/files/launch.sh

而报错的内容如下

libpng warning: iCCP: known incorrect sRGB profile

然后在网上搜索相关内容, 发现找不到解决这个问题的内容, 所以就暂时放弃了原生微信, 又过了一段时间, 发现网上还是找不到相关解决方案, 所以尝试自己去分析下原因.

简单分析

  1. 对比了两个版本微信的相关文件的 md5, 基本是一模一样的, 排除微信版本的因素.

  2. 因为命令行有 libpng 报错, 所以还尝试了将 20.09 的 libpng 文件拷贝过来发现问题依旧存在.

  3. 在 20.09 系统上使用 launch.sh 脚本启动, 也会报 libpng 的报错, 所以排除是 libpng 的问题.

  4. 通过 ldd 命令查看 v23 和 v20.09 上 webchat 的依赖 so, 然后把差异的 so 拷贝到 libs 文件夹, 发现问题依旧存在, 基本排除了是依赖的问题.

  5. 看了下 files/wechat 文件是个 linux 下的可执行文件, 所以尝试使用 gdb 来启动

    • 拷贝了一份 launch.sh 用来修改, 在最后一行 wechat 路径前面加上 gdb --args
    • 启动时会进入 gdb 调试模式, 然后 r 运行, 发现程序挂在了如下位置
    #0  __strcpy_avx2 () at ../sysdeps/x86_64/multiarch/strcpy-avx2.S:222
    #1  0x00007ffff0010bba in uos_get_hddsninfo () from /usr/lib/license/libuosdevicea.so
    
    • 从堆栈可以看到是在 libuosdevicea.so 中有个 uos_get_hddsninfo 函数调用 strcpy 拷贝字符串的时候崩掉了, 可能是传入了空指针之类的
    • 从函数名看到是 uos 获取某个信息时出问题了, 其他的也看不出啥信息了.

通过上面的分析, 发现问题出在如下文件的 uos_get_hddsninfo 函数中

/opt/apps/store.spark-app.wechat-linux-spark/files/license/usr/lib/license/libuosdevicea.so

继续分析

使用搜索引擎搜索相关内容, 在使用 uos_get_hddsninfo 搜索时找到了如下链接

https://aur.archlinux.org/packages/wechat-universal-bwrap?O=70

这个是 archlinux 社区的一个讨论帖子, 里面末尾有给出一段代码, 是用来替代 libuosdevicea.so 文件的

将内容拷贝到 1.c 文件中, 使用如下命令编译

gcc 1.c -fpic -shared -o libuosdevicea.so

然后将编译出来的 libuosdevicea.so 覆盖掉原先的

/opt/apps/store.spark-app.wechat-linux-spark/files/license/usr/lib/license/libuosdevicea.so

再次打开微信 Linux 版, 就能正常打开了, 也刷出了二维码, 不过我却犹豫了下, 没有去扫码登录.

写在最后

其实微信 wine 版在 V23 上用着已经非常流畅了, 感觉比 v20.09 上启动快多了, 只是稍微有种强迫症吧, 想着能用原生的就用原生的.

现在这个原生的微信虽然能打开了, 但是被我修改过了, 我又不想用了, 还是等官方出正式版本的时候, 比 wine 版好用的时候再说吧.

另外, 上面的内容都是从网上搜索到的, 特别是最后那段代码, 我也不确定是否是安全的, 所以如果有人想尝试的话还是要慎重点.

最后坐等 deepin V23 正式版.

Reply Favorite View the author
All Replies
f@deepin
deepin
2024-08-11 19:57
#1

我补充个备选方案

flatpak install com.tencent.WeChat

image.png

Reply View the author
LINUX小白菜
deepin
2024-08-11 21:08
#2

linux微信用着用着就不见了,我还以为只有我的电脑上是这样,原来不止如此。

Reply View the author
我是昵称
deepin
2024-08-11 21:19
#3

这个libuosdevicea.so库的uos_get_hddsninfo函数看命名应该是获取硬盘序列号信息的,是不是硬盘相关导致的?

Reply View the author
神末shenmo
deepin
Spark-App
2024-08-11 21:21
#4

libuosdevicea会查找UOS的验证信息

目前商店里上架的方案是用Bwrap模拟验证信息,而不是破解uosdevicea,因为不想冒版权风险

正常来说是能过验证的,你这个过不了的情况比较奇怪,我这里不能复现...

Reply View the author
hinata
deepin
2024-08-11 21:28
#5

我以为是我电脑的问题

Reply View the author
字甲达宾
deepin
2024-08-12 09:42
#6

顺便也说一个:腾讯家的 linuxqq 启动时,也会执行一个 带路径的命令

/bin/lsblk

用于查看硬盘分区信息。

从上面的 weichat 分析看,算是常规操作了

Reply View the author
蓝鲸
deepin
2024-08-12 09:51
#7

分析地好详细啊,膜拜like

Reply View the author