感恩的心
2024-08-11 19:57 deepin
我补充个备选方案
flatpak install com.tencent.WeChat
Reply Like 0 View the author
我补充个备选方案
flatpak install com.tencent.WeChat
linux微信用着用着就不见了,我还以为只有我的电脑上是这样,原来不止如此。
这个libuosdevicea.so库的uos_get_hddsninfo函数看命名应该是获取硬盘序列号信息的,是不是硬盘相关导致的?
libuosdevicea会查找UOS的验证信息
目前商店里上架的方案是用Bwrap模拟验证信息,而不是破解uosdevicea,因为不想冒版权风险
正常来说是能过验证的,你这个过不了的情况比较奇怪,我这里不能复现...
我以为是我电脑的问题
顺便也说一个:腾讯家的 linuxqq 启动时,也会执行一个 带路径的命令
/bin/lsblk
用于查看硬盘分区信息。
从上面的 weichat 分析看,算是常规操作了
分析地好详细啊,膜拜
1.c的代码
/*
* licensestub - compat layer for libuosdevicea
* Copyright (C) 2024 Zephyr Lykos
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#define _GNU_SOURCE
#include
// MAC address with colon stripped
void uos_get_mac(char* out) {
if (out) {
strcpy(out, "000000000000");
}
}
void uos_get_hddsninfo(char* out) {
if (out) {
strcpy(out, "SN");
}
}
// MD5 of hddsninfo
void uos_get_hwserial(char* out) {
if (out) {
strcpy(out, "92666505ce75444ee14be2ebc2f10a60");
}
}
// Hardcoded
void uos_get_mb_sn(char* out) {
if (out) {
strcpy(out, "E50022008800015957007202c59a1a8-3981-2020-0810-204909000000");
}
}
void uos_get_osver(char* out) {
if (out) {
strcpy(out, "UnionTech OS Desktop");
}
}
void uos_get_licensetoken(char* out) {
if (out) {
strcpy(out, "djEsdjEsMSwyLDk5QUFFN0FBQVdRQjk5OFhKS0FIU1QyOTQsMTAsOTI2NjY1MDVjZTc1NDQ0ZWUxNGJlMmViYzJmMTBhNjAsQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE6ZjA3NjAwYzZkNmMyMDkyMDBkMzE5YzU2OThmNTc3MGRlYWY1NjAyZTY5MzUxZTczNjI2NjlhNzIyZTBkNTJiOTNhYzk0MmM3YTNkZTgxNjIxMmUwMDA1NTUwODg4N2NlMDQ4ODMyNTExY2JhNGFiMjdmYzlmZjMyYzFiNTYwNjMwZDI3ZDI2NmE5ZGIxZDQ0N2QxYjNlNTNlNTVlOTY1MmU5YTU4OGY0NWYzMTMwZDE0NDc4MTRhM2FmZjRlZGNmYmNkZjhjMmFiMDc5OWYwNGVmYmQ2NjdiNGYwYzEwNDhkYzExNjYwZWU1NTdlNTdmNzBlNjA1N2I0NThkMDgyOA==");
}
}
int uos_is_active() {
return 0;
}
问题描述
在使用 V23 RC2 版本后, 发现从应用商店下载的原生微信 Linux 版本打不开了, 具体的现象是出现了登录框在刷新二维码的时候直接退出.
而相同版本在 V20.09 上就能正常打开.
从商店的评论里可以看到有其他人也遇到了这个问题, 而且他还尝试了命令行启动时发现会报错:
而报错的内容如下
然后在网上搜索相关内容, 发现找不到解决这个问题的内容, 所以就暂时放弃了原生微信, 又过了一段时间, 发现网上还是找不到相关解决方案, 所以尝试自己去分析下原因.
简单分析
对比了两个版本微信的相关文件的 md5, 基本是一模一样的, 排除微信版本的因素.
因为命令行有 libpng 报错, 所以还尝试了将 20.09 的 libpng 文件拷贝过来发现问题依旧存在.
在 20.09 系统上使用 launch.sh 脚本启动, 也会报 libpng 的报错, 所以排除是 libpng 的问题.
通过 ldd 命令查看 v23 和 v20.09 上 webchat 的依赖 so, 然后把差异的 so 拷贝到 libs 文件夹, 发现问题依旧存在, 基本排除了是依赖的问题.
看了下 files/wechat 文件是个 linux 下的可执行文件, 所以尝试使用 gdb 来启动
gdb --args
通过上面的分析, 发现问题出在如下文件的 uos_get_hddsninfo 函数中
继续分析
使用搜索引擎搜索相关内容, 在使用 uos_get_hddsninfo 搜索时找到了如下链接
https://aur.archlinux.org/packages/wechat-universal-bwrap?O=70
这个是 archlinux 社区的一个讨论帖子, 里面末尾有给出一段代码, 是用来替代 libuosdevicea.so 文件的
将内容拷贝到 1.c 文件中, 使用如下命令编译
然后将编译出来的 libuosdevicea.so 覆盖掉原先的
再次打开微信 Linux 版, 就能正常打开了, 也刷出了二维码, 不过我却犹豫了下, 没有去扫码登录.
写在最后
其实微信 wine 版在 V23 上用着已经非常流畅了, 感觉比 v20.09 上启动快多了, 只是稍微有种强迫症吧, 想着能用原生的就用原生的.
现在这个原生的微信虽然能打开了, 但是被我修改过了, 我又不想用了, 还是等官方出正式版本的时候, 比 wine 版好用的时候再说吧.
另外, 上面的内容都是从网上搜索到的, 特别是最后那段代码, 我也不确定是否是安全的, 所以如果有人想尝试的话还是要慎重点.
最后坐等 deepin V23 正式版.