我有一个带有插件的woocommerce商店,可以生成许可证密钥。
我的想法是,我的应用程序的用户将输入将针对服务器进行检查的许可证密钥。如果它是正确的,那么应用程序将创建一个特殊的文件/持久标志。
一旦激活,用户可以重置设备或其他任何内容,应用程序将只是检查是否存在此持久文件/标志。
我的问题是:
谢谢大家,一些指导或建议会很棒。
答案 0 :(得分:2)
“标准”方法是让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
作为许可证密钥生成的一部分。没有这个价值,任何人盗版你的软件都是微不足道的。
没有“应用程序包内部无法触及的东西”。唯一的问题是Apple硬件中的Secure Enclave。并且为了保护用户隐私,应用程序开发人员不允许直接使用它。 identifierForVendor是唯一的选择。
在早期版本的iOS中,有更多选项,但广告公司跟踪Apple的客户会滥用这些选项,因此Apple多年来一直禁止访问。