3

查看已编译的relese .exe 文件二进制文件时,我可以在其中找到类/结构名称!这很奇怪 - 显然这些符号没有必要。我担心的是,这些符号可用于对我的软件进行逆向工程,给软件许可保护带来很大风险。

比如我可以找到文本.?AVCMySecureKeyManager(原来的类名是CMySecureKeyManager,貌似所有名字都加了前缀“.?AV”),很容易猜到我的代码在做什么,对吧?..看起来像一个open黑客的大门。

特别是,我可以说我已经启用了所有可能的优化Visual C++ 编译器/链接器选项,关闭了所有 Browse/Debug Info generation,也许我错过了什么?

4

1 回答 1

3

您会看到RTTI(运行时类型信息)。如果您不使用dynamic_casttypeid在您的代码中,通常可以安全地关闭它。请注意,异常总是使用 RTTI(用于catch语句匹配),并且无法为它们禁用它。

如果您确实需要dynamic_cast,那么您可以在编译后从 EXE 中清除名称。该代码不依赖于实际的名称字符串,而只依赖于它们的地址。

也就是说,类名虽然有用,但在逆向工程中并不重要。不要依赖他们的缺席作为保证。

于 2012-07-02T11:06:43.907 回答