【问题标题】:Android in app purchase securityAndroid 应用内购买安全
【发布时间】:2013-11-21 19:40:57
【问题描述】:

好的,(对我来说)这是一个相当复杂的问题,让我的菜鸟脑子很疼。

在我的游戏中,有一系列特殊动作(连击)。我打算将其中大部分用于应用程序购买。此外,关闭广告将是应用内购买。

有人向我建议,玩家也应该能够通过扩展游戏来获得连击。或许可以购买在游戏中赚取他可以花费的“积分”。

在我看来,无论哪种方式,存储组合可供玩家使用这一事实的唯一方法是在“共享偏好”中存储一个指示符。

我担心共享偏好对用户干扰的脆弱性。据我了解,“共享首选项”只是一个可供任何 root 用户使用的 .xml 文件。如何阻止用户简单地访问 .xml 并将数据更改为“combo1 = true”或 credits = “1,000,000”或“ads = off”?

在写这篇文章时,我意识到我可以使用用户无法猜到的代码,而不是使用“true”或“off”之类的明显词。那会安全吗?

但是学分呢?当值可以是任何值时,如何存储用户无法猜测的值。

我想我可以使用从该值和游戏代码中的等式派生的代码来处理该值。所以在游戏中有一个方程

代码 =((学分/2)*10)+1)。

这意味着如果 credits 是 1000,那么存储在 sharedprefs 中的值必须是 50011000。因此,除非用户知道等式,否则他们将无法在 .xml 中输入有效值

这些想法有意义吗?他们会工作吗?有没有更好、更成熟的方法来做到这一点?

对不起,我是个菜鸟。

【问题讨论】:

  • 您可以根据这些偏好对数据进行加密,或许可以结合当前用户 ID(Google 或您自己的)来阻止加密值的交换?

标签: android in-app-purchase


【解决方案1】:

使用具有唯一校验和算法的数字签名或代码,该算法必须经过验证才能被接受。

这会将问题更改为对程序进行逆向工程以发现密钥或禁用检查。

即使这样也不是真正的安全,只是让它变得更难。

【讨论】:

    【解决方案2】:

    像这样共享偏好以保存数据根本不是一个好选择。你应该有远程服务来做到这一点,因为如果用户从设置中清除数据,他的所有信用都会消失,甚至他的购买历史。所以请使用远程服务器来保存该数据。

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 2014-03-05
      • 1970-01-01
      • 2013-03-17
      • 2014-05-31
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多