别担心,我不是想破解别人的应用程序,如果你是这样想的 =)。
我想要我的应用程序的 2 个版本,一个免费版和一个豪华版。我的计划是通过在 plist 文件中设置一个布尔值来使用应用内购买来启用豪华版。
我的问题是:这是安全的还是很容易绕过?如果它不安全,有人可以提出一个简单的替代方案吗?我不想下载其他内容,我宁愿保留应用程序中的所有功能并以某种方式启用它。
编辑:我不是指应用程序 plist 文件,而是类似于用户默认文件的东西。
别担心,我不是想破解别人的应用程序,如果你是这样想的 =)。
我想要我的应用程序的 2 个版本,一个免费版和一个豪华版。我的计划是通过在 plist 文件中设置一个布尔值来使用应用内购买来启用豪华版。
我的问题是:这是安全的还是很容易绕过?如果它不安全,有人可以提出一个简单的替代方案吗?我不想下载其他内容,我宁愿保留应用程序中的所有功能并以某种方式启用它。
编辑:我不是指应用程序 plist 文件,而是类似于用户默认文件的东西。
你应该把它存储在钥匙串中,这就是我要做的。钥匙串比 .plist 或用户默认值(据我所知也是 .plists)安全得多。看看SFHFKeychainUtils,你应该能够使用它或者只是为了保存一个简单的布尔值而实现一个更好的方法。
com.something.plist
无需越狱即可轻松编辑。使用免费工具*,您可以浏览您的设备,还可以编辑和保存这些文件。如果您存储您的应用内购买,如下所示:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"com.example.pack1"];
[[NSUserDefaults standardUserDefaults] synchronize];
然后这将被写入 plist:
<key>com.example.pack1</key>
<true/>
如果您这样命名您的包:pack1、pack2 等,并且有人编辑您的 plist(复制/粘贴第一个键),他/她可以轻松使用锁定功能。
一个不太难实现的方法是这样保存:
[[NSUserDefaults standardUserDefaults] setValue:[self sha1ValueForKey:@"com.example.pack1"]
forKey:@"com.example.pack1"];
[[NSUserDefaults standardUserDefaults] synchronize];
-sha1ValueForKey:
在哪里
-(NSString *)sha1ValueForKey:(NSString *)key {
return [self sha1:[NSString stringWithFormat:@"<SALT>%@", key]];
}
你必须改变<SALT>
一些东西。
你可以在这里找到:http -sha1:
: //www.makebetterthings.com/iphone/how-to-get-md5-and-sha1-in-objective-c-ios-sdk/
在此之后,您可以验证密钥是否与散列值匹配。
如果有人想破解你的 plist,他/她必须知道你的哈希机制和盐。这不是保护您的应用程序的最安全方法,但它很容易实现。
*iExplorer
编辑:
如果用户无权访问散列值,建议的方法仅在某种程度上保护您的 IAP。如果有人从某个地方得到它,很容易将该数据复制到 plist。如果 SALT 依赖于设备,则复制是无用的。
我建议阅读有关验证应用内购买的内容。在我看来,您正在尝试推出自己的应用内购买验证系统,该系统可能会遇到您可能尚未想到的问题。您必须小心用户的购买行为,以使他们在您的应用程序中的行为与在任何其他应用程序中的行为相同,以免您失去他们的信任(以及未来的销售!)
任何盗版者都有越狱的 iPhone 任何越狱设备都可以通过 PhoneDisk 等工具提供完整的文件系统访问权限 任何文件系统访问权限都允许人们更改应用程序 .plist 文件中的值
游戏结束。
现在,为脚本小子包装它并不是一件容易的事,但同样也不是那么难。
与其担心 Info.plist 文件,不如设置一个首选项?在您的代码中的某处,这将为您提供布尔值:
[[NSUserDefaults standardUserDefaults] boolForKey:@"someKey"];
如果该值不存在,则结果将为nil
. 此代码设置值:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"someKey"];
此外,这些值将在 iTunes 中备份,因此如果用户将其备份移动到新 iPhone 或只是从备份中恢复,这些值将被恢复。
我没有答案,但如果我相信这个主题,动态编辑您的 plist 文件似乎是不可能的:
您不能动态编辑您的 info.plist 文件。当您将应用程序提交到 App Store 时,您的应用程序包(包括 info.plist)不能更改,因为您编译应用程序时创建的签名是基于该包的。
在默认状态下存储状态与拥有两个版本的应用程序相比,对隐私的保护并不多或少。盗版者要么盗版豪华版,要么盗版带有标志的统一版。