2

我们在 IOS 项目上使用 C++,并在 ARM 架构上使用 Apple llvm 3 编译器。我注意到 IDA 可以打开 ARM exe 文件,并且在导出选项卡中我找到了许多 c++ 代码的虚拟表构造函数(类似于 `construction vtable for'BaseClass-in-OtherClass 00AB6AC5' 其中 BaseClass 和 OtherClass 是实际的 c++ 类)从那里你可以找到其他子程序的地址。

我不熟悉 IDA,但我认为从那里你可以找到敏感的子例程并将它们更改为其他目的。我想知道所有符号名称是如何进入发布版本的(我们缺少编译器开关?),以及这些东西是否确实可以用来轻松追踪处理敏感信息的例程。

有没有办法从构建中删除所有名称?

谢谢,拉克斯万。

4

1 回答 1

2

strip -x Myapp.app/Contents/MacOS/Myapp应该删除运行程序不需要的所有符号。(可能也有一些 XCode 设置。)您可能需要使用可见性选项来确保正确标记所有私有符号。

请注意,您将无法删除 Objective-C 名称(类、字段和方法),因为它们已编码在程序数据段中的 Objective-C 元数据结构中,并且是 Objective-C 所要求的运行。

符号信息的另一个来源是 C++ RTTI(运行时类型信息)。IDA 目前不使用它,但可以通过一些额外的脚本来恢复类名。您可以关闭 RTTI 生成,-fno-rtti但如果您使用dynamic_cast<>typeid运算符,这会破坏您的代码。

于 2013-09-10T15:46:00.797 回答