Objective-C框架保护

Pri*_*yat 0 frameworks objective-c

我已经开发了许多框架,我希望随我的应用程序一起提供.我不希望其他人能够使用框架,但我已经看到了诸如class-dump可以轻松恢复标头的实用程序.

我的问题是,如何让我的框架更安全?我知道他们永远不会100%安全,但有一些很好的一般提示可以遵循吗?

谢谢!

bbu*_*bum 18

总之,不要打扰.Objective-C运行时的本质是可用的重要元数据.

现实情况是,有人拿起你的框架并试图嵌入/使用它是非常罕见的.

请注意,代码混淆器并不能很好地工作; 仍然有相当多的元数据必须暴露.您可以走这条路,但是 - 通常情况下 - 它会使调试/崩溃分析变得更加困难而不会真正解决实际问题.


我看到其他人已经指出了混淆的道路(虽然我怀疑答案#define someSelector mmmrrrggglll并没有真正考验过多).

沿着这条路走下去时要考虑的一些具体要点(我确信我错过了很多):

  • 如果您使用KVO/KVC,请确保混淆所有这些呼叫addObserver:*

  • 如果你的目标是Mac OS X,也不要忘记Bindings!

  • Interface Builder的xib文件通常包含对实例变量和/或属性和/或方法的引用.别忘了那些!

  • 任何使用运行时内省的东西都需要混淆.

  • 确保你不要混淆系统框架所依赖的任何东西; 不希望继承NSView,比如说,然后混淆drawRect:initWithFrame:.

  • 在某些情况下,Info.plist可以引用类名和入口点.不要乱用那些!

  • 另外,确保@selector()的每个用法也被正确混淆; 就像为不再存在的方法设置NSTimer触发一样.

  • 确保您的模糊计划还包括为崩溃日志创建非混淆器所需的工程工作.

  • 您还需要考虑如何调试生产二进制文件; 假设您的堆栈跟踪将被混淆. b mmmrrrggglllFTW!

  • 如果您的框架具有符号导出控制,请确保对它们进行模糊处理!请记住,在某些情况下,符号的创建方式因架构和编译器而异.

  • 我想你刚刚打破了我的讽刺探测器.+1! (4认同)