答案1
这个 reddit 帖子中也有一些不错的技巧。特别是对特定文件的调用的库覆盖:
我认为最有益的时间利用方式是交换 Zoom 用于获取操作系统数据的一些底层方法。
首先,您要确定“钩子”要做什么以及要钩住什么。这是一个简单的钩子,它只是通过替换 open 的实现,用短字符串“ZV”替换 /etc/os-release 中实际的内容。您需要使用 strace 程序来真正弄清楚 Zoom 是如何做到这一点的。
#define _GNU_SOURCE
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <dlfcn.h>
int open(const char *path, int oflag) {
if (strcmp(path, "/etc/os-release")) {
int (*nopen)(const char *path, int oflag);
nopen = dlsym(RTLD_NEXT, "open");
return nopen(path, oflag);
} else {
int *fildes = calloc(2, sizeof(int));
pipe(fildes);
const char *fake = "ZV";
write(fildes[1], fake, strlen(fake));
return fildes[0];
}
}
要使用此功能,您必须将根据上述代码创建的文件写入一个文件(我将其命名为 fakeread.c)并进行编译:
$ gcc -shared -fPIC -ldl -o fakeread.so fakeread.c
然后,您只需使用环境变量调用您的命令,指示动态链接器优先使用新共享对象导出的符号。
$ LD_PRELOAD=`pwd`/fakeread.so WHATEVER_ZOOM_COMMAND_IS
您可以用相同的原理挂钩其他库函数(如 exec)或甚至系统调用(如 uname)。
答案2
更新
https://www.dropbox.com/sh/3klzwv3n3xn09s4/AAD28SF62Z9cXKCSCxz6SOb5a?dl=0
这是一个运行良好的开发版本。如果您不信任它,请查看其他解决方案。希望很快就能修复。
您可以编辑 os-release 文件,让 zoom 误以为您的操作系统已过时。我会在截屏开始后立即撤消更改,因为这可能会导致操作系统损坏。
因此对于 Fedora 30 进行更改
$ cat /etc/os-release
NAME=Fedora
VERSION="30 (Workstation Edition)"
ID=fedora
VERSION_ID=30
到
$ cat /etc/os-release
NAME=Fedora
VERSION="30 (Workstation Edition)"
ID=fedora
VERSION_ID=29
类似的更改也适用于 Ubuntu 19,04+
以下是可以加快该过程的 bash 别名。 https://gitlab.com/snippets/1883723
答案3
我在 Debian 10 中遇到了同样的问题,可以通过将以下行附加到以下内容来解决/etc/os-release
:
VERSION_ID="99"
VERSION="99 (sid)"
VERSION_CODENAME="sid"