这个Google LVL政策实施是否足够安全?

15
默认的 ServerManagedPolicy 在 Google 提供的许可证验证库 中依靠服务器响应来确定许可证重新验证的时间间隔。这导致需要每隔几天进行重新验证,永无止境。这不仅对用户来说很麻烦,而且对于长时间没有连接的用户来说可能是一个严重的问题。(我们刚刚收到一名用户的询问,他预计将在数周内没有互联网连接,这也是提出这个问题的原因。)
总之,我正在寻找一个算法,它可以实现两个目标:
  1. ServerManagedPolicy 相比,大大减少了网络连接要求;
  2. 提供相同水平的防盗版保护。
在回答这个问题时,建议的策略算法是忽略来自 Google 服务器响应中提供的时间,并使用约为一个月的已许可到期期间,在每隔几天尝试许可证检查(如果收到LICENSED响应,则延长到期期限)。
虽然这种方法部分地解决了第一个目标,但它仍然需要用户每月连接一次应用程序,因此它对于我们的(至少之一的)用户不起作用。
以下算法实现了第一个目标,但我不知道第二个目标如何。欢迎提出指出此算法的弱点或提出其他方法的任何评论。
  1. 首次运行时,执行许可证检查,并在提供完整功能之前坚持获得LICENSED响应。一旦收到,设置相对较短的到期期限(但比 Google Play 提供的退款期限长,目前为15分钟)。还要注册几天的优雅期。
  2. 应用程序将在许可证到期后再次开始检查。如果连接失败(飞行模式等),则仍将正常工作,直到优雅期过期。
  • 在宽限期结束后,在允许应用程序正常运行之前,坚持要求第二个已授权的响应。
  • 收到第二个已授权的响应后,永久启用应用程序的所有功能,并且不再进行检查。
  • 如果在任何时候收到未经许可的响应,则永久禁用完整功能。(当然,用户可以通过删除所有应用数据来回到步骤1。)
  • 其他注意事项:

    • 有人建议放弃第一次许可检查,并等待退货期满后再进行许可检查。 坚持要求第一个已授权的响应的目的是防止利用漏洞,即在许可检查失败后,用户只需停止应用程序进程,清除应用程序数据并重新启动应用程序。 (即使每次仅能使用15分钟,该应用程序也提供价值。)
    • 坚持要求第二个已授权的响应的目的是解决购买-运行-备份-退货-恢复漏洞。
    • 我不是在询问回调式许可检查是否是一个好主意(这是Google提供的替代其已弃用的版权保护机制的方案)。 我也很清楚,没有反盗版保护是绝对可靠的,整个Google许可机制都可以被规避(在这种情况下,关于策略算法设计的所有问题都是无关紧要的)。 本问题的主要点是相对风险(对我们)和好处(对用户)的比较,即相对于其他策略(如ServerManagedPolicy),上述算法的优缺点。

    “从“已购买,仍需验证”到“已购买,无需再次验证”的“隐形”转换存在问题。您需要在应用程序的某个地方反映这一点,即使只是在某些设置对话框中也可以。(许可证:暂时性的某个地方,如果在“退货窗口”关闭后单击,则会立即强制进行检查,如果“太快”获取永久许可证则生成错误消息。第二次验证后(自动或手动),变为许可证:永久性。” - Yakk - Adam Nevraumont
    @Yakk - 我不确定您遇到了什么问题。是用户需要对第二次检查的时间控制权吗? - Ted Hopp
    1
    所以有人购买了你的产品,知道它“可以离线工作”。然后,他们下载并运行它,它能够正常工作。接下来,他们失去了连接(无数据,Wi-Fi关闭或其他原因)。三天后,他们的应用程序停止工作,几乎没有诊断信息。关键是要能够说“该应用程序可以离线工作一旦它显示为永久许可”。这对于你的客户来说是一个(显然)重要的状态变化:因此将该状态变化可见给客户非常重要。 - Yakk - Adam Nevraumont
    @Yakk - 啊,我明白你的意思了。客户体验至关重要,所以这个策略仍需要进行一些调整。从我问这个问题到现在已经三年了,我们实际上采用了一个变种,基本上用户永远不会看到任何异常,除非应用程序收到一个明确的NOT_LICENSED(或类似的)响应。特别是,在第一次许可检查之后,与服务器无法通信绝不会影响用户。这种方法容易受到“始终离线运行此应用程序”的攻击,但由于我们应用程序的性质,我们认为这是可以接受的风险。 - Ted Hopp
    我建议你不要“永久禁用所有功能”,而是应该弹出一个窗口,要求付款和注册。你的目标并不是防止使用,而是收集收入。 - user207421
    @EJP - 是的,这显然是有道理的,我并不是真正意味着“永久禁用”。毕竟,策略类的工作仅仅是报告二进制结果:允许或拒绝。在拒绝的情况下,由应用程序的其余部分决定如何向用户呈现消息。(运行演示模式是一个显而易见的选择)。但是,如果用户继续进行付款,确实需要提供重复请求谷歌服务器的功能。除非无法访问谷歌服务器,否则策略不应仅仅依赖于先前的NOT_LICENSED响应。 - Ted Hopp
    1个回答

    5

    关于盗版问题,总会存在风险,无论你做什么都不能完全防止。

    与其他风险不同的是,你可能因为应用程序被禁用而让顾客感到不满。

    我预计会有很多0星评价来自于那些无法使用他们购买的应用程序的不满客户,而那些免费获得应用程序的人可能不会受到任何干扰。这就像购买DVD时看到版权警告,而盗版者却能够不间断地观看。

    我会坚持在购买应用程序时进行授权检查,并且不要考虑第二个响应。如果有人能够绕过一个响应,他们也会找到绕过第二个响应的方法。

    编辑:我同意kcoppock的观点,即在购买后20分钟进行授权检查将对顾客造成最小的干扰,并避免您提到的退款错误。


    2
    一次性批准存在一个非常简单和众所周知的漏洞:1)购买应用程序;2)运行它并获得已授权的响应;3)备份您的设备;4)在退款窗口内返回应用程序;5)从备份中恢复您的应用程序。Voilà--一个认为自己已经获得许可的未购买应用程序。为了防止这种情况发生,在退款窗口关闭后必须至少进行一次许可检查。我应该补充说,问题是所提议的政策是否比LVL附带的默认政策(需要每隔几天进行检查,永远)更容易出现盗版或其他风险。 - Ted Hopp
    1
    为什么不在第一次启动后延迟许可证检查(允许完全功能)约20分钟?然后您就超出了退货窗口。 - Kevin Coppock
    @kcoppock - 是的,这可能是个好主意。这与这里发布的建议一致。真正的问题是,依赖于在到期后提供的单个LICENSED响应是否会比ServerManagedPolicy的默认行为更加风险。 - Ted Hopp
    1
    实际上,我必须同意@Alex的观点 - 那些想盗版的人会盗版,而采取极端措施来防止盗版只会激怒你的付费客户。我对ServerManagedPolicy没有任何了解,因此无法进行比较,但是一旦您从退款窗口时间获得了一个许可证响应,我会在那个时候放手不管。 - Kevin Coppock
    @kcoppock - 我并不是在谈论极端的问题。我想问的是,如果我们“放松”Google提供的LVL默认实现的保护措施,我们将面临哪些额外的盗版风险。 - Ted Hopp
    您可能会对阅读以下博客感兴趣:http://androidcracking.blogspot.co.il/search/label/antilvl,特别是这篇文章:http://androidcracking.blogspot.co.il/2011/01/anti-cracking-example.html或者这篇文章:http://androidcracking.blogspot.co.il/p/antilvl_01.html。 - Muzikant

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接