0

我正在构建一个 iOS 项目,其中包含一个我希望从产品的 .dSYM DWARF 文件中排除其符号的子项目。

情况是子项目(一个静态库)包含有价值的专有代码,我不希望攻击者能够符号化,即使他们有用于重新符号化整个应用程序崩溃报告的 dSYM 文件。该子项目涵盖了一个非常具体的领域,并且经过了独立测试,因此我不担心无法在该代码中重新符号化堆栈跟踪。但是,我确实需要能够为应用程序的其余部分重新符号化崩溃报告,所以我需要一个 dSYM(因为与应用程序一起分发符号不是一种选择)。

我已经设法确保从二进制文件中删除所有相关符号,并设置 GCC_GENERATE_DEBUGGING_SYMBOLS=NO 从 dSYM 中删除了很多内容,但我仍然在 dSYM 文件中看到类私有 C++ 方法名称。作为参考,我正在使用clang。

如何在不影响该子项目符号的情况下为我的应用程序生成 dSYM?

4

1 回答 1

0

对于标准的 Xcode 工作流程,这可能会很困难。您可能可以使用 shell 脚本阶段执行某些操作,将静态库移动到不同的文件名(“隐藏”它),然后dsymutil在您的主应用程序二进制文件上运行以创建 dSYM。因为dsymutil找不到静态库,所以无法包含这些函数的任何调试信息。或者,您可以创建静态库的无调试信息版本,尽管这将需要更多的脚本。静态库实际上是对象(.o)文件的 zip 文件——您需要创建一个目录,提取.o文件(ar x mylib.a),剥离.o文件,然后创建一个新的静态库(ar q mylib-nodebuginfo.a *.o我认为)并在运行之前将其放置到位dsymutil

不过,我不知道有选择地从创建后删除调试信息的方法dSYM。这是可能的,但我认为没有人写过这样的工具。

于 2014-05-22T06:13:32.227 回答