首页 > 解决方案 > 如何在共享库中隐藏依赖项的函数名称?

问题描述

我正在 Linux 上构建一个共享库,它引用其他库,如boost, CryptoPP, jsoncpp. 问题是最终的 .so 文件在IDA Pro中包含函数名称:

在此处输入图像描述

我认为是因为链接到动态库,所以我构建了boost静态库,但boost函数名称仍然可见。

我尝试剥离.so 文件:

strip my.so
strip --strip-unneeded -x my.so

仍然没有运气。

有些竞争对手可能会对我的库进行逆向工程,如何隐藏这些函数名使其更难破解?

标签: c++linuxshared-librariesreverse-engineeringdebug-symbols

解决方案


你应该

  • compile with -fvisility=hidden(实际导出的函数应该__attribute__((visibility("default")))在代码中用
  • 链接到外部库的静态版本(通过使用-l:libXYZ.a语法LDFLAGS);当然,它们需要存在于您的系统中。

推荐阅读