【问题标题】:Would this Google LVL policy implementation be reasonably secure?这种 Google LVL 政策实施是否合理安全?
【发布时间】:2012-07-26 10:40:18
【问题描述】:

Google 在其License Verification Library 中提供的默认ServerManagedPolicy 依赖于服务器响应来确定许可证重新验证间隔。这导致需要永久每隔几天重新验证一次。这不仅会给用户带来麻烦,对于长时间没有连接的用户来说,这可能是一个严重的问题。 (我们刚刚收到一位用户的询问,该用户预计将在几周内没有互联网连接,这就是提出这个问题的原因。)

总之,我正在寻找一种能够完成两件事的算法:

  1. ServerManagedPolicy 相比,大大降低了连接要求;
  2. 提供相同级别的反盗版保护。

在对this question 的回答中,建议的策略算法是忽略 Google 服务器响应中提供的时间,而是使用大约一个月的 LICENSED 到期期限,每隔几天尝试一次许可证检查(以延长如果收到 LICENSED 响应,则为有效期)。

虽然这种方法部分实现了第一个目标,但它仍然要求用户在使用该应用程序时每月连接一次,因此它不适用于我们的(至少一个)用户。

以下算法实现了第一个目标,但我不知道第二个目标。任何指出该算法弱点的 cmets 或其他方法的建议都将受到欢迎。

  1. 首次运行时,请进行许可证检查并坚持在提供完整功能之前做出 LICENSED 响应。收到后,设置一个相对较短的到期期限(但比 Google Play 提供的退款期限长,目前为 15 分钟)。在此之后还要注册几天的宽限期。
  2. 应用程序将在许可证到期后再次开始检查。如果连接失败(飞行模式等),在宽限期到期之前,它仍然可以运行。
  3. 在宽限期到期后,坚持第二次 LICENSED 响应,然后再允许应用正常运行。
  4. 在收到第二个 LICENSED 响应后,永久启用该应用的所有功能,再也不用检查了。
  5. 如果在任何时候收到 UNLICENSED 响应,请永久禁用全部功能。 (当然,用户可以通过删除所有应用数据恢复到第 1 步。)

补充点:

  • 建议放弃第一次许可证检查,等到返回期限到期后再进行许可证检查。坚持第一个 LICENSED 响应的目的是防止在许可证检查失败后用户简单地停止应用程序进程、清除应用程序数据并重新启动应用程序的漏洞利用。 (即使一次只能使用 15 分钟,该应用也能提供价值。)
  • 坚持第二个 LICENSED 响应的目的是绕过购买-运行-备份-退货-恢复漏洞。
  • 我不是在问回调许可证检查是否是一个好主意(这就是 Google 提供的替代其已弃用的复制保护机制的方法)。我也很清楚,没有任何反盗版保护是万无一失的,谷歌的整个许可机制都可以被规避(在这种情况下,所有关于策略算法设计的问题都无关紧要)。这个问题的重点是上述算法的相对风险(对我们)和收益(对用户)与其他策略相比(例如ServerManagedPolicy)。

【问题讨论】:

  • 从“已购买,仍需要验证”到“已购买,不再需要验证”的“不可见”过渡存在问题。您需要在应用程序的某处反映这一点,即使只是在某些设置对话框中。 (许可证:某处的临时许可证,如果在“返回窗口”关闭后单击会强制检查立即,如果“太早”无法获得永久许可证,则会生成错误消息。一旦验证第二时间(自动或手动),变为许可证:永久。)
  • @Yakk - 我不确定你看到了什么问题。是否需要让用户控制第二次检查的时间?
  • 所以有人购买了你的产品,知道它“离线工作”。然后他们下载它,运行它,它可以工作。接下来,他们失去了连接(没有数据,无论出于何种原因wifi关闭)。 3 天后,他们的应用程序停止工作,几乎没有诊断。关键是能够说“应用程序离线工作一旦它说永久许可”。对于您的客户来说,这(显然)是一个重要的状态更改:让客户看到该状态更改非常重要。
  • @Yakk - 啊,我明白你的意思了。客户体验至关重要,因此该政策仍需要进行一些调整。我问这个问题已经三年了,我们实际上采用了一种变体,基本上客户永远不会看到任何不愉快的事情,除非应用程序得到明确的 NOT_LICENSED(或类似)响应。特别是,在第一次许可证检查之后,无法与服务器通信永远不会影响用户。这很容易受到“始终离线运行此应用”的攻击,但由于我们应用的性质,我们认为这是一个可接受的风险。
  • 我建议您不要“永久禁用所有功能”,而应该只发出一个坚持付款和注册的弹出窗口。您的目标并不是真正阻止使用,而是收取收入。

标签: android algorithm google-play android-lvl access-rights


【解决方案1】:

关于盗版,总是有风险的,你做什么都不能完全阻止它。

与其他风险相反,您可能会因客户无法使用的应用而感到不安。

我预计会有很多 0* 评论来自不满意的客户,他们甚至无法使用他们付费购买的应用程序,因为它已被禁用,而免费获得该应用程序的人可能不会受到干扰。当盗版者不间断地观看时,这就像购买 DVD 并让您的脸上写满版权警告。

我会在购买应用程序时坚持获得许可响应,而不是为第二个响应而烦恼。如果有人能在一种反应中找到自己的出路,他们就会在第二种反应中找到自己的出路。

编辑:我同意 kcoppock 的观点,即购买后 20 分钟的许可支票将对客户造成最小的干扰并避免您提到的退款错误

【讨论】:

  • 一次性批准取决于一个非常简单且众所周知的漏洞:1)购买应用程序; 2)运行它并获得许可响应; 3) 备份您的设备; 4) 退回应用程序(在 15 分钟退款窗口内); 5)从备份中恢复您的应用程序。 Voilà - 一个未购买的应用程序,认为它已获得许可。为防止这种情况发生,在退货窗口关闭后必须至少进行一次许可证检查。我应该补充一点,问题是提议的政策是否比 LVL 附带的默认政策(要求每隔几天检查一次,永远)有更多的盗版或其他风险。
  • 为什么不在首次启动后将许可检查(允许完整功能)延迟约 20 分钟?然后你就在返回窗口之外了。
  • @kcoppock - 是的,这可能是个好主意。这与 here 发布的建议一致。真正的问题是,依赖于到期后交付的单个 LICENSED 响应是否会使我们面临比ServerManagedPolicy 的默认行为更多的风险。
  • 实际上,我必须同意@Alex 的观点——想要盗版的人会盗版,并且采取极端措施防止盗版只会加剧您的付费客户。我不了解 ServerManagedPolicy,所以我不能说任何比较的话,但是一旦你从退款后窗口时间范围内获得了一个许可响应,我就会放手。
  • @kcoppock - 我不是要走极端。我想问的是,如果我们放松保护 Google 提供的 LVL 的默认实施,我们会面临哪些额外的盗版风险。
猜你喜欢
  • 1970-01-01
  • 2015-09-05
  • 2021-09-29
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多