【问题标题】:Best way to store license key persistently on i-device在 i 设备上永久存储许可证密钥的最佳方式
【发布时间】:2014-04-30 12:03:03
【问题描述】:

我有一个 woocommerce 商店,其中包含一个生成许可证密钥的插件。

这个想法是我的应用程序的用户将输入一个许可证密钥,该密钥将与服务器进行检查。如果它是正确的,那么应用程序将以某种方式创建一个特殊的文件/持久标志。

一旦激活,用户可以重置设备或其他任何东西,应用程序将简单地检查这个持久性文件/标志是否存在。

我的问题是:

  1. 是否有专门用于此类事情的库?
  2. 如果不是,那么执行此操作的最佳/标准方法是什么,以便无法将文件复制到其他设备以伪造激活?
  3. 我是否可以在应用程序包中使用不可触摸的东西而不是文件来执行此操作?

谢谢大家,一些指导或建议会很棒。

【问题讨论】:

  • 这是为了解锁您应用中的功能吗?我很确定应用内购买是 Apple 允许的唯一方法 - 当然,您如何在本地记录购买的问题仍然存在 - 尽管 Apple 提供了有关如何针对服务器验证交易的建议
  • @Paulw11 不正确。只要不是在应用程序内部进行付款,就可以直接接受付款,而不是给苹果 30%。例如,无需使用应用内购买即可购买 Skype 点数。但是你不能在 Skype iOS 应用程序中输入你的信用卡号码——你必须使用网络浏览器。 Kindle 应用程序和许多其他应用程序也是如此。
  • 酷。感谢您澄清这一点
  • @Paulw11 还请注意,应用内购买不允许用于所有购买。例如,您不能将其用于实物商品,例如当您使用 Dominos 应用程序订购披萨时。对于不允许使用应用内购买的东西,Apple 确实允许在应用中输入信用卡号。如果您不确定这些规则如何适用于您的特定产品,则值得阅读这些规则。
  • 是的。我知道这一点(实物)。谢谢

标签: ios woocommerce activation


【解决方案1】:

执行此操作的“标准”方法是让 Apple 通过应用内购买或订阅为您管理许可,它们提供了一种安全的实施方式来检查是否已付费,但这可能不是您的选择.

如果您需要自己滚动,则需要使用非对称加密,在服务器上使用任何人都无法访问(除了您)的私钥和在应用程序中分发的公钥。您还需要设备上的 [UIDevice currentDevice].identifierForVendor.UUIDString 值,这是该设备独有的值,用户无法更改(除非他们越狱)。

服务器对2014-03-23,purchased-three-month-license,<device-identifier-for-vendor>,<long-random-number>等一些数据进行加密,并将加密后的数据作为许可密钥提供给设备。

设备拥有公钥,并使用它来解密许可证密钥。然后它检查结果,看日期是否在最近三个月,设备标识符与设备的实际标识符匹配,并验证长随机数是否存在,并且至少有 10 位数字或其他东西(不管是什么随机数是,它只需要在那里)。

任何越狱的人仍然可以绕过您的安全措施。没有办法阻止这种情况。但这需要用户做很多工作,他们可能会直接付费。

加密所需的所有库都是内置的,但它们是低级 API,使用起来有点复杂,而且很容易搞砸。我推荐 RNCryptor 作为它们周围的高级包装器。

另外请注意,如果用户卸载您的应用程序,然后重新安装它(或者有时当 Xcode 安装新版本时)identifierForVendor 将更改为新值。 Apple 强制执行此操作以保护用户隐私,这是没有办法的。您将需要让服务器根据新标识符重新生成新的许可证密钥......也许通过要求用户输入电子邮件地址和密码。您可以通过监控特定电子邮件地址的使用次数来防止盗版。如果他们在 30 天内生成了 5 次许可证密钥,那么您可以将他们标记为盗版。

“woocommerce 商店插件”生成的任何许可证密钥都不起作用,因为它不会使用[UIDevice currentDevice].identifierForVendor.UUIDString 作为许可证密钥生成的一部分。没有这个价值,任何人盗版你的软件都是小菜一碟。

没有“应用程序包中不可触及的东西”之类的东西。唯一这样的事情是苹果硬件中的Secure Enclave。并且为了保护用户隐私,不允许应用开发者直接使用。 identifierForVendor 是唯一的选择。

在旧版本的 iOS 中,有更多的选择,但它们被跟踪苹果客户的广告公司滥用,因此苹果多年来一直在阻止访问。

【讨论】:

  • 要添加更多内容,我不能使用标准的苹果方式,因为它们没有提供足够的控制。该人必须先通过我们公司完成课程,然后才能使用该应用程序。非常利基的用例,我与苹果合作了一段时间,但我们无法用他们现有的基础设施提出解决方案:( - 感谢您的回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多