c++ - IOS 版本包含 IDA 中可见的符号

标签 c++ ios arm decompiling ida

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

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

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

谢谢, 拉克斯万。

最佳答案

strip -x Myapp.app/Contents/MacOS/Myapp应删除运行程序不需要的所有符号。 (可能也有一些 XCode 设置。)您可能需要使用 visibility options 。以确保所有私有(private)符号都被正确标记。

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

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

关于c++ - IOS 版本包含 IDA 中可见的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18722257/

相关文章:

ios - 无法在 objective-c 中从 ejabberd xmpp 注册新用户

ios - 我们可以从 Google 云端硬盘获取所有照片吗

在没有标准函数或 C99 的情况下计算 atan2

java - Raspberry Pi 的 JVM

c++ - 除了++ 和 -- 之外,是否可以重载后缀一元运算符?

c++ - 在任意原点调整矩形形状

ios - ios自动布局动态UILabel高度

linux - 当谈到从汇编语言源代码制作共享对象时,我应该做什么与​​ C 源代码不同的事情?

c++ - 在 Visual Studio 中观察 C++ 数组

c++ - 如何旋转 btCollisionShape