IOS 构建包含 IDA 中可见的符号

IOS build contains symbols visible in IDA

本文关键字:符号 构建 包含 IDA IOS      更新时间:2023-10-16

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

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

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

谢谢拉克斯万。

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

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

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