gloxec/CrossC2

通过rebind_dynamic_lib指定后,在有的系统中报错 `GLIBC_2.14' not found

wgf4242 opened this issue · 1 comments

编译 gcc test.c -fPIC -shared -o lib_rebind_test.so
指定 lib_rebind_test.so 来生成elf。

编译后有些平台正常
放到别的平台运行时提示。这个怎么解决?

./genCrossC2.Linux 192.168.50.11 4431 .cobaltstrike.beacon_keys lib_rebind_test.so Linux x64 test
./test
#本机运行正常,复制到某些机器运行报错
[error]: [parse lib]: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /tmp/.sys.rrcache.data)!
[error]: [parse lib]: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./.sys.rrcache.data)!
[error]: [parse symbol]: (null)!

# 尝试静态编译还是同样错误
gcc -static-libstdc++ test.c -fPIC -shared -o lib_rebind_test.so
./genCrossC2.Linux 192.168.50.161 4431 .cobaltstrike.beacon_keys lib_rebind_test.so Linux x64 2test

但不用profile 和 lib_rebind_test 生成的elf是可以正常运行的。
我应该怎么解决?

大概率是test.c中使用了 memcpy 这类函数, gcc在编译时,优先选用系统上的高版本GLIBC版本

  1. 可以在低版本Linux上进行编译
  2. 手动实现函数进行替换
void memCpy(void *dest, const void *src, size_t n) {
    char *p_d = (char *)dest;
    char *p_s = (char *)src;
    for (long long I = 0; I < n; ++i) {
        *p_d = *p_s;
        ++p_d;
        ++p_s;
    }
}