将数据放在实现文件而不是头文件或其他数据文件中更安全吗?

时间:2015-03-12 07:06:35

标签: objective-c security compilation

目的是通过黑客攻击本地游戏数据来增加用户欺骗游戏的成本,安全性是主要关注点。不需要考虑设计师和程序员之间的工作流程相关问题。

情况:iOS游戏开发,objective-c

为了保存一些简单结构的游戏设置数据,例如老板的HP Max值,我有三个计划:

  1. 使用plist文件(或XML \ SQLite等,base64编码是可选的);
  2. 使用宏#define并将这些数据放入特定的标题文件中说constants.h;
  3. 使用obj-c代码在实现文件中编写它们。例如,使用单例实例GameData,将数据放入GameData.m并通过调用其方法获取它们。
  4. 我的问题是:

    1. 计划3是最安全的吗?
    2. 还有其他更好的计划吗?
    3. 当您使用第一个和第二个计划来保存数据时,编写代码时是否正确?#34;所有数据甚至是此处的代码都对用户可见"?例如,#define kABC 100.0f#define kEnemy01_HP_Max 100.0f更安全(看起来更容易让黑客感到困惑)?

2 个答案:

答案 0 :(得分:2)

除非您加密数据,否则这两种方法都不安全,也不比其他方法更安全。您将数据安全性/完整性与私有封装混淆。它们没有关联:黑客不会很友好地使用你预先定义的setter / getter函数,它们将检查你的程序的二进制可执行文件。任何拥有基本十六进制编辑器的人都可以查看这些数据,如果他们知道在哪里查看的话。

编辑: 另请注意,变量/函数/宏名称等仅存在于源代码中,它们不存在于您的可执行文件中。因此,给他们隐藏的名字将有一个目的,那就是让你,程序员迷惑。

答案 1 :(得分:2)

使用您提到的GameData单例。添加3种方法:

  1. 使GameData能够从未加密的数据中读取数据 文件。
  2. 使GameData能够将其数据加密为数据 文件。
  3. 使GameData能够从加密数据中读取数据 文件。
  4. 请参阅:http://www.codeproject.com/Articles/831481/File-Encryption-Decryption-Tutorial-in-Cplusplus

    开发使用未加密的数据文件并使用GameData加密数据(方法1和方法2)。

    发送加密数据文件并使用GameData对其进行解密(方法3)。