IOS 构建包含 IDA 中可见的符号
IOS build contains symbols visible in IDA
我们在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
运算符,这将破坏您的代码。
相关文章:
- 如何防止 CMake 在构建时(而不是在安装时)为共享库创建符号链接?
- 为什么C++数组索引值是有符号的,而不是围绕size_t类型构建的(或者我错了)
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- 简单的cmake项目,在Windows上使用nmake构建没有调试符号
- 在 macOS 上以C++构建的未定义符号
- 自定义 Python 构建 - time.so:未定义的符号:PyExc_ValueError
- 尝试与从 CUDA 对象构建的共享库链接时未定义的符号
- C++为 Android 构建的库使用了错误的依赖项符号
- OPENCV构建G 符号错误/DSO错误
- 架构 arm64 的未定义符号仅在构建框架时
- mac构建有一个未定义的符号,而linux构建并没有用于相同的代码
- 错误LNK2019:未解决的外部符号-MSVC调试构建功能模板
- Visual Studio构建OpenSSL,具有符号的下强前缀
- ICU ustdio.h函数:使用CMake构建时,在Mac操作系统上使用未定义的符号
- 未解析的外部符号构建 Python 模块
- node-gip解析windows构建上的外部库符号
- 体系结构x86_64的未定义符号:构建堆栈
- 如何使用调试符号构建 openssl?[添加自由.pdb]
- 用与另一个库相同的符号构建一个库
- 使用未定义的符号构建库 (C++)