通过应用内购买解锁完整版本的安全方式

我打算使用应用程序内购买来解锁我的应用程序中的一些function。 什么是最安全的方法来做到这一点?

本来我打算在NSUserDefaults设置一个Bool:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isPro"];

但是我不确定是否有可能通过“hack”来设置这个值(因为NSUserDefaults是由iOSpipe理的,而不是由应用程序直接pipe理的),以便用户不必执行应用内购买为了得到完整版本。

处理这个问题的最佳做法是什么?

是的,修改应用程序首选项相对比较容易。 但这真的很重要吗? 我敢打赌,谁愿意打开他们的iPhone文件系统和修改configuration文件来保存一到两个的人谁不是那种倾向于花钱,如果他们不能这样做的人的types。

通过模糊处理的安全性是最简单的方法(例如,不要把你的var命名为“isPro”,也许没有它的值是一个简单的BOOL,而应该是一个“魔术”整数。开裂。

作为使用NSUserDefaults的替代方法,您可以将文件保存到应用程序文件系统,然后在应用程序启动时检查它的内容。

不知道这是值得的时间和麻烦。

您可以将它保存在钥匙串中,但是在越狱设备上也很容易阅读和更改。 所以你应该encryption数据。 通过扫描二进制文件,确保在您的应用程序中找不到encryption密码。

我遇到了一些问题,并find两种常见的方式来安全地存储应用程序内购买:

1)使用安全版本的NSUserDefaults:

a)“ 安全NSUserDefaults ”。 这个版本的NSUserDefaults为任何已保存的秘密项目生成哈希,并为之后的项目提供validation。 所以,你可以很容易地处理这个用户“黑客”默认.plist的情况。

检查这里: https : //github.com/matthiasplappert/Secure-NSUserDefaults

b)“ SecureNSUserDefaults ”。 带AESencryption的NSUserDefaults。 我的build议不只是存储安全的布尔值购买,而是一些混淆的string指示付款或不。

在这里检查: https : //github.com/nielsmouthaan/SecureNSUserDefaults

2)使用KeyChain

a)“ RSSecrets ”在KeyChain中存储键值项的简单类。 另请参阅此处的讨论: 在应用程序钥匙串中存储应用程序中的购买收据

并检查项目: https : //github.com/jeffargast/RSSecrets

b)“ STKeychain ”这个类主要用于在KeyChain中存储login/传递,但是在MKStroreKit(适用于iOS设备的stream行的应用内购买StoreKit)项目中,他们实际上使用这个类来存储应用内购买。

在这里检查: https : //github.com/ldandersen/STUtils/blob/master/Security/STKeychain.h

PS我还没有在我的项目中使用这些类,但认为使用“RSSecrets”