如何安全地存储我的应用程序的数据

How to store data for my application securely

我正在 Xcode 中使用 Objective-C 为 iOS 和 OSX 创建游戏。

我正在经历的一个主要问题是找到防止作弊者入侵我的游戏的方法。

我最近学会了如何通过 属性 列表来 save/read 信息。在应用程序的 OSX 版本中,我可以直接访问这些列表并通过右键单击应用程序、转到“包内容”和“资源”来编辑它们。我最初的计划是 store/edit 高分等数据。显然,这样做的一个主要缺陷是该应用程序的用户可以轻松作弊。

除此之外,我还为 iOS 玩过很多游戏,我看到用户在记分牌上作弊,有时甚至是似乎已经破解了游戏的用户,因为他们有大量的钱,他们绝对不可能以其他方式获得(我想到的例子是一个竞争性的塔防游戏,两个玩家开始时都是 0 现金,每隔几秒赚取一定数量的现金。如果玩家获得的现金是可能的 100 倍,那么他们肯定已经被黑了在最初的几秒钟内)。

因此我担心我存储在游戏中的数据的安全性,正在寻找解决方案,以下是我正在考虑的。

  1. 我很喜欢 属性 列表,但是使用其他形式的数据存储方法会更安全吗?还是只是因为黑客仍然可以解码这些文件?

  2. 有什么方法可以将这些 属性 lists/data 隐藏在应用程序中,使黑客无法访问它们吗?或者如果他们足够努力的话,他们最终还是会找到他们吗?

  3. 如果以上2条都做不到或者仍然存在作弊的可能,那么最好的解决办法是对这些列表中的数据进行编码,使其只能通过一些密钥读取?例如。我存储的每个分数都将通过除以 -129 进行编码,而应用程序将通过乘以 -129 来读取它们。

有人可以为 OSX 和 iOS 推荐解决此问题的方法吗?

我认为最好的解决方案是将这些值存储在服务器上,并且这些值只能在身份验证后通过 HTTPS 连接访问。

另一种方法的缺点是无法离线使用。

因此,如果您也希望离线访问,那么您也可以使用 plist。您唯一需要做的就是加密文件并将其写入文档目录。您可以将您的 plists 转换为数据,然后加密并写入它。密钥可以是您可以存储在 iOS 钥匙串中的用户密码。

上面的方法会很安全,实际上很安全,但没有什么是牢不可破的。希望这对您有所帮助。

您可以使用此 library 进行加密。