7

我正在尝试剥离我们的 iOS 应用程序二进制文件中的调试符号,以使黑客更难修改二进制文件。我已经尝试过 xcode 的符号剥离(启用带链接产品和部署后处理)和使用“strip -S -x”。两者都确实减少了符号的数量,但通过“字符串”运行二进制文件仍然会返回大量命中。

知道如何删除它们吗?

4

2 回答 2

15

Objective-C 是一种动态语言。方法调用在运行时基于选择器(实际上是方法名称作为字符串)解析。这与像 C++ 这样在编译/链接时绑定方法调用的语言不同。

从二进制文件中删除方法名称(选择器)会使应用程序无法使用。

就其内部而言,用 Objective-C 编写的应用程序几乎是一本开放的书。只需查看otoolclass-dumpF-ScriptDTrace之类的工具,即可了解在运行的 Objective-C 应用程序中有多少是可访问和可修改的。

但是,有一些链接器标志 ( P_LNOATTACH) 会阻止 DTrace 连接到正在运行的应用程序。你也可以ptracePT_DENY_ATTACH旗帜打电话。iTunes 是执行此操作的应用程序示例,因为 Apple 不希望您在其 DRM 中四处寻找。

之前似乎有一篇关于 Objective-C 代码混淆的文章。请参阅iPhone/iPad 应用程序代码混淆 - 有可能吗?值得?更多细节

于 2012-11-01T04:52:49.500 回答
1

Objective-c 运行时依赖于那些,不可能删除它们。(“SEL”类型是唯一的字符 *)

于 2012-11-01T04:51:47.507 回答