【问题标题】:Android License Verification Library when offline离线时的 Android 许可证验证库
【发布时间】:2010-10-12 09:03:36
【问题描述】:

所以,我已经使用我的应用程序设置了 Android LVL 以检查许可。这似乎适用于测试帐户。问题是,如果我关闭手机的互联网连接并尝试运行该应用程序,许可检查将失败并告诉我它没有获得许可!

一件事是,为什么它告诉我应用程序未获得许可,更重要的是,我如何让应用程序“记住”它是否已获得许可。

【问题讨论】:

    标签: android google-play android-lvl


    【解决方案1】:

    显然,这个问题的答案是许可证在测试时没有被缓存,而是在市场上时被缓存。我创建了一个小应用程序来测试它,它可以工作!

    【讨论】:

    【解决方案2】:

    抱歉,我也确认飞行模式会导致无法依赖任何缓存。从理论上讲,如果应用程序在线并在离线之前 ping 了许可证服务器,那么它可能会工作。但是,如果手机长时间处于离线状态,则没有缓存机制。只看代码。我针对 android 提交了一个错误: http://code.google.com/p/android/issues/detail?id=12978

    因为我的 Shout n' Snap 用户已经在确认这种愚蠢的行为。

    我已在客户端使用 2 部分挑战来解决此问题。例如:

    
    IF LICENSED:
      PERSIST random key as LK
      PERSIST obfuscated random key as OLK
    ELSE:
      if (deobfuscate(OLK) == LK) 
        GRANT ACCESS
      ELSE:
        GET LOST 
    

    代码在这里:http://code.google.com/p/androidbest/

    【讨论】:

    • 您认为将许可证检查的结果存储在数据库中的某个地方然后在可用时使用它是一个糟糕的计划吗?
    • 实际上,我存储了一个随机生成的 uid、AND 和混淆版本。如果 deobfuscate(uid) == uid 那么很好。进行反混淆的唯一方法是实际拥有代码。为了进一步保护,最好也混淆您的 apk。
    • 这种技术听起来不错,因为它修补了 LVL 中的一个漏洞,但它与存储一个布尔值作为许可证检查的结果完全相同,或者说两个布尔值并加密。我的意思是,如果有人可以将他的手放在两个字符串 LK 和 0LK 上,并将它们自动放入数据库(或混淆首选项),它将通过许可证检查。
    • 仅在人们离线时添加它并没有那么糟糕,并且在可用时优先考虑真正的许可证检查听起来是一个很好的补充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2023-04-06
    • 1970-01-01
    • 2013-08-29
    • 2018-02-08
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多