【问题标题】:How to hide the dependencies' function names in shared library?如何在共享库中隐藏依赖项的函数名称?
【发布时间】:2020-10-05 05:43:38
【问题描述】:

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

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

我尝试剥离 .so 文件:

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

还是没有运气。

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

【问题讨论】:

    标签: c++ linux shared-libraries reverse-engineering debug-symbols


    【解决方案1】:

    你应该

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

    【讨论】:

    • 我尝试构建并链接到boost 静态库,ldd my.so 的输出中没有 libboost..so,但名称仍然存在国际开发协会。
    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2012-04-05
    • 2016-03-09
    • 1970-01-01
    • 2016-02-18
    • 2011-10-01
    • 2018-07-14
    相关资源
    最近更新 更多