为什么我可以在使用 Visual C++ 编译.exe文件中看到类/结构名称



在查看编译的 relese .exe文件二进制文件时,我可以在其中找到类/结构名称!这很奇怪 - 显然不需要这些符号。我担心的是,这些符号可用于反向生成我的软件,从而给软件许可证保护带来巨大风险。

例如,我可以找到文本。?AVCMySecureKeyManager(原来的类名是CMySecureKeyManager,看起来所有的名字都加了前缀".?AV"),很容易猜到我的代码在做什么,对吧?..看起来像是一扇为黑客敞开的大门。

特别是,我可以说我已经启用了所有可能的优化 Visual C++ 编译器/链接器选项,关闭了所有浏览/调试信息生成,也许我错过了什么?

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

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

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

最新更新