【发布时间】:2017-02-25 02:36:21
【问题描述】:
是否有一些简单/可重复的方法来打乱 RTTI 符号?
一些已经做过的事情:
静态构建——显然,这很有帮助,因为库之间会内联,并且没有像动态库那样干净的界面。我们希望在任何情况下都这样做 b/c 库跨平台工作,这使得部署更加容易(只有一个胖库文件)
使用“strip”——至少在 Linux 上(不确定是否有 Windows 等价物!)这将删除大部分漂浮在周围的符号
但是,如果我在库上运行“字符串”,我仍然可以看到人类可读的符号!经过一番调查,这似乎是由于 RTTI。所有现有的编译器似乎只使用函数/类/等。签名以在代码中生成 RTTI 比较值。这种有效的源代码泄漏到二进制文件中,让好奇的用户深入了解我们的秘密武器以及我们如何制作它。
注意:
我们无法使用 -fno-rtti b/c 构建我们使用的静态链接库在内部使用 RTTI。我认为我正在寻找的是可以在编译后的可执行文件上工作的东西,而不是作为构建过程的一部分
我已经尝试寻找可以做到这一点的商业产品 - 但没有人将其列在他们的功能列表中。许多产品似乎质量有问题或处于某种半废弃状态。大多数人似乎都专注于打乱代码并进行各种复杂的转换,这些转换会损害性能并且对我们来说并不是超级关键。
手动打乱我们使用的所有库中的所有符号就可以了。但这似乎是可维护性的噩梦...
【问题讨论】:
标签: c++ gcc linker clang obfuscation