代码之家  ›  专栏  ›  技术社区  ›  mavrosxristoforos Dmitry Pavliv

如何在Google Play Billing Library版本4中混淆购买和SKU详细信息?

  •  0
  • mavrosxristoforos Dmitry Pavliv  · 技术社区  · 4 年前

    和其他发布了应用内计费的Android应用程序的人一样,我遵循了 AIDL to Google Play Library migration guide 剩下的人呢 integration documentation 以便在我的应用程序中实现最新版本的计费库。到目前为止,一切进展顺利。

    我的应用程序是一个典型的免费应用程序,你可以付费解锁一些额外的功能。然而,它不是一个很大的。没有后端服务器来验证购买情况,老实说也不需要。尽管如此,我还是很重视我的应用程序和在其中进行的购买,因此我采取了一些措施来防止欺诈。

    一个这样的行动是隐藏和混淆应用程序的代码,因此,反编译和破解它变得烦人,足以让人考虑付出非常低的价格为其溢价特征,而不是破解它。我想到目前为止,我已经成功地防止了这种情况。

    在发布带有新计费库的应用程序之前,我对其进行了反编译,并查看了反编译代码。 从安全角度看,我无法描述我对新库的实现是多么令人失望 .

    使用的库的早期版本 Intent 和 Bundle 具有 String 和 int ,新的 Purchase 和 SkuDetails . 尽管ProGuard对方法名进行了模糊处理,但这两个类没有 .因此,在所有文件中搜索“购买”非常容易,您很快就会找到 onPurchasesUpdated , onQueryPurchasesResponse 和 onSkuDetailsResponse 看起来像:

    public void M(com.android.billingclient.api.g paramg, List<Purchase> paramList)
    {
       ...
    }
    
    public void N(com.android.billingclient.api.g paramg, List<Purchase> paramList)
    {
       ...
    }
    
    public void O(com.android.billingclient.api.g paramg, List<SkuDetails> paramList)
    {
      ...
    }
    

    我认为现在对于一个破解者来说,很明显的一点就是要遵循 购买 和 SKU详细信息 对象,特别是因为我们需要以某种方式将它们保存在内存中,以便 launchBillingFlow 包括 SKU详细信息 在 BillingFlowParams .

    因此,问题是:

    我怎样才能更好地混淆这个问题呢 购买 和 SKU详细信息 反编译代码中的类?我应该用我自己的课程来代替它们吗?我应该继承他们的遗产吗?我应该重新创建 SKU详细信息 班我应该不担心吗?你是怎么处理的?

    1 回复  |  直到 4 年前
        1
  •  0
  •   Michiel    4 年前

    有人可能会想,反编译应用程序是否是黑客的首选。 根设备可以安装模拟游戏商店应用程序,该应用程序可以立即返回用户已使用IAPs向任何应用程序付款的信息。无需了解您的应用程序即可获得高级功能。

    在我看来,花一些时间建立一个后端来检查它是否是一个合法的应用程序内购买,是值得的。如果您使用fi,那么后端托管可能很便宜,甚至是免费的。Firebase功能。Play store会将实际购买的内容发送到您的后端,后端会向应用程序报告成功。