如何在Xcode中保护我的框架?

时间:2013-09-14 13:01:32

标签: objective-c xcode frameworks

我们打算在网上销售我们的框架,它需要受到保护,而不是有人购买它,他不能​​把它放在网上,或者把它交给其他开发者。 几个月后我们不想在网上找到它。

我有几个方法,但每个都有它的捕获。

为每个开发人员提供一个唯一的ID,并将该id编入框架,因此他必须输入该ID才能使用它。问题是,他可以向任何人提供带有id的框架。

询问设备编号,并在我的框架中仅为每个开发人员启用该设备。这里的问题是,当他把它放在商店时,所有用户都不能使用它,因为他们有其他设备ID。

使用网络检查一些如何(??)我不喜欢不限制用户的需要。

我可以使用代码对每个框架进行编程,只有我可以提取,所以当我在网上找到它时,我可以确定开发人员在哪里(它没有帮助 - 我无法起诉所有人)

是否有其他方法可以为每个开发人员制作框架,还可以让它在appstore上的所有其他用户工作吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

@diederikh非常好,而NicolasMiari也提供了很好的洞察力。最好的答案IMO是这两者的组合。 (同时牢记diederikh的优秀建议,即你的目标是提出一些简单的方法,使合法客户的事情变得艰难。)

不是为每个客户重新编译整个框架,而是使许可证密钥取决于其捆绑标识符。他们会向您发送他们的捆绑ID。您使用私钥并签署其捆绑ID。这为您提供了发送给他们的哈希。现在,在运行时,您的框架使用公钥(不敏感;您可以在任何地方发布)来验证您的签名。有关在iOS上执行此操作的信息,请参阅SecKeyRawVerify()

您可以使用此方法创建有时间限制的键。只需在签名数据中包含时间戳。

使用此方法,您可以根据需要让客户使用您的捆绑包标识符无限期地测试您的框架。您可以为试用客户提供该标识符的签名哈希值。但是一旦他们想要上传到AppStore,他们就必须更改标识符并支付新的签名密钥。

当然有办法解决这个问题。攻击者可以修改您的框架以忽略签名验证。但事实确实如此,事实上,律师事务所做的事情要好于DRM,而DRM只会给付费客户造成麻烦。

答案 1 :(得分:1)

看看PSPDFKit是如何做到的。如果要在演示模式下使用它,则必须使用唯一ID调用方法。此ID将启用演示模式中不可用的功能。

您还可以(使用codesign工具)为每个客户签署一个唯一的证书框架。

我不会太担心;如果你总能找到一个绕锁的方法。