在 BillingService 模块中,需要修改啥来增加安全性?
Posted
技术标签:
【中文标题】在 BillingService 模块中,需要修改啥来增加安全性?【英文标题】:In the BillingService module, what needs to be modified to increase security?在 BillingService 模块中,需要修改什么来增加安全性? 【发布时间】:2012-02-06 01:27:44 【问题描述】:BillingService 类的评论建议:
您应该在使用之前修改和混淆此代码。
好的,但是什么必须修改?
类名?用于记录的 TAG?方法名称和数据成员?逻辑和程序流程本身?其他?
换句话说,我可以理解混淆的必要性,但是我如何才能在不从头重写所有内容的情况下实施建议(可能存在比不修改任何内容更糟糕的错误)?
【问题讨论】:
【参考方案1】:我目前正在处理这个问题,到目前为止,我的方法如下:
-
我正在使用 BillingReceiver、Billing Service、PurchaseObserver 和 ResponseHandler。
我已将所有常量移至我自己的常量类中,并且上述所有类都包含在我自己的包中。
我已经取消了 PurchaseDatabase 类,并将它的一部分集成到我自己的 SQLite 数据库、DBAdapter 和数据访问类中。
我已将 CatalogEntry 更改为我自己的模型对象,我的 UI 将与示例完全不同,例如产品项目的 RadioButton 组而不是 Spinner(我只有 4 个)。
它在安全类中说“为了实现安全,所有这些代码都应该在与应用程序通信的服务器上实现”。我很幸运,我的应用程序无论如何都必须联系我的服务器,所以我将在服务器上实施这些安全措施,并且我将自己验证传递给服务器的购买信息。我希望使用 SSL 保护这部分通信,并且我已经需要存储在我的服务器上的先前用户名/密码(散列和加盐)。
我正在删除任何其他我不使用的多余代码,例如有效载荷编辑。
有些方法的签名中有 5 或 6 个参数,例如onPurchasestateChanged() - 我正在考虑将这些组合成一个包装对象(但还没有这样做)。
我正在缓慢而彻底地测试它,以便我了解发生了什么,并遵循建议。我首先使用了完整的样本来确保它有效并测试了静态响应。然后我开始进行自己的更改,同时仍在进行静态测试。我仍在使用静态响应进行测试,我将按照消息流来了解正在进行的交换。对此感到满意后,我将使用自己的产品 ID 进行测试,并尝试对数据及其安全性感到满意。
我认为 developerPayload 字符串也可以被签名和加密,当返回到我的服务器时,解密并检查完整性。
最后,我将使用 ProGuard 混淆代码,并遵循 *** 上提供的一些提示。
希望这会有所帮助。
【讨论】:
您的详细回答绝对值得 +50。谢谢。【参考方案2】:这里没有好消息:除了使用 Proguard 之外,您还需要进行任何更改。这包括合并类、拆分它们、将某些方法从一个模块移动到另一个模块,尤其是对存储在数据库中的购买信息进行加密,正如PurchaseDatabase
类的描述所暗示的那样:
在将任何信息存储到 持久存储。混淆器应使用特定的密钥 给设备和/或用户。否则攻击者可以复制数据库 充分有效的购买并将其分发给其他人。
原因是使用 AntiLVL 之类的工具很容易将反编译(混淆!)代码与原始示例进行比较,并从中扣除任何需要破坏它的内容。完全防止开裂是不可能的,但你应该尽量让它变得困难。
【讨论】:
【参考方案3】:他们解释如下:
应用内计费示例应用程序是公开分发的,可以 任何人都可以下载,这意味着它相对容易 如果您使用示例,攻击者会对您的应用程序进行逆向工程 代码与发布时完全相同。示例应用程序旨在 仅用作示例。如果您使用样本的任何部分 应用程序,您必须在发布之前对其进行修改或将其发布为 生产应用程序的一部分。
特别是,攻击者寻找已知的入口点和出口点 在应用程序中,因此修改这些部分很重要 您的代码与示例应用程序相同。
意思是不要使用提供的代码,更改其中的一部分,这样黑客就无法知道你使用的是什么代码。
基本上,我认为它们不是指 billingService 本身,而是指您在应用程序中使用它的方式。
【讨论】:
好的,但是该注释出现在示例中的几个模块中,在每个模块的开头:BillingService、ResponseHandler、PurchaseDatabase。有哪些变化? 更改使用它们的应用程序,而不是直接更改它们。 我喜欢您的解释,但恐怕与 Google 的意思相反:“如果您使用示例应用程序的任何部分,则必须在发布之前对其进行修改或将其作为生产应用程序的一部分发布。”对我来说,这意味着至少重组上述 3 个模块。 BillingService 不是示例应用程序,它是示例应用程序内部使用的服务。因此,您要做的就是更改示例应用程序代码。以上是关于在 BillingService 模块中,需要修改啥来增加安全性?的主要内容,如果未能解决你的问题,请参考以下文章
Android inapp billing - BillingService 在 onServiceConnected 和 onServiceDisconnected 上出现编译错误