【问题标题】:Android: how to protect data in a SQLite database?Android:如何保护 SQLite 数据库中的数据?
【发布时间】:2011-11-25 17:15:32
【问题描述】:

我目前正在开发一款将数据保存到 SQLite 数据库中的 Android 游戏。这不是真正的“敏感”数据,但我不希望用户能够修改它(出于游戏平衡的明显原因,因为它会作弊)。 当你的手机被 root 后,访问和修改 SQLite 数据库非常容易(市场上有很多应用程序)。

那么我是否应该担心这一点,或者考虑拥有根手机的用户可以做任何他们想做的事情,包括作弊,这是他们的选择?或者我能否以某种方式加密我不希望他们修改的数据,或者添加 MD5 校验和或类似的东西?

另一种方法是完全放弃 SQLite,并使用某种包含游戏数据的二进制文件。

如果你们中的一些人已经遇到过类似的问题,请告诉我,你们采用了哪些方法,以及 Android 游戏开发社区中的“良好做法”。

谢谢。

【问题讨论】:

    标签: android sqlite encryption protection


    【解决方案1】:

    每个人的根访问权限和安全性是相互排斥的。

    任何具有 root 权限的应用程序或用户都可以读取和修改您系统上的每个文件,以及所有主内存。这样就没有多少地方可以为数据库存储潜在的加密密钥了。

    您可以在可执行文件、配置文件等中隐藏部分密钥,但您能想出的一切都只不过是模糊不清和安全性。

    如果用户选择向所有人授予 root 访问权限,那是他们的决定,而作为应用开发者,防止可能造成的任何伤害不是您的职责。

    更新: Storing API keys in Android, is obfustication enough? 是一个非常相似的问题 - 它是关于保护 API 密钥的,但在您的选项方面情况相同。

    【讨论】:

    • 在某种程度上是对的,但我的工作是努力保持我正在玩的游戏的某种平衡 - 我知道没有安全是完美的,但由于不涉及经济利益,我不如果它是加密的,不要指望用户带大枪来破解我的数据库:) 无论如何,我什至不确定我最终会添加加密或其他任何东西。我只是对潜在的解决方案感兴趣
    • 哦,所以你担心作弊者会使用root手机来获取一些优势,修改分数等?那么你最好的选择可能是混淆以防止“临时作弊者”。但是有足够决心的人最终总会对你的努力进行逆向工程——你无法控制用户的手机。有关更多详细信息,请参阅更新中的链接。
    • 好的,感谢您的链接和您的意见。正如他们在那个问题中所说的那样,我将使用简单的混淆或“混淆”;)
    【解决方案2】:

    适用于 Android 的 sqlcipher 可能会有所帮助。

    https://guardianproject.info/code/sqlcipher/

    【讨论】:

    • 有趣,我会研究一下,虽然它现在还只是 alpha。我也担心性能影响,我需要做一些测试。
    • 性能影响可能还可以。我相当担心加密方案(在我看来)实施不正确的事实。篇幅有限,在这里解释一下,我正在考虑写一个专题。
    【解决方案3】:

    我认为根据您的要求,最好的方法是使用数据的一致性, 例如 MD5 分数和时间,然后将分数和时间和 MD5 放入表中,然后每次要使用 DB 的那一行检查分数和时间的 MD5,如果 DB 中的和计算的相同, 行是一致的,否则被黑了!

    【讨论】:

    • 是什么阻止了攻击者修改MD5?
    • 如果您使用自己的哈希方法,则很难模仿!虽然并非不可能。
    【解决方案4】:

    您可能会在 Preferences Files Look here找到您的快乐

    【讨论】:

    • 不,我的数据结构过于复杂,无法使用共享首选项。但无论如何,谢谢,这确实是我的第一次尝试,但很快就变得无法管理。
    • 我认为共享首选项也作为文件存储在应用程序的 sharedprefs 文件夹下。因此,如果手机已root,用户也可以访问它。
    猜你喜欢
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2021-11-13
    • 2011-05-16
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多